Rework Tagable implementation

Split into orm compatible & non-compatible methods

FIX Tagable on MediaElement

FIX Tagable MediaColl
master
Felix Stupp 2 years ago
parent c7b63dfedb
commit 9ea4a728d6
Signed by: zocker
GPG Key ID: 93E1BD26F6B02FB7

@ -187,34 +187,49 @@ class Tagable:
## abstracted ## abstracted
@property @abstractproperty
def assigned_tags(self) -> Set[Tag]: def orm_assigned_tags(self) -> Query[Tag]:
""" """
Tags which are directly assigned to this object by the user or automatic actions. Tags which are directly assigned to this object by the user or automatic actions.
""" """
raise NotImplementedError("")
@property @property
def inherited_tags(self) -> Set[Tag]: def orm_inherited_tags(self) -> Query[Tag]:
""" """
Tags, which are inherited by any other means than super/sub-tag relationships. Tags, which are inherited by any other means than super/sub-tag relationships.
This relationship does not declare a distance between this tags and assigned tags. This relationship does not declare a distance between this tags and assigned tags.
""" """
return set() return [] # TODO to orm compatible
@property @property
def super_tags(self) -> Set[Tag]: def orm_super_tags(self) -> Query[Tag]:
""" """
Tags, which are inherited only by super/sub-tag relationships. Tags, which are inherited only by super/sub-tag relationships.
This relationship does declare a distance between this tags and assigned tags. This relationship does declare a distance between this tags and assigned tags.
""" """
return set() return [] # TODO to orm compatible
## implemented ## implemented
@property
def assigned_tags(self) -> Set[Tag]:
return set(self.orm_assigned_tags)
@property
def inherited_tags(self) -> Set[Tag]:
return set(self.orm_inherited_tags)
@property
def super_tags(self) -> Set[Tag]:
return set(self.orm_super_tags)
@property
def orm_direct_tags(self) -> Query[Tag]:
return self.orm_assigned_tags + self.orm_inherited_tags
@property @property
def direct_tags(self) -> Set[Tag]: def direct_tags(self) -> Set[Tag]:
return self.assigned_tags | self.inherited_tags return set(self.orm_direct_tags)
@property @property
def tag_hierachy(self) -> TagRootElement: def tag_hierachy(self) -> TagRootElement:
@ -478,12 +493,12 @@ class Tag(db.Entity, Tagable):
_media_list: Iterable[MediaElement] = orm.Set(lambda: MediaElement) _media_list: Iterable[MediaElement] = orm.Set(lambda: MediaElement)
@property @property
def assigned_tags(self) -> Set[Tag]: def orm_assigned_tags(self) -> Query[Tag]:
return {self} return [self]
@property @property
def super_tags(self) -> Set[Tag]: def orm_super_tags(self) -> Query[Tag]:
return set(self.super_tag_list) return self.super_tag_list
## Element <-> Collection Linking ## Element <-> Collection Linking
@ -592,6 +607,17 @@ class MediaElement(db.Entity, UriHolder, Tagable):
reverse="blocked_by", reverse="blocked_by",
) )
@property
def orm_assigned_tags(self) -> Query[Tag]:
return self.tag_list
@property
def orm_inherited_tags(self) -> Query[Tag]:
# TODO: return orm.select(tag for link in self.collection_links for tag in link.collection.orm_direct_tags)
return [
tag for link in self.collection_links for tag in link.collection.direct_tags
]
@property @property
def was_extracted(self) -> bool: def was_extracted(self) -> bool:
return self.last_updated is not None return self.last_updated is not None
@ -681,17 +707,6 @@ class MediaElement(db.Entity, UriHolder, Tagable):
link for link in self.collection_links if link.collection.watch_in_order link for link in self.collection_links if link.collection.watch_in_order
) )
@property
def assigned_tags(self) -> Set[Tag]:
return set(self.tag_list)
@property
def inherited_tags(self) -> Set[Tag]:
result = set()
for link in self.collection_links:
result |= link.collection.direct_tags
return result
### for UriHolder ### for UriHolder
@property @property
@ -932,10 +947,6 @@ class MediaCollection(db.Entity, UriHolder, Tagable):
def completed(self) -> bool: def completed(self) -> bool:
return self.__to_watch_episodes().count() <= 0 return self.__to_watch_episodes().count() <= 0
@property
def assigned_tags(self) -> Set[Tag]:
return set(self.tag_list)
### for UriHolder ### for UriHolder
@property @property
@ -955,6 +966,10 @@ class MediaCollection(db.Entity, UriHolder, Tagable):
### others ### others
@property
def orm_assigned_tags(self) -> Query[Tag]:
return self.tag_list
@property @property
def stats(self) -> CollectionStats: def stats(self) -> CollectionStats:
return CollectionStats.from_collection(self) return CollectionStats.from_collection(self)

Loading…
Cancel
Save