def _get_tags_from_db( self, company_id: str, field: str, project: str = None, filter_: Dict[str, Sequence[str]] = None, ) -> set: query = Q(company=company_id) if filter_: for name, vals in filter_.items(): if vals: query &= GetMixin.get_list_field_query(name, vals) if project: query &= Q(project=project) return self.db_cls.objects(query).distinct(field)
def get_project_tags( cls, company_id: str, include_system: bool, projects: Sequence[str] = None, filter_: Dict[str, Sequence[str]] = None, ) -> Tuple[Sequence[str], Sequence[str]]: with TimingContext("mongo", "get_tags_from_db"): query = Q(company=company_id) if filter_: for name, vals in filter_.items(): if vals: query &= GetMixin.get_list_field_query(name, vals) if projects: query &= Q(id__in=_ids_with_children(projects)) tags = Project.objects(query).distinct("tags") system_tags = (Project.objects(query).distinct("system_tags") if include_system else []) return tags, system_tags