diff options
author | Wojtek Kosior <koszko@koszko.org> | 2022-08-29 17:05:00 +0200 |
---|---|---|
committer | Wojtek Kosior <koszko@koszko.org> | 2022-09-28 12:54:54 +0200 |
commit | 2363ab8054ab5d8e7981242dc311a394e8d5ff57 (patch) | |
tree | d02a2fca005a241f42331d8bb08aeb0933c898a7 /src/hydrilla/item_infos.py | |
parent | 7fc6312d6df526b8eb49288aecf88d04668e7c45 (diff) | |
download | haketilo-hydrilla-2363ab8054ab5d8e7981242dc311a394e8d5ff57.tar.gz haketilo-hydrilla-2363ab8054ab5d8e7981242dc311a394e8d5ff57.zip |
[proxy] refactor we UI library and package pages templates to avoid code repetition
Diffstat (limited to 'src/hydrilla/item_infos.py')
-rw-r--r-- | src/hydrilla/item_infos.py | 74 |
1 files changed, 43 insertions, 31 deletions
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 @@ -163,9 +163,13 @@ class ItemInfoBase(ABC, ItemIdentity, Categorizable): 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) |