perf(1.1): lazy topology.generate re-export (C2)

topology/__init__ eagerly imported generator -> allocator -> repository ->
the full SQLModel ORM. Defer via PEP 562 __getattr__ so importing the
package doesn't drag the DB layer into DB-less workers. Public API
(from decnet.topology import generate) unchanged. Guard test locks it in.
This commit is contained in:
2026-06-17 16:35:30 -04:00
parent 825d7d72c9
commit 4e2b1cdaf3
2 changed files with 48 additions and 1 deletions

View File

@@ -7,7 +7,6 @@ is marked as the DMZ (Internet-facing). Persisted via the repo pattern;
deployed via :mod:`decnet.engine.deployer`.
"""
from decnet.topology.config import TopologyConfig, GeneratedTopology
from decnet.topology.generator import generate
from decnet.topology.status import (
TopologyStatus,
assert_transition,
@@ -22,3 +21,14 @@ __all__ = [
"assert_transition",
"TopologyStatusError",
]
def __getattr__(name: str):
# ponytail: lazy re-export — `generate` pulls generator→allocator→repository→the
# full SQLModel ORM (~38MB). Defer it so importing this package (which every worker
# does transitively via the CLI) doesn't drag the DB layer into DB-less workers.
if name == "generate":
from decnet.topology.generator import generate
return generate
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")