Spaces:
Running
Running
| """ | |
| Project state model — exact mirror of save_app_state() / load_app_state() | |
| in data_collection.py. This is the top-level container. | |
| """ | |
| from __future__ import annotations | |
| from typing import Any, Dict, List, Optional | |
| from pydantic import BaseModel, Field | |
| from app.models.process import ProcessNode | |
| class GroupCoordinates(BaseModel): | |
| """Coordinates and metadata for a process group on the map.""" | |
| lat: Optional[Any] = None | |
| lon: Optional[Any] = None | |
| box_scale: Optional[Any] = 1.5 | |
| hours: Optional[str] = "" | |
| model_config = {"extra": "allow"} | |
| class ProjectState(BaseModel): | |
| """ | |
| Complete project state. Matches save_app_state() output exactly. | |
| This is what gets serialized to/from JSON files. | |
| """ | |
| timestamp: Optional[str] = None | |
| map_locked: bool = False | |
| map_center: List[float] = [51.707937580921694, 8.772205607882668] | |
| map_zoom: float = 17.5 | |
| current_base: str = "OpenStreetMap" | |
| processes: List[ProcessNode] = Field(default_factory=list) | |
| proc_groups: List[List[int]] = Field(default_factory=list) | |
| proc_group_names: List[str] = Field(default_factory=list) | |
| proc_group_expanded: List[bool] = Field(default_factory=list) | |
| proc_group_coordinates: Dict[str, GroupCoordinates] = Field(default_factory=dict) | |
| proc_group_info_expanded: List[bool] = Field(default_factory=list) | |
| # Notes | |
| project_notes: str = "" | |
| # Potential Analysis State | |
| selected_streams: Dict[str, bool] = Field(default_factory=dict) | |
| energy_demands: List[Dict[str, Any]] = Field(default_factory=list) | |
| t_min: float = 10.0 | |
| model_config = {"extra": "allow"} | |