diff options
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) |