Source code for aeat.domain.calculations.registry._period_selector_match
"""Period-selector matching helpers for registry revision selection."""from__future__importannotationsimportrefromcollections.abcimportIterable_EVENT_SELECTOR_PERIOD="EVENT-N"_EVENT_PERIOD_RE=re.compile(r"^EVENT-\d+$",re.I)
[docs]defselector_period_matches_request(selector_period:str,requested_period:str)->bool:"""Return whether one selector token covers an operator/request token."""selector=selector_period.strip()requested=requested_period.strip()ifselector.upper()==_EVENT_SELECTOR_PERIOD:requested_upper=requested.upper()returnrequested_upper==_EVENT_SELECTOR_PERIODor_EVENT_PERIOD_RE.fullmatch(requested_upper)isnotNonereturnselector.casefold()==requested.casefold()
[docs]defselector_token_for_request(selector_periods:Iterable[str],requested_period:str)->str|None:"""Return the declared selector token matching a requested period, if any."""forselector_periodinselector_periods:ifselector_period_matches_request(selector_period,requested_period):returnselector_periodreturnNone
[docs]defregistry_period_for_request(selector_periods:Iterable[str],requested_period:str)->str|None:"""Return the concrete registry period to use for a requested scope."""selector_period=selector_token_for_request(selector_periods,requested_period)ifselector_periodisNone:returnNoneifselector_period.upper()!=_EVENT_SELECTOR_PERIOD:returnselector_periodrequested_upper=requested_period.strip().upper()ifrequested_upper==_EVENT_SELECTOR_PERIOD:returnselector_periodreturnrequested_upper