Source code for simstack.util.mappings

from typing import Dict, Optional, List
from simstack.models.models import ModelMapping, NodeModel
from odmantic import AIOEngine

[docs] class ModelMappingTable: def __init__(self, mappings: List[ModelMapping]): self._by_name: Dict[str, ModelMapping] = {m.name: m for m in mappings} self._by_mapping: Dict[str, ModelMapping] = {m.mapping: m for m in mappings}
[docs] def get_by_name(self, name: str) -> Optional[ModelMapping]: return self._by_name.get(name)
[docs] def get_by_mapping(self, mapping: str) -> Optional[ModelMapping]: return self._by_mapping.get(mapping)
[docs] @classmethod async def load(cls, engine: AIOEngine): mappings = await engine.find(ModelMapping) return cls(list(mappings))
[docs] class NodeMappingTable: def __init__(self, nodes: List[NodeModel]): self._by_name: Dict[str, NodeModel] = {n.name: n for n in nodes} self._by_mapping: Dict[str, NodeModel] = {n.function_mapping: n for n in nodes}
[docs] def get_by_name(self, name: str) -> Optional[NodeModel]: return self._by_name.get(name)
[docs] def get_by_mapping(self, mapping: str) -> Optional[NodeModel]: return self._by_mapping.get(mapping)
[docs] @classmethod async def load(cls, engine: AIOEngine): try: nodes = await engine.find(NodeModel) except Exception as e: print(f"Error loading NodeModel from database: {e}") print("WARNING: Returning empty NodeMappingTable to fix obviously corrupted case.") print("Rebuild the NodeMappingTable by rerunning the database initialization or migration scripts.") nodes = [] return cls(list(nodes))