diff --git a/codegen/templates/latest/models.py.jinja b/codegen/templates/latest/models.py.jinja index ca98e6894..1084f0688 100644 --- a/codegen/templates/latest/models.py.jinja +++ b/codegen/templates/latest/models.py.jinja @@ -4,7 +4,9 @@ from typing import TYPE_CHECKING -if TYPE_CHECKING: +from githubkit.lazy_module import is_lazy_disabled + +if TYPE_CHECKING or is_lazy_disabled(): {% for name in model_names %} from {{ output_module }}.{{ latest_version_module }}.models import {{ name }} as {{ name }} {% endfor %} diff --git a/codegen/templates/latest/types.py.jinja b/codegen/templates/latest/types.py.jinja index 4d38a4023..760922e4e 100644 --- a/codegen/templates/latest/types.py.jinja +++ b/codegen/templates/latest/types.py.jinja @@ -4,7 +4,9 @@ from typing import TYPE_CHECKING -if TYPE_CHECKING: +from githubkit.lazy_module import is_lazy_disabled + +if TYPE_CHECKING or is_lazy_disabled(): {% for name in model_names %} from {{ output_module }}.{{ latest_version_module }}.types import {{ name }}Type as {{ name }}Type {% endfor %} diff --git a/codegen/templates/latest/webhooks.py.jinja b/codegen/templates/latest/webhooks.py.jinja index 27554761f..663410708 100644 --- a/codegen/templates/latest/webhooks.py.jinja +++ b/codegen/templates/latest/webhooks.py.jinja @@ -4,7 +4,9 @@ from typing import TYPE_CHECKING -if TYPE_CHECKING: +from githubkit.lazy_module import is_lazy_disabled + +if TYPE_CHECKING or is_lazy_disabled(): {% for name in event_names %} from {{ output_module }}.{{ latest_version_module }}.webhooks import {{ pascal_case(name) }}Event as {{ pascal_case(name) }}Event from {{ output_module }}.{{ latest_version_module }}.webhooks import {{ name }}_action_types as {{ name }}_action_types diff --git a/codegen/templates/models/models.py.jinja b/codegen/templates/models/models.py.jinja index a3620a12f..1bb1cb383 100644 --- a/codegen/templates/models/models.py.jinja +++ b/codegen/templates/models/models.py.jinja @@ -4,7 +4,9 @@ from typing import TYPE_CHECKING -if TYPE_CHECKING: +from githubkit.lazy_module import is_lazy_disabled + +if TYPE_CHECKING or is_lazy_disabled(): {% for group in groups %} {% for model in group.models %} from .{{ group_name(group, groups) }} import {{ model.class_name }} as {{ model.class_name }} diff --git a/codegen/templates/models/types.py.jinja b/codegen/templates/models/types.py.jinja index b141165e1..8cb8ec90e 100644 --- a/codegen/templates/models/types.py.jinja +++ b/codegen/templates/models/types.py.jinja @@ -4,7 +4,9 @@ from typing import TYPE_CHECKING -if TYPE_CHECKING: +from githubkit.lazy_module import is_lazy_disabled + +if TYPE_CHECKING or is_lazy_disabled(): {% for group in groups %} {% for model in group.models %} from .{{ group_name(group, groups) }} import {{ model.get_param_type_string() }} as {{ model.get_param_type_string() }} diff --git a/codegen/templates/webhooks/__init__.py.jinja b/codegen/templates/webhooks/__init__.py.jinja index 542b38985..d721357ee 100644 --- a/codegen/templates/webhooks/__init__.py.jinja +++ b/codegen/templates/webhooks/__init__.py.jinja @@ -4,7 +4,9 @@ from typing import TYPE_CHECKING -if TYPE_CHECKING: +from githubkit.lazy_module import is_lazy_disabled + +if TYPE_CHECKING or is_lazy_disabled(): {% for name in event_names %} from .{{ name }} import {{ pascal_case(name) }}Event as {{ pascal_case(name) }}Event from .{{ name }} import {{ name }}_action_types as {{ name }}_action_types diff --git a/githubkit/__init__.py b/githubkit/__init__.py index 147f7e05b..0a5b36798 100644 --- a/githubkit/__init__.py +++ b/githubkit/__init__.py @@ -1,6 +1,7 @@ from . import lazy_module -lazy_module.apply() +if not lazy_module.is_lazy_disabled(): + lazy_module.apply() from .auth import ActionAuthStrategy as ActionAuthStrategy from .auth import AppAuthStrategy as AppAuthStrategy diff --git a/githubkit/lazy_module.py b/githubkit/lazy_module.py index 4c01d76f4..92f0d6a2b 100644 --- a/githubkit/lazy_module.py +++ b/githubkit/lazy_module.py @@ -3,11 +3,14 @@ from importlib.abc import Loader from importlib.machinery import ModuleSpec, PathFinder, SourceFileLoader from itertools import chain +import os import re import sys from types import ModuleType from typing import Any, Optional +GITHUBKIT_LAZY_DISABLE_FLAG = "GITHUBKIT_LAZY_DISABLE_FLAG" + LAZY_MODULES = ( r"^githubkit\.rest$", r"^githubkit\.versions\.[^.]+\.models$", @@ -142,5 +145,9 @@ def find_spec( return module_spec +def is_lazy_disabled() -> bool: + return bool(os.getenv(GITHUBKIT_LAZY_DISABLE_FLAG)) + + def apply(): sys.meta_path.insert(0, LazyModuleFinder()) diff --git a/githubkit/rest/__init__.py b/githubkit/rest/__init__.py index d37716ac0..e10cb966c 100644 --- a/githubkit/rest/__init__.py +++ b/githubkit/rest/__init__.py @@ -9,7 +9,9 @@ from typing import TYPE_CHECKING -if TYPE_CHECKING: +from githubkit.lazy_module import is_lazy_disabled + +if TYPE_CHECKING or is_lazy_disabled(): from githubkit.versions.v2022_11_28.models import ( ActionsArtifactAndLogRetention as ActionsArtifactAndLogRetention, ) diff --git a/githubkit/versions/ghec_v2022_11_28/models/__init__.py b/githubkit/versions/ghec_v2022_11_28/models/__init__.py index a43a5fb71..323c19423 100644 --- a/githubkit/versions/ghec_v2022_11_28/models/__init__.py +++ b/githubkit/versions/ghec_v2022_11_28/models/__init__.py @@ -9,7 +9,9 @@ from typing import TYPE_CHECKING -if TYPE_CHECKING: +from githubkit.lazy_module import is_lazy_disabled + +if TYPE_CHECKING or is_lazy_disabled(): from .group_0000 import Root as Root from .group_0001 import CvssSeverities as CvssSeverities from .group_0001 import CvssSeveritiesPropCvssV3 as CvssSeveritiesPropCvssV3 diff --git a/githubkit/versions/ghec_v2022_11_28/types/__init__.py b/githubkit/versions/ghec_v2022_11_28/types/__init__.py index 4b653277c..19a865731 100644 --- a/githubkit/versions/ghec_v2022_11_28/types/__init__.py +++ b/githubkit/versions/ghec_v2022_11_28/types/__init__.py @@ -9,7 +9,9 @@ from typing import TYPE_CHECKING -if TYPE_CHECKING: +from githubkit.lazy_module import is_lazy_disabled + +if TYPE_CHECKING or is_lazy_disabled(): from .group_0000 import RootType as RootType from .group_0000 import RootTypeForResponse as RootTypeForResponse from .group_0001 import CvssSeveritiesPropCvssV3Type as CvssSeveritiesPropCvssV3Type diff --git a/githubkit/versions/ghec_v2022_11_28/webhooks/__init__.py b/githubkit/versions/ghec_v2022_11_28/webhooks/__init__.py index cf4ad00a9..847cf3eab 100644 --- a/githubkit/versions/ghec_v2022_11_28/webhooks/__init__.py +++ b/githubkit/versions/ghec_v2022_11_28/webhooks/__init__.py @@ -9,7 +9,9 @@ from typing import TYPE_CHECKING -if TYPE_CHECKING: +from githubkit.lazy_module import is_lazy_disabled + +if TYPE_CHECKING or is_lazy_disabled(): from ._namespace import VALID_EVENT_NAMES as VALID_EVENT_NAMES from ._namespace import EventNameType as EventNameType from ._namespace import WebhookNamespace as WebhookNamespace diff --git a/githubkit/versions/latest/models.py b/githubkit/versions/latest/models.py index d37716ac0..e10cb966c 100644 --- a/githubkit/versions/latest/models.py +++ b/githubkit/versions/latest/models.py @@ -9,7 +9,9 @@ from typing import TYPE_CHECKING -if TYPE_CHECKING: +from githubkit.lazy_module import is_lazy_disabled + +if TYPE_CHECKING or is_lazy_disabled(): from githubkit.versions.v2022_11_28.models import ( ActionsArtifactAndLogRetention as ActionsArtifactAndLogRetention, ) diff --git a/githubkit/versions/latest/types.py b/githubkit/versions/latest/types.py index 673c363a2..91cb75a9d 100644 --- a/githubkit/versions/latest/types.py +++ b/githubkit/versions/latest/types.py @@ -9,7 +9,9 @@ from typing import TYPE_CHECKING -if TYPE_CHECKING: +from githubkit.lazy_module import is_lazy_disabled + +if TYPE_CHECKING or is_lazy_disabled(): from githubkit.versions.v2022_11_28.types import ( ActionsArtifactAndLogRetentionResponseType as ActionsArtifactAndLogRetentionResponseType, ) diff --git a/githubkit/versions/latest/webhooks.py b/githubkit/versions/latest/webhooks.py index 6740c350f..1c9c06e22 100644 --- a/githubkit/versions/latest/webhooks.py +++ b/githubkit/versions/latest/webhooks.py @@ -9,7 +9,9 @@ from typing import TYPE_CHECKING -if TYPE_CHECKING: +from githubkit.lazy_module import is_lazy_disabled + +if TYPE_CHECKING or is_lazy_disabled(): from githubkit.versions.v2022_11_28.webhooks import ( BranchProtectionConfigurationEvent as BranchProtectionConfigurationEvent, ) diff --git a/githubkit/versions/v2022_11_28/models/__init__.py b/githubkit/versions/v2022_11_28/models/__init__.py index e3d90b729..928d5fa4e 100644 --- a/githubkit/versions/v2022_11_28/models/__init__.py +++ b/githubkit/versions/v2022_11_28/models/__init__.py @@ -9,7 +9,9 @@ from typing import TYPE_CHECKING -if TYPE_CHECKING: +from githubkit.lazy_module import is_lazy_disabled + +if TYPE_CHECKING or is_lazy_disabled(): from .group_0000 import Root as Root from .group_0001 import CvssSeverities as CvssSeverities from .group_0001 import CvssSeveritiesPropCvssV3 as CvssSeveritiesPropCvssV3 diff --git a/githubkit/versions/v2022_11_28/types/__init__.py b/githubkit/versions/v2022_11_28/types/__init__.py index 6bde65e9c..448d81d09 100644 --- a/githubkit/versions/v2022_11_28/types/__init__.py +++ b/githubkit/versions/v2022_11_28/types/__init__.py @@ -9,7 +9,9 @@ from typing import TYPE_CHECKING -if TYPE_CHECKING: +from githubkit.lazy_module import is_lazy_disabled + +if TYPE_CHECKING or is_lazy_disabled(): from .group_0000 import RootType as RootType from .group_0000 import RootTypeForResponse as RootTypeForResponse from .group_0001 import CvssSeveritiesPropCvssV3Type as CvssSeveritiesPropCvssV3Type diff --git a/githubkit/versions/v2022_11_28/webhooks/__init__.py b/githubkit/versions/v2022_11_28/webhooks/__init__.py index 5c554747d..71a7c78dd 100644 --- a/githubkit/versions/v2022_11_28/webhooks/__init__.py +++ b/githubkit/versions/v2022_11_28/webhooks/__init__.py @@ -9,7 +9,9 @@ from typing import TYPE_CHECKING -if TYPE_CHECKING: +from githubkit.lazy_module import is_lazy_disabled + +if TYPE_CHECKING or is_lazy_disabled(): from ._namespace import VALID_EVENT_NAMES as VALID_EVENT_NAMES from ._namespace import EventNameType as EventNameType from ._namespace import WebhookNamespace as WebhookNamespace diff --git a/scripts/test-all-models.sh b/scripts/test-all-models.sh new file mode 100755 index 000000000..8497394f2 --- /dev/null +++ b/scripts/test-all-models.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +echo "Start running" + +if env GITHUBKIT_LAZY_DISABLE_FLAG=1 python -c "import githubkit"; then + echo "✅ Test passed: Successfully imported githubkit" + exit 0 +else + echo "❌ Test failed: Failed to import githubkit" + exit 1 +fi