diff --git a/conservancy_beancount/reports/query.py b/conservancy_beancount/reports/query.py index 75881069cd22aaf1fdd3105b9a39a32f03166cc5..086ac09b019ba7a00c3e3cdee0a3511222403d87 100644 --- a/conservancy_beancount/reports/query.py +++ b/conservancy_beancount/reports/query.py @@ -157,16 +157,14 @@ class PostingContext: class MetaDocs(bc_query_env.AnyMeta): """Return a list of document links from metadata.""" def __init__(self, operands: List[bc_query_compile.EvalNode]) -> None: - super(bc_query_env.AnyMeta, self).__init__(operands, list) + super(bc_query_env.AnyMeta, self).__init__(operands, set) # The second argument is our return type. # It should match the annotated return type of __call__. - def __call__(self, context: PostingContext) -> List[str]: + def __call__(self, context: PostingContext) -> Set[str]: raw_value = super().__call__(context) - if isinstance(raw_value, str): - return raw_value.split() - else: - return [] + seq = raw_value.split() if isinstance(raw_value, str) else '' + return set(seq) class RTField(NamedTuple): @@ -247,7 +245,7 @@ class RTTicket(bc_query_compile.EvalFunction): self._meta_key(meta_op.value) if not rest: operands.append(bc_query_compile.EvalConstant(sys.maxsize)) - super().__init__(operands, list) + super().__init__(operands, set) def _rt_key(self, key: str) -> RTField: try: @@ -261,7 +259,7 @@ class RTTicket(bc_query_compile.EvalFunction): else: raise ValueError(f"metadata key {key!r} does not contain documentation links") - def __call__(self, context: PostingContext) -> list: + def __call__(self, context: PostingContext) -> Set[object]: rt_key: str meta_key: str limit: int @@ -283,7 +281,7 @@ class RTTicket(bc_query_compile.EvalFunction): ticket_ids.add(rt_id[0]) if len(ticket_ids) >= limit: break - retval: List[object] = [] + retval: Set[object] = set() for ticket_id in ticket_ids: try: rt_ticket = self._rt_cache[ticket_id] @@ -294,9 +292,9 @@ class RTTicket(bc_query_compile.EvalFunction): if field_value is None: pass elif isinstance(field_value, list): - retval.extend(field_value) + retval.update(field_value) else: - retval.append(field_value) + retval.add(field_value) return retval