diff --git a/server/entertainment_decider/models.py b/server/entertainment_decider/models.py index 3dd48bd..56d1377 100644 --- a/server/entertainment_decider/models.py +++ b/server/entertainment_decider/models.py @@ -217,7 +217,7 @@ class Tagable: return self.assigned_tags | self.inherited_tags @property - def __tag_hierachy(self) -> Tuple[TagRootElement, Set[Tag]]: + def tag_hierachy(self) -> TagRootElement: root = TagRootElement( base=self, children=[TagTreeElement(tag) for tag in self.direct_tags], @@ -232,15 +232,18 @@ class Tagable: cur.children.append(elem) stack.append(elem) used.add(tag) - return root, used - - @property - def tag_hierachy(self) -> TagRootElement: - return self.__tag_hierachy[0] + return root @property def all_tags(self) -> Set[Tag]: - return self.__tag_hierachy[1] + queue: List[Tag] = list(self.direct_tags) + used: Set[Tag] = set(queue) + while queue: + tag = queue.pop(0) + new_tags = tag.super_tags - used + queue.extend(new_tags) + used |= new_tags + return used T_tagged = TypeVar("T_tagged", bound=Tagable)