Source code for shapeshifter_uftp.uftp.agr_cro

from dataclasses import dataclass, field
from typing import List, Optional
from xsdata.models.datatype import XmlDate
from .common import (
    PayloadMessageResponse,
    PayloadMessage,
    RedispatchBy,
)
from .validations import validate_list
from .defaults import DEFAULT_TIME_ZONE


# pylint: disable=missing-class-docstring,duplicate-code



[docs] @dataclass(kw_only=True) class AgrPortfolioQueryResponseConnection: """ :ivar entity_address: EntityAddress of the Connection. """ class Meta: name = "AGRPortfolioQueryResponseConnection" entity_address: str = field( metadata={ "name": "EntityAddress", "type": "Attribute", "required": True, "pattern": r"(ea1\.[0-9]{4}-[0-9]{2}\..{1,244}:.{1,244}|ean\.[0-9]{12,34})", } )
[docs] @dataclass(kw_only=True) class AgrPortfolioUpdateConnection: """ A connection that the AGR want the CRO to update. :ivar entity_address: EntityAddress of the Connection entity being updated. :ivar start_period: The first Period hat the AGR represents the prosumer at this Connection. :ivar end_period: The last Period that the AGR represents the prosumer at this Connection, if applicable. """ class Meta: name = "AGRPortfolioUpdateConnection" entity_address: str = field( metadata={ "name": "EntityAddress", "type": "Attribute", "required": True, "pattern": r"(ea1\.[0-9]{4}-[0-9]{2}\..{1,244}:.{1,244}|ean\.[0-9]{12,34})", } ) start_period: XmlDate = field( metadata={ "name": "StartPeriod", "type": "Attribute", "required": True, } ) end_period: Optional[XmlDate] = field( default=None, metadata={ "name": "EndPeriod", "type": "Attribute", } )
[docs] @dataclass(kw_only=True) class AgrPortfolioQueryResponseCongestionPoint: """ :ivar connection: :ivar entity_address: EntityAddress of the CongestionPoint. :ivar mutex_offers_supported: Indicates whether the DSO accepts mutual exclusive FlexOffers on this CongestionPoint. :ivar day_ahead_redispatch_by: Indicates which party is responsible for day-ahead redispatch. :ivar intraday_redispatch_by: Indicates which party is responsible for intraday ahead redispatch, AGR or DSO. If not specified, there will be no intraday trading on this CongestionPoint. """ class Meta: name = "AGRPortfolioQueryResponseCongestionPoint" connections: List[AgrPortfolioQueryResponseConnection] = field( default_factory=list, metadata={ "name": "Connection", "type": "Element", "min_occurs": 1, } ) entity_address: str = field( metadata={ "name": "EntityAddress", "type": "Attribute", "required": True, "pattern": r"(ea1\.[0-9]{4}-[0-9]{2}\..{1,244}:.{1,244}|ean\.[0-9]{12,34})", } ) mutex_offers_supported: bool = field( metadata={ "name": "MutexOffersSupported", "type": "Attribute", "required": True, } ) day_ahead_redispatch_by: RedispatchBy = field( metadata={ "name": "DayAheadRedispatchBy", "type": "Attribute", "required": True, } ) intraday_redispatch_by: Optional[RedispatchBy] = field( default=None, metadata={ "name": "IntradayRedispatchBy", "type": "Attribute", } ) def __post_init__(self): validate_list('connections', self.connections, AgrPortfolioQueryResponseConnection, 1)
[docs] @dataclass(kw_only=True) class AgrPortfolioQuery(PayloadMessage): """ :ivar time_zone: Time zone ID (as per the IANA time zone database, http://www.iana.org/time-zones, for example: Europe/Amsterdam) indicating the UTC offset that applies to the Period referenced in this message. Although the time zone is a market-wide fixed value, making this assumption explicit in each message is important for validation purposes, allowing implementations to reject messages with an errant UTC offset. :ivar period: The Period for which the AGR requests the portfolio information. """ class Meta: name = "AGRPortfolioQuery" time_zone: str = field( default=DEFAULT_TIME_ZONE, metadata={ "name": "TimeZone", "type": "Attribute", "required": True, "pattern": r"(Africa|America|Australia|Europe|Pacific)/[a-zA-Z0-9_/]{3,}", } ) period: XmlDate = field( metadata={ "name": "Period", "type": "Attribute", "required": True, } )
[docs] @dataclass(kw_only=True) class AgrPortfolioUpdateResponse(PayloadMessageResponse): class Meta: name = "AGRPortfolioUpdateResponse"
[docs] @dataclass(kw_only=True) class AgrPortfolioUpdate(PayloadMessage): """ :ivar connection: :ivar time_zone: Time zone ID (as per the IANA time zone database, http://www.iana.org/time-zones, for example: Europe/Amsterdam) indicating the UTC offset that applies to the Period referenced in this message. Although the time zone is a market-wide fixed value, making this assumption explicit in each message is important for validation purposes, allowing implementations to reject messages with an errant UTC offset. """ class Meta: name = "AGRPortfolioUpdate" connections: List[AgrPortfolioUpdateConnection] = field( default_factory=list, metadata={ "name": "Connection", "type": "Element", "min_occurs": 1, } ) time_zone: str = field( default=DEFAULT_TIME_ZONE, metadata={ "name": "TimeZone", "type": "Attribute", "required": True, "pattern": r"(Africa|America|Australia|Europe|Pacific)/[a-zA-Z0-9_/]{3,}", } ) def __post_init__(self): validate_list('connections', self.connections, AgrPortfolioUpdateConnection, 1)
[docs] @dataclass(kw_only=True) class AgrPortfolioQueryResponseDSOPortfolio: class Meta: name = "AGRPortfolioQueryResponseDSOPortfolio" congestion_points: List[AgrPortfolioQueryResponseCongestionPoint] = field( default_factory=list, metadata={ "name": "CongestionPoint", "type": "Element", "min_occurs": 1, } ) dso_domain: str = field( metadata={ "name": "DSO-Domain", "type": "Attribute", "required": True, "pattern": r"([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}", } ) def __post_init__(self): validate_list('congestion_points', self.congestion_points, AgrPortfolioQueryResponseCongestionPoint, 1)
[docs] @dataclass(kw_only=True) class AgrPortfolioQueryResponseDSOView: class Meta: name = "AGRPortfolioQueryResponseDSOView" dso_portfolios: List[AgrPortfolioQueryResponseDSOPortfolio] = field( default_factory=list, metadata={ "name": "DSO-Portfolio", "type": "Element", "min_occurs": 1, } ) connections: List[AgrPortfolioQueryResponseConnection] = field( default_factory=list, metadata={ "name": "Connection", "type": "Element", } ) def __post_init__(self): validate_list('dso_portfolios', self.dso_portfolios, AgrPortfolioQueryResponseDSOPortfolio, 1)
[docs] @dataclass(kw_only=True) class AgrPortfolioQueryResponse(PayloadMessageResponse): """ :ivar dso_view: :ivar time_zone: Time zone ID (as per the IANA time zone database, http://www.iana.org/time-zones, for example: Europe/Amsterdam) indicating the UTC offset that applies to the Period referenced in this message. Although the time zone is a market-wide fixed value, making this assumption explicit in each message is important for validation purposes, allowing implementations to reject messages with an errant UTC offset. :ivar period: The Period that the portfolio is valid. """ class Meta: name = "AGRPortfolioQueryResponse" dso_views: List[AgrPortfolioQueryResponseDSOView] = field( default_factory=list, metadata={ "name": "DSO-View", "type": "Element", "min_occurs": 1, } ) time_zone: str = field( default=DEFAULT_TIME_ZONE, metadata={ "name": "TimeZone", "type": "Attribute", "required": True, "pattern": r"(Africa|America|Australia|Europe|Pacific)/[a-zA-Z0-9_/]{3,}", } ) period: XmlDate = field( metadata={ "name": "Period", "type": "Attribute", "required": True, } ) def __post_init__(self): self.dso_views = validate_list('dso_views', self.dso_views, AgrPortfolioQueryResponseDSOView, 1)