Source code for derevo.models.territory

"""
Territory model class is defined here.
"""
from __future__ import annotations

from dataclasses import dataclass, fields

from derevo.models.enumerations import (
    AcidityType,
    FertilityType,
    HumidityType,
    LightType,
    LimitationFactor,
    SoilType,
    UsdaZone,
)


[docs] @dataclass class Territory: """ Description of the territory for composition creation. None value means that the parameter is unknown and will not be taken in the account. """ usda_zone: UsdaZone | None = None limitation_factors: list[LimitationFactor] | None = None light_types: list[LightType] | None = None humidity_types: list[HumidityType] | None = None soil_types: list[SoilType] | None = None soil_acidity_types: list[AcidityType] | None = None soil_fertility_types: list[FertilityType] | None = None
[docs] def update(self, other: "Territory", replace: bool = False) -> None: """ Add `other` territory attributes to the currently set attributes. If `replace` is set to True, then replace current territory values whre `other` attributes are not None. """ self.usda_zone = other.usda_zone for attribute in (f.name for f in fields(Territory) if f.name != "usda_zone"): update: list | None = getattr(other, attribute) if update is None: continue if replace: setattr(self, attribute, update) else: current: list | None = getattr(self, attribute) if current is None: setattr(self, attribute, update) current.extend((value for value in update if value not in current)) setattr(self, attribute, current)