| 961 | self.source_dir = str(Path(self.source_path).parent.resolve()) |
| 962 | |
| 963 | def generate_source_bridge(self) -> str: |
| 964 | return self.HEADER_TEMPLATE + f''' |
| 965 | from __future__ import annotations |
| 966 | |
| 967 | import importlib.util |
| 968 | import sys |
| 969 | import threading |
| 970 | from pathlib import Path |
| 971 | |
| 972 | _SPLIT_SOURCE_PATH = Path({self.source_path!r}).resolve() |
| 973 | _SPLIT_SOURCE_MODULE_NAME = "_clouds_coder_split_source_" + str(abs(hash(str(_SPLIT_SOURCE_PATH)))) |
| 974 | _SPLIT_SOURCE_LOCK = threading.RLock() |
| 975 | _SPLIT_SOURCE_MODULE = None |
| 976 | |
| 977 | |
| 978 | def _split_source_module(): |
| 979 | global _SPLIT_SOURCE_MODULE |
| 980 | if _SPLIT_SOURCE_MODULE is not None: |
| 981 | return _SPLIT_SOURCE_MODULE |
| 982 | with _SPLIT_SOURCE_LOCK: |
| 983 | if _SPLIT_SOURCE_MODULE is not None: |
| 984 | return _SPLIT_SOURCE_MODULE |
| 985 | spec = importlib.util.spec_from_file_location(_SPLIT_SOURCE_MODULE_NAME, str(_SPLIT_SOURCE_PATH)) |
| 986 | if spec is None or spec.loader is None: |
| 987 | raise ImportError(f"cannot load split source: {{_SPLIT_SOURCE_PATH}}") |
| 988 | module = importlib.util.module_from_spec(spec) |
| 989 | sys.modules[_SPLIT_SOURCE_MODULE_NAME] = module |
| 990 | spec.loader.exec_module(module) |
| 991 | _SPLIT_SOURCE_MODULE = module |
| 992 | return module |
| 993 | |
| 994 | |
| 995 | def _split_source_symbol(name: str, default=None): |
| 996 | return getattr(_split_source_module(), str(name), default) |
| 997 | ''' |
| 998 | |
| 999 | @staticmethod |
| 1000 | def _compact_imports(raw: str) -> str: |