aboutsummaryrefslogtreecommitdiff
path: root/src/hydrilla/item_infos.py
diff options
context:
space:
mode:
authorWojtek Kosior <koszko@koszko.org>2022-08-29 17:05:00 +0200
committerWojtek Kosior <koszko@koszko.org>2022-09-28 12:54:54 +0200
commit2363ab8054ab5d8e7981242dc311a394e8d5ff57 (patch)
treed02a2fca005a241f42331d8bb08aeb0933c898a7 /src/hydrilla/item_infos.py
parent7fc6312d6df526b8eb49288aecf88d04668e7c45 (diff)
downloadhaketilo-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.py74
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)