mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
67 lines
1.9 KiB
Python
67 lines
1.9 KiB
Python
from dataclasses import dataclass
|
|
from typing import Optional
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class Address:
|
|
uprn: Optional[int]
|
|
landlord_property_id: Optional[str]
|
|
address: Optional[str]
|
|
full_address: Optional[str]
|
|
postcode: str
|
|
property_type: Optional[str]
|
|
built_form: Optional[str]
|
|
estimated: bool
|
|
|
|
# Additional address data, associated to a standardised asset list
|
|
domna_full_address: Optional[str]
|
|
domna_address_1: Optional[str]
|
|
landlord_heating_system: Optional[str] = None
|
|
solar_reason: Optional[str] = None
|
|
cavity_reason: Optional[str] = None
|
|
|
|
@property
|
|
def address1(self):
|
|
|
|
if self.domna_address_1 is not None:
|
|
address1 = self.domna_address_1
|
|
else:
|
|
address1 = self.address
|
|
|
|
# Format
|
|
address1 = str(int(address1)) if isinstance(address1, float) else str(address1)
|
|
return address1
|
|
|
|
@property
|
|
def request_data(self) -> dict[str, Optional[str]]:
|
|
"""
|
|
Canonical request payload for downstream services.
|
|
"""
|
|
data = {
|
|
"uprn": self.uprn,
|
|
"landlord_property_id": self.landlord_property_id,
|
|
"postcode": self.postcode,
|
|
"address1": self.address1,
|
|
"full_address": self.full_address,
|
|
}
|
|
|
|
# Drop nulls
|
|
return {k: v for k, v in data.items() if v is not None}
|
|
|
|
@property
|
|
def heating_system(self):
|
|
"""
|
|
Helper function to extract a heating system, which can be used to estimate EPC. This is a very limited,
|
|
placeholder function to cover some initial immediate cases.
|
|
:return:
|
|
"""
|
|
|
|
ll_heating = self.landlord_property_id
|
|
if not ll_heating:
|
|
return None
|
|
|
|
if ll_heating == "electric storage heaters":
|
|
# Return with the same format at the EPC
|
|
return "Electric storage heaters"
|
|
|
|
return None
|