mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
map magicplan base models to data classes 🟩
This commit is contained in:
parent
d3ca6bc7ff
commit
55d7b91171
6 changed files with 92 additions and 1 deletions
|
|
@ -170,6 +170,7 @@ class Room(BaseModel):
|
|||
walls_surface: Optional[float] = None
|
||||
walls_surface_without_openings: Optional[float] = None
|
||||
windows_surface: Optional[float] = None
|
||||
dimensions: Optional[str] = None
|
||||
room_type: Optional[str] = None
|
||||
furniture_count: Optional[int] = None
|
||||
image: Optional[str] = None
|
||||
|
|
|
|||
0
datatypes/magicplan/domain/__init__.py
Normal file
0
datatypes/magicplan/domain/__init__.py
Normal file
52
datatypes/magicplan/domain/mapper.py
Normal file
52
datatypes/magicplan/domain/mapper.py
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
from datatypes.magicplan.api.response import MagicPlan
|
||||
from datatypes.magicplan.domain.models import Plan, Floor, Room, Window, Door
|
||||
|
||||
|
||||
def map_plan(mp: MagicPlan) -> Plan:
|
||||
return Plan(
|
||||
uid=mp.plan.id,
|
||||
name=mp.plan.name,
|
||||
floors=[_map_floor(f) for f in mp.plan_detail.plan.floors],
|
||||
)
|
||||
|
||||
|
||||
def _map_floor(f) -> Floor:
|
||||
return Floor(
|
||||
level=f.level,
|
||||
name=f.name,
|
||||
rooms=[_map_room(r) for r in f.rooms],
|
||||
)
|
||||
|
||||
|
||||
def _map_room(r) -> Room:
|
||||
width, length = _parse_dimensions(r.dimensions)
|
||||
return Room(
|
||||
name=r.name,
|
||||
width=width,
|
||||
length=length,
|
||||
area=r.area,
|
||||
windows=[_map_window(wi) for wi in r.wall_items if wi.symbol.id.startswith("window")],
|
||||
doors=[_map_door(wi) for wi in r.wall_items if wi.symbol.id.startswith("door")],
|
||||
)
|
||||
|
||||
|
||||
def _parse_dimensions(dimensions: str | None) -> tuple[float, float]:
|
||||
if not dimensions:
|
||||
return 0.0, 0.0
|
||||
parts = dimensions.split(" x ")
|
||||
width = float(parts[0].split(" m")[0])
|
||||
length = float(parts[1].split(" m")[0])
|
||||
return width, length
|
||||
|
||||
|
||||
def _map_window(wi) -> Window:
|
||||
return Window(
|
||||
width=wi.size.x,
|
||||
height=wi.size.z,
|
||||
area=wi.size.x * wi.size.z,
|
||||
opening_type=wi.symbol.id.removeprefix("window"),
|
||||
)
|
||||
|
||||
|
||||
def _map_door(wi) -> Door:
|
||||
return Door(width=wi.size.x)
|
||||
38
datatypes/magicplan/domain/models.py
Normal file
38
datatypes/magicplan/domain/models.py
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
from dataclasses import dataclass, field
|
||||
|
||||
|
||||
@dataclass
|
||||
class Window:
|
||||
width: float
|
||||
height: float
|
||||
area: float
|
||||
opening_type: str
|
||||
|
||||
|
||||
@dataclass
|
||||
class Door:
|
||||
width: float
|
||||
|
||||
|
||||
@dataclass
|
||||
class Room:
|
||||
name: str
|
||||
width: float
|
||||
length: float
|
||||
area: float
|
||||
windows: list[Window] = field(default_factory=list)
|
||||
doors: list[Door] = field(default_factory=list)
|
||||
|
||||
|
||||
@dataclass
|
||||
class Floor:
|
||||
level: int | None
|
||||
name: str | None
|
||||
rooms: list[Room] = field(default_factory=list)
|
||||
|
||||
|
||||
@dataclass
|
||||
class Plan:
|
||||
uid: str
|
||||
name: str | None
|
||||
floors: list[Floor] = field(default_factory=list)
|
||||
0
datatypes/magicplan/domain/tests/__init__.py
Normal file
0
datatypes/magicplan/domain/tests/__init__.py
Normal file
|
|
@ -3,6 +3,6 @@ pythonpath = .
|
|||
log_cli = true
|
||||
log_cli_level = INFO
|
||||
addopts = --cov-report term-missing --cov=etl/epc --cov=recommendations --cov=backend --cov=etl/epc_clean --cov=etl/spatial
|
||||
testpaths = recommendations/tests backend/tests etl/epc/tests etl/epc_clean/tests etl/spatial/tests backend/condition/tests backend/address2UPRN/tests backend/onboarders/tests backend/categorisation/tests backend/export/tests etl/hubspot/tests backend/hubspot_trigger_orchestrator/tests datatypes/epc/schema/tests datatypes/epc/surveys/tests datatypes/epc/domain/tests backend/ecmk_fetcher/tests/ backend/pashub_fetcher/tests backend/documents_parser/tests backend/magic_plan/tests datatypes/magicplan/api/tests
|
||||
testpaths = recommendations/tests backend/tests etl/epc/tests etl/epc_clean/tests etl/spatial/tests backend/condition/tests backend/address2UPRN/tests backend/onboarders/tests backend/categorisation/tests backend/export/tests etl/hubspot/tests backend/hubspot_trigger_orchestrator/tests datatypes/epc/schema/tests datatypes/epc/surveys/tests datatypes/epc/domain/tests backend/ecmk_fetcher/tests/ backend/pashub_fetcher/tests backend/documents_parser/tests backend/magic_plan/tests datatypes/magicplan/api/tests datatypes/magicplan/domain/tests
|
||||
markers =
|
||||
integration: mark a test as an integration test
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue