Source code for aeat.core.resources._repos.manuals
"""ManualRepository: composite-keyed :class:`Manual` catalogue.The composite key is ``(manual_id, year, part)`` modelled as afrozen :class:`ManualKey` record. The :class:`ManualRepository`wraps the existing loader chain in :mod:`aeat.domain.manuals`;the Settings env-override for ``AEAT_MANUALS_ROOT`` is preservedverbatim by passing the operator-resolved root through theconstructor."""from__future__importannotationsfrompathlibimportPathfromtypingimportTYPE_CHECKING,overridefrom.._keysimportTypedResourceKeyfrom.._repositoryimportResourceCacheRepositoryifTYPE_CHECKING:fromcollections.abcimportIterable,Iteratorfrom....core.configimportSettingsfrom....domain.manualsimport(Manual,ManualCasillaReference,ManualCatalogue,ManualId,ManualPart,Rule,RuleKind,Section,)
[docs]classManualKey(TypedResourceKey):"""Composite key (manual_id, year, part) for a :class:`Manual` record."""manual_id:stryear:intpart:str="single"@overridedef__hash__(self)->int:returnhash((self.manual_id,self.year,self.part))
[docs]classManualRepository(ResourceCacheRepository["Manual",ManualKey]):"""Composite-key repository for the bundled Manual catalogue. Wraps :func:`aeat.domain.manuals.load_manual` and stays in lockstep with the env-override seam on ``Settings.aeat_manuals_root``. The repository returns :class:`Manual` records keyed by :class:`ManualKey`. """def__init__(self,root:Path|None=None)->None:super().__init__()self._root=rootdef_settings(self)->Settings|None:ifself._rootisNone:returnNonefrom....core.configimportSettingsas_Settingsreturn_Settings(aeat_manuals_root=self._root)@overridedef_load(self,key:ManualKey)->Manual:from....domain.manualsimportManualId,ManualPart,load_manualmanual_id=ManualId(key.manual_id)try:part=ManualPart(key.part)exceptValueError:part=ManualPart.SINGLEreturnload_manual(manual_id=manual_id,year=key.year,part=part,settings=self._settings(),)
[docs]defcatalogue(self,specs:Iterable[tuple[ManualId,int,ManualPart]])->ManualCatalogue:"""Return a :class:`ManualCatalogue` aggregate for ``specs``."""from....domain.manualsimportload_cataloguereturnload_catalogue(specs,settings=self._settings())
[docs]deffind_rules(self,catalogue:ManualCatalogue,*,casilla_reference:ManualCasillaReference|None=None,kind:RuleKind|None=None,lang:str|None=None,)->Iterator[Rule]:"""Delegate to :func:`aeat.domain.manuals.find_rules` for rule queries. Yields each matching :class:`Rule` from the catalogue in encounter order. """from....domain.manualsimportfind_rulesreturnfind_rules(catalogue,casilla_reference=casilla_reference,kind=kind,lang=lang,settings=self._settings(),)
[docs]defiter_sections(self,manual:Manual)->Iterator[Section]:"""Delegate to :func:`aeat.domain.manuals.iter_sections` for section iteration. Yields each :class:`Section` from ``manual`` in document order. """from....domain.manualsimportiter_sectionsreturniter_sections(manual,settings=self._settings())