Skip to content

Commit 204f092

Browse files
author
Mohamed Zeidan
committed
consistent lazy loading in __init__
1 parent 9bde930 commit 204f092

File tree

5 files changed

+122
-194
lines changed

5 files changed

+122
-194
lines changed

.github/workflows/codeql.yml

Lines changed: 0 additions & 33 deletions
This file was deleted.

src/sagemaker/hyperpod/__init__.py

Lines changed: 62 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,70 @@
11
# Lazy loading implementation to avoid importing heavy dependencies until needed
22
import sys
3-
from typing import TYPE_CHECKING, Any
3+
from typing import TYPE_CHECKING
44

55
if TYPE_CHECKING:
66
# Type hints for IDE support without runtime imports
77
from .observability.MonitoringConfig import MonitoringConfig
88

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
3810

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

Comments
 (0)