razaali10's picture
Upload 22 files
f7a6add verified
Raw
History Blame Contribute Delete
2.92 kB
from __future__ import annotations
from typing import Any
from .capabilities import ModelCapabilityService
from .collections import CollectionService
from .engineering import EngineeringReviewService
from .hydraulics import HydraulicResultReviewService
from .hydrology import HydrologyReviewService
from .layers import LayerService
from .objects import ObjectService
from .pond import PondReviewService
from .project import ProjectService
from .qaqc import QAQCService
from .result_queries import ResultQueryService
from .results import ResultService
from .review_engine import GenericReviewEngine
from .scenarios import ScenarioReviewService
from .simulation import SimulationService
from .storage import StorageReviewService
from .topology import TopologyService
class PCSWMMClient:
"""Generic facade over PCSWMM's injected ``pcpy`` object."""
def __init__(self, pcpy: Any):
if pcpy is None:
raise ValueError("The injected PCSWMM pcpy object is required.")
self.pcpy = pcpy
self.project = ProjectService(pcpy)
self.collections = CollectionService(pcpy, self.project)
self.layers = LayerService(pcpy, self.project)
self.objects = ObjectService(self.collections)
self.simulation = SimulationService(pcpy, self.project)
self.results = ResultService(pcpy, self.project)
self.result_queries = ResultQueryService(self.results)
self.qaqc = QAQCService(self.layers)
self.topology = TopologyService(self.objects)
self.engineering = EngineeringReviewService(
self.layers,
self.objects,
self.topology,
)
self.hydrology = HydrologyReviewService(
self.layers,
self.objects,
)
self.storage = StorageReviewService(self.objects)
self.pond = PondReviewService(self.objects)
self.scenarios = ScenarioReviewService(self.collections)
self.hydraulics = HydraulicResultReviewService(
self.collections,
self.result_queries,
)
self.capabilities = ModelCapabilityService(self.collections)
self.review_engine = GenericReviewEngine(
self.project,
self.collections,
self.capabilities,
self.topology,
self.engineering,
self.hydrology,
self.storage,
self.scenarios,
)
# Backward-compatible alias.
self.review_report = self.review_engine
def health(self) -> dict[str, Any]:
return {
"pcpy_type": str(type(self.pcpy)),
"project_open": self.project.is_open,
"project": self.project.summary() if self.project.is_open else None,
"capabilities": (
self.capabilities.detect()
if self.project.is_open
else None
),
}