From 2363ab8054ab5d8e7981242dc311a394e8d5ff57 Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Mon, 29 Aug 2022 17:05:00 +0200 Subject: [proxy] refactor we UI library and package pages templates to avoid code repetition --- src/hydrilla/item_infos.py | 74 +++++++++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 31 deletions(-) (limited to 'src/hydrilla/item_infos.py') diff --git a/src/hydrilla/item_infos.py b/src/hydrilla/item_infos.py index ddd1d80..eb9a053 100644 --- a/src/hydrilla/item_infos.py +++ b/src/hydrilla/item_infos.py @@ -162,10 +162,14 @@ class ItemInfoBase(ABC, ItemIdentity, Categorizable): required_mappings: tuple[ItemSpecifier, ...] = dc.field(hash=False, compare=False) generated_by: t.Optional[GeneratedBy] = dc.field(hash=False, compare=False) + @property + def version_string(self) -> str: + return versions.version_string(self.version) + @property def versioned_identifier(self) -> str: """....""" - return f'{self.identifier}-{versions.version_string(self.version)}' + return f'{self.identifier}-{self.version_string}' @property def files(self) -> tuple[FileSpecifier, ...]: @@ -213,8 +217,42 @@ class ItemInfoBase(ABC, ItemIdentity, Categorizable): ) +class ItemType(enum.Enum): + RESOURCE = 'resource' + MAPPING = 'mapping' + + @property + def info_class(self) -> t.Type[AnyInfo]: + if self == ItemType.RESOURCE: + return ResourceInfo + else: + return MappingInfo + + @property + def alt_name(self) -> str: + if self == ItemType.RESOURCE: + return 'library' + else: + return 'package' + + @property + def alt_name_plural(self) -> str: + if self == ItemType.RESOURCE: + return 'libraries' + else: + return 'packages' + @dc.dataclass(frozen=True, unsafe_hash=True) -class ResourceInfo(ItemInfoBase): +class CorrespondsToResourceDCMixin: + type: t.ClassVar[ItemType] = ItemType.RESOURCE + +@dc.dataclass(frozen=True, unsafe_hash=True) +class CorrespondsToMappingDCMixin: + type: t.ClassVar[ItemType] = ItemType.MAPPING + + +@dc.dataclass(frozen=True, unsafe_hash=True) +class ResourceInfo(ItemInfoBase, CorrespondsToResourceDCMixin): """....""" type_name: t.ClassVar[str] = 'resource' @@ -223,9 +261,8 @@ class ResourceInfo(ItemInfoBase): scripts: tuple[FileSpecifier, ...] = dc.field(hash=False, compare=False) @property - def versioned_identifier(self) -> str: - """....""" - return f'{super().versioned_identifier}-{self.revision}' + def version_string(self) -> str: + return f'{super().version_string}-{self.revision}' @property def files(self) -> tuple[FileSpecifier, ...]: @@ -304,7 +341,7 @@ def make_payloads(payloads_obj: t.Mapping[str, t.Any]) \ return Map(mapping) @dc.dataclass(frozen=True, unsafe_hash=True) -class MappingInfo(ItemInfoBase): +class MappingInfo(ItemInfoBase, CorrespondsToMappingDCMixin): """....""" type_name: t.ClassVar[str] = 'mapping' @@ -363,31 +400,6 @@ class MappingInfo(ItemInfoBase): AnyInfo = t.Union[ResourceInfo, MappingInfo] -class ItemType(enum.Enum): - RESOURCE = 'resource' - MAPPING = 'mapping' - - @property - def info_class(self) -> t.Type[AnyInfo]: - if self == ItemType.RESOURCE: - return ResourceInfo - else: - return MappingInfo - - @property - def alt_name(self) -> str: - if self == ItemType.RESOURCE: - return 'library' - else: - return 'package' - - @property - def alt_name_plural(self) -> str: - if self == ItemType.RESOURCE: - return 'libraries' - else: - return 'packages' - LoadedType = t.TypeVar('LoadedType', ResourceInfo, MappingInfo) -- cgit v1.2.3