mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-12 13:29:04 +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: Optional[float] = None
|
||||||
walls_surface_without_openings: Optional[float] = None
|
walls_surface_without_openings: Optional[float] = None
|
||||||
windows_surface: Optional[float] = None
|
windows_surface: Optional[float] = None
|
||||||
|
dimensions: Optional[str] = None
|
||||||
room_type: Optional[str] = None
|
room_type: Optional[str] = None
|
||||||
furniture_count: Optional[int] = None
|
furniture_count: Optional[int] = None
|
||||||
image: Optional[str] = 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 = true
|
||||||
log_cli_level = INFO
|
log_cli_level = INFO
|
||||||
addopts = --cov-report term-missing --cov=etl/epc --cov=recommendations --cov=backend --cov=etl/epc_clean --cov=etl/spatial
|
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 =
|
markers =
|
||||||
integration: mark a test as an integration test
|
integration: mark a test as an integration test
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue