# coding: utf-8 """ Amber Electric Public API Amber is an Australian-based electricity retailer that pass through the real-time wholesale price of energy. Because of Amber's wholesale power prices, you can save hundreds of dollars a year by automating high power devices like air-conditioners, heat pumps and pool pumps. This Python library provides an interface to the API, allowing you to react to current and forecast prices, as well as download your historic usage. The version of the OpenAPI document: 2.0.0 Contact: dev@amber.com.au Generated by OpenAPI Generator (https://openapi-generator.tech) Do not edit the class manually. """ # noqa: E501 from __future__ import annotations import pprint import re # noqa: F401 import json from datetime import date from typing import List, Optional try: from pydantic.v1 import BaseModel, Field, StrictStr, conlist, constr, validator except ImportError: from pydantic import BaseModel, Field, StrictStr, conlist, constr, validator from amberelectric.models.channel import Channel from amberelectric.models.site_status import SiteStatus class Site(BaseModel): """ Site """ id: StrictStr = Field(default=..., description="Unique Site Identifier") nmi: constr(strict=True, max_length=11, min_length=10) = Field( default=..., description="National Metering Identifier (NMI) for the site" ) channels: conlist(Channel) = Field( default=..., description="List of channels that are readable from your meter" ) network: StrictStr = Field( default=..., description="The name of the site's network" ) status: SiteStatus = Field(...) active_from: Optional[date] = Field( default=None, alias="activeFrom", description="Date the site became active. This date will be in the future for pending sites. It may also be undefined, though if it is, contact [info@amber.com.au](mailto:info@amber.com.au) - there may be an issue with your address. Formatted as a ISO 8601 date when present.", ) closed_on: Optional[date] = Field( default=None, alias="closedOn", description="Date the site closed. Undefined if the site is pending or active. Formatted as a ISO 8601 date when present.", ) interval_length: float = Field( default=..., alias="intervalLength", description="Length of interval that you will be billed on. 5 or 30 minutes.", ) __properties = [ "id", "nmi", "channels", "network", "status", "activeFrom", "closedOn", "intervalLength", ] @validator("interval_length") def interval_length_validate_enum(cls, value): """Validates the enum""" if value not in (5, 30): raise ValueError("must be one of enum values (5, 30)") return value class Config: """Pydantic configuration""" allow_population_by_field_name = True validate_assignment = True def to_str(self) -> str: """Returns the string representation of the model using alias""" return pprint.pformat(self.dict(by_alias=True)) def to_json(self) -> str: """Returns the JSON representation of the model using alias""" return json.dumps(self.to_dict()) @classmethod def from_json(cls, json_str: str) -> Site: """Create an instance of Site from a JSON string""" return cls.from_dict(json.loads(json_str)) def to_dict(self): """Returns the dictionary representation of the model using alias""" _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) # override the default output from pydantic by calling `to_dict()` of each item in channels (list) _items = [] if self.channels: for _item in self.channels: if _item: _items.append(_item.to_dict()) _dict["channels"] = _items return _dict @classmethod def from_dict(cls, obj: dict) -> Site: """Create an instance of Site from a dict""" if obj is None: return None if not isinstance(obj, dict): return Site.parse_obj(obj) _obj = Site.parse_obj( { "id": obj.get("id"), "nmi": obj.get("nmi"), "channels": ( [Channel.from_dict(_item) for _item in obj.get("channels")] if obj.get("channels") is not None else None ), "network": obj.get("network"), "status": obj.get("status"), "active_from": obj.get("activeFrom"), "closed_on": obj.get("closedOn"), "interval_length": ( obj.get("intervalLength") if obj.get("intervalLength") is not None else 30 ), } ) return _obj