|
1 | 1 | # Lazy loading implementation to avoid importing heavy dependencies until needed |
2 | 2 | import sys |
3 | | -from typing import TYPE_CHECKING, Any |
| 3 | +from typing import TYPE_CHECKING |
4 | 4 |
|
5 | 5 | if TYPE_CHECKING: |
6 | 6 | # Type hints for IDE support without runtime imports |
7 | 7 | from .observability.MonitoringConfig import MonitoringConfig |
8 | 8 |
|
9 | | -# Define what should be available when someone does "from sagemaker.hyperpod import *" |
10 | | -__all__ = [ |
11 | | - # Common utilities (lazy loaded) |
12 | | - 'get_default_namespace', |
13 | | - 'handle_exception', |
14 | | - 'get_eks_name_from_arn', |
15 | | - 'get_region_from_eks_arn', |
16 | | - 'get_jumpstart_model_instance_types', |
17 | | - 'get_cluster_instance_types', |
18 | | - 'setup_logging', |
19 | | - 'is_eks_orchestrator', |
20 | | - 'update_kube_config', |
21 | | - 'set_eks_context', |
22 | | - 'set_cluster_context', |
23 | | - 'get_cluster_context', |
24 | | - 'list_clusters', |
25 | | - 'get_current_cluster', |
26 | | - 'get_current_region', |
27 | | - 'parse_client_kubernetes_version', |
28 | | - 'is_kubernetes_version_compatible', |
29 | | - 'display_formatted_logs', |
30 | | - 'verify_kubernetes_version_compatibility', |
31 | | - # Observability |
32 | | - 'MonitoringConfig', |
33 | | - # Constants |
34 | | - 'EKS_ARN_PATTERN', |
35 | | - 'CLIENT_VERSION_PATTERN', |
36 | | - 'KUBE_CONFIG_PATH' |
37 | | -] |
| 9 | +from .common.lazy_loading import setup_lazy_module |
38 | 10 |
|
39 | | -def __getattr__(name: str) -> Any: |
40 | | - """Lazy loading implementation for module-level imports""" |
41 | | - |
42 | | - # Lazy load from common.utils |
43 | | - if name in [ |
44 | | - 'get_default_namespace', 'handle_exception', 'get_eks_name_from_arn', |
45 | | - 'get_region_from_eks_arn', 'get_jumpstart_model_instance_types', |
46 | | - 'get_cluster_instance_types', 'setup_logging', 'is_eks_orchestrator', |
47 | | - 'update_kube_config', 'set_eks_context', 'set_cluster_context', |
48 | | - 'get_cluster_context', 'list_clusters', 'get_current_cluster', |
49 | | - 'get_current_region', 'parse_client_kubernetes_version', |
50 | | - 'is_kubernetes_version_compatible', 'display_formatted_logs', |
51 | | - 'verify_kubernetes_version_compatibility', 'EKS_ARN_PATTERN', |
52 | | - 'CLIENT_VERSION_PATTERN', 'KUBE_CONFIG_PATH' |
53 | | - ]: |
54 | | - from .common import utils |
55 | | - attr = getattr(utils, name) |
56 | | - # Cache the imported attribute for future access |
57 | | - setattr(sys.modules[__name__], name, attr) |
58 | | - return attr |
59 | | - |
60 | | - # Lazy load MonitoringConfig |
61 | | - if name == 'MonitoringConfig': |
62 | | - from .observability.MonitoringConfig import MonitoringConfig |
63 | | - # Cache the imported class for future access |
64 | | - setattr(sys.modules[__name__], name, MonitoringConfig) |
65 | | - return MonitoringConfig |
66 | | - |
67 | | - raise AttributeError(f"module '{__name__}' has no attribute '{name}'") |
| 11 | +HYPERPOD_CONFIG = { |
| 12 | + 'exports': [ |
| 13 | + # Common utilities (lazy loaded) |
| 14 | + 'get_default_namespace', |
| 15 | + 'handle_exception', |
| 16 | + 'get_eks_name_from_arn', |
| 17 | + 'get_region_from_eks_arn', |
| 18 | + 'get_jumpstart_model_instance_types', |
| 19 | + 'get_cluster_instance_types', |
| 20 | + 'setup_logging', |
| 21 | + 'is_eks_orchestrator', |
| 22 | + 'update_kube_config', |
| 23 | + 'set_eks_context', |
| 24 | + 'set_cluster_context', |
| 25 | + 'get_cluster_context', |
| 26 | + 'list_clusters', |
| 27 | + 'get_current_cluster', |
| 28 | + 'get_current_region', |
| 29 | + 'parse_client_kubernetes_version', |
| 30 | + 'is_kubernetes_version_compatible', |
| 31 | + 'display_formatted_logs', |
| 32 | + 'verify_kubernetes_version_compatibility', |
| 33 | + # Observability |
| 34 | + 'MonitoringConfig', |
| 35 | + # Constants |
| 36 | + 'EKS_ARN_PATTERN', |
| 37 | + 'CLIENT_VERSION_PATTERN', |
| 38 | + 'KUBE_CONFIG_PATH' |
| 39 | + ], |
| 40 | + 'lazy_imports': { |
| 41 | + # Common utilities |
| 42 | + 'get_default_namespace': 'sagemaker.hyperpod.common.utils:get_default_namespace', |
| 43 | + 'handle_exception': 'sagemaker.hyperpod.common.utils:handle_exception', |
| 44 | + 'get_eks_name_from_arn': 'sagemaker.hyperpod.common.utils:get_eks_name_from_arn', |
| 45 | + 'get_region_from_eks_arn': 'sagemaker.hyperpod.common.utils:get_region_from_eks_arn', |
| 46 | + 'get_jumpstart_model_instance_types': 'sagemaker.hyperpod.common.utils:get_jumpstart_model_instance_types', |
| 47 | + 'get_cluster_instance_types': 'sagemaker.hyperpod.common.utils:get_cluster_instance_types', |
| 48 | + 'setup_logging': 'sagemaker.hyperpod.common.utils:setup_logging', |
| 49 | + 'is_eks_orchestrator': 'sagemaker.hyperpod.common.utils:is_eks_orchestrator', |
| 50 | + 'update_kube_config': 'sagemaker.hyperpod.common.utils:update_kube_config', |
| 51 | + 'set_eks_context': 'sagemaker.hyperpod.common.utils:set_eks_context', |
| 52 | + 'set_cluster_context': 'sagemaker.hyperpod.common.utils:set_cluster_context', |
| 53 | + 'get_cluster_context': 'sagemaker.hyperpod.common.utils:get_cluster_context', |
| 54 | + 'list_clusters': 'sagemaker.hyperpod.common.utils:list_clusters', |
| 55 | + 'get_current_cluster': 'sagemaker.hyperpod.common.utils:get_current_cluster', |
| 56 | + 'get_current_region': 'sagemaker.hyperpod.common.utils:get_current_region', |
| 57 | + 'parse_client_kubernetes_version': 'sagemaker.hyperpod.common.utils:parse_client_kubernetes_version', |
| 58 | + 'is_kubernetes_version_compatible': 'sagemaker.hyperpod.common.utils:is_kubernetes_version_compatible', |
| 59 | + 'display_formatted_logs': 'sagemaker.hyperpod.common.utils:display_formatted_logs', |
| 60 | + 'verify_kubernetes_version_compatibility': 'sagemaker.hyperpod.common.utils:verify_kubernetes_version_compatibility', |
| 61 | + # Observability |
| 62 | + 'MonitoringConfig': 'sagemaker.hyperpod.observability.MonitoringConfig:MonitoringConfig', |
| 63 | + # Constants |
| 64 | + 'EKS_ARN_PATTERN': 'sagemaker.hyperpod.common.utils:EKS_ARN_PATTERN', |
| 65 | + 'CLIENT_VERSION_PATTERN': 'sagemaker.hyperpod.common.utils:CLIENT_VERSION_PATTERN', |
| 66 | + 'KUBE_CONFIG_PATH': 'sagemaker.hyperpod.common.utils:KUBE_CONFIG_PATH' |
| 67 | + } |
| 68 | +} |
| 69 | + |
| 70 | +setup_lazy_module(__name__, HYPERPOD_CONFIG) |
0 commit comments