diff options
Diffstat (limited to 'src/hydrilla/item_infos.py')
-rw-r--r-- | src/hydrilla/item_infos.py | 58 |
1 files changed, 28 insertions, 30 deletions
diff --git a/src/hydrilla/item_infos.py b/src/hydrilla/item_infos.py index 9638dab..d4cafe5 100644 --- a/src/hydrilla/item_infos.py +++ b/src/hydrilla/item_infos.py @@ -59,16 +59,14 @@ class ItemSpecifier: """....""" identifier: str +ItemSpecs = t.Tuple[ItemSpecifier, ...] + SpecifierObjs = t.Sequence[t.Mapping[str, t.Any]] -def make_item_specifiers_seq(spec_objs: SpecifierObjs) \ - -> tuple[ItemSpecifier, ...]: - """....""" +def make_item_specifiers_seq(spec_objs: SpecifierObjs) -> ItemSpecs: return tuple(ItemSpecifier(obj['identifier']) for obj in spec_objs) -def make_required_mappings(spec_objs: t.Any, schema_compat: int) \ - -> tuple[ItemSpecifier, ...]: - """....""" +def make_required_mappings(spec_objs: t.Any, schema_compat: int) -> ItemSpecs: if schema_compat < 2: return () @@ -80,6 +78,8 @@ class FileSpecifier: name: str sha256: str +FileSpecs = t.Tuple[FileSpecifier, ...] + def normalize_filename(name: str): """ This function eliminated double slashes in file name and ensures it does not @@ -93,9 +93,7 @@ def normalize_filename(name: str): return str(path) -def make_file_specifiers_seq(spec_objs: SpecifierObjs) \ - -> tuple[FileSpecifier, ...]: - """....""" +def make_file_specifiers_seq(spec_objs: SpecifierObjs) -> FileSpecs: return tuple( FileSpecifier(normalize_filename(obj['file']), obj['sha256']) for obj @@ -164,17 +162,17 @@ class ItemIdentity: @dc.dataclass(frozen=True) # type: ignore[misc] class ItemInfoBase(ABC, ItemIdentity, Categorizable): """....""" - source_name: str = dc.field(hash=False, compare=False) - source_copyright: tuple[FileSpecifier, ...] = dc.field(hash=False, compare=False) - uuid: t.Optional[str] = dc.field(hash=False, compare=False) - long_name: str = dc.field(hash=False, compare=False) - description: str = dc.field(hash=False, compare=False) - allows_eval: bool = dc.field(hash=False, compare=False) - allows_cors_bypass: bool = dc.field(hash=False, compare=False) - min_haketilo_ver: versions.VerTuple = dc.field(hash=False, compare=False) - max_haketilo_ver: versions.VerTuple = dc.field(hash=False, compare=False) - required_mappings: tuple[ItemSpecifier, ...] = dc.field(hash=False, compare=False) - generated_by: t.Optional[GeneratedBy] = dc.field(hash=False, compare=False) + source_name: str = dc.field(hash=False, compare=False) + source_copyright: FileSpecs = dc.field(hash=False, compare=False) + uuid: t.Optional[str] = dc.field(hash=False, compare=False) + long_name: str = dc.field(hash=False, compare=False) + description: str = dc.field(hash=False, compare=False) + allows_eval: bool = dc.field(hash=False, compare=False) + allows_cors_bypass: bool = dc.field(hash=False, compare=False) + min_haketilo_ver: versions.VerTuple = dc.field(hash=False, compare=False) + max_haketilo_ver: versions.VerTuple = dc.field(hash=False, compare=False) + required_mappings: ItemSpecs = dc.field(hash=False, compare=False) + generated_by: t.Optional[GeneratedBy] = dc.field(hash=False, compare=False) @property def version_string(self) -> str: @@ -186,7 +184,7 @@ class ItemInfoBase(ABC, ItemIdentity, Categorizable): return f'{self.identifier}-{self.version_string}' @property - def files(self) -> tuple[FileSpecifier, ...]: + def files(self) -> FileSpecs: return self.source_copyright @property @@ -287,16 +285,16 @@ class CorrespondsToMappingDCMixin: @dc.dataclass(frozen=True, unsafe_hash=True) class ResourceInfo(ItemInfoBase, CorrespondsToResourceDCMixin): """....""" - revision: int = dc.field(hash=False, compare=False) - dependencies: tuple[ItemSpecifier, ...] = dc.field(hash=False, compare=False) - scripts: tuple[FileSpecifier, ...] = dc.field(hash=False, compare=False) + revision: int = dc.field(hash=False, compare=False) + dependencies: ItemSpecs = dc.field(hash=False, compare=False) + scripts: FileSpecs = dc.field(hash=False, compare=False) @property def version_string(self) -> str: return f'{super().version_string}-{self.revision}' @property - def files(self) -> tuple[FileSpecifier, ...]: + def files(self) -> FileSpecs: return tuple((*self.source_copyright, *self.scripts)) @staticmethod @@ -363,7 +361,7 @@ class ResourceInfo(ItemInfoBase, CorrespondsToResourceDCMixin): def make_payloads(payloads_obj: t.Mapping[str, t.Any]) \ -> t.Mapping[ParsedPattern, ItemSpecifier]: """....""" - mapping: list[tuple[ParsedPattern, ItemSpecifier]] = [] + mapping: t.List[t.Tuple[ParsedPattern, ItemSpecifier]] = [] for pattern, spec_obj in payloads_obj.items(): ref = ItemSpecifier(spec_obj['identifier']) @@ -447,7 +445,7 @@ def _load_item_info( # We know from successful validation that instance is a dict. return info_type.make( - t.cast('dict[str, t.Any]', instance), + t.cast('t.Dict[str, t.Any]', instance), schema_compat, repo, repo_iteration @@ -611,7 +609,7 @@ class MultirepoItemInfo( CategorizedItemInfo[ CategorizedInfoType, VersionedItemInfo[CategorizedInfoType], - tuple[str, int] + t.Tuple[str, int] ], t.Generic[CategorizedInfoType] ): @@ -649,7 +647,7 @@ class MultirepoItemInfo( return self.get_all(reverse_repos=True)[-1] - def options(self, reverse: bool = False) -> t.Sequence[tuple[str, int]]: + def options(self, reverse: bool = False) -> t.Sequence[t.Tuple[str, int]]: return sorted( self.items.keys(), key = (lambda tuple: (tuple[0], 1 - tuple[1])), @@ -665,7 +663,7 @@ class MultirepoItemInfo( Generate item info for all its versions and options, from oldest to newest version and from. """ - all_versions: set[versions.VerTuple] = set() + all_versions: t.Set[versions.VerTuple] = set() for versioned in self.items.values(): all_versions.update(versioned.versions()) |