From 8aca8f84b41a3774783860d5c204edd84b38c5e7 Mon Sep 17 00:00:00 2001 From: Arthur Date: Tue, 12 Mar 2024 10:01:34 -0700 Subject: [PATCH] 9856 first filterset --- netbox/netbox/graphql/filter_mixins.py | 45 +++++++++++++++++++++++ netbox/tenancy/graphql/filter_mixins.py | 48 +++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 netbox/netbox/graphql/filter_mixins.py create mode 100644 netbox/tenancy/graphql/filter_mixins.py diff --git a/netbox/netbox/graphql/filter_mixins.py b/netbox/netbox/graphql/filter_mixins.py new file mode 100644 index 000000000..af2f3e049 --- /dev/null +++ b/netbox/netbox/graphql/filter_mixins.py @@ -0,0 +1,45 @@ +from typing import List +import strawberry +import strawberry_django +from strawberry import auto + + +@strawberry.input +class BaseFilterMixin: + id: auto + + def filter_by_filterset(self, queryset, key): + return self.filterset(data={key: getattr(self, key)}, queryset=queryset).qs + + +@strawberry.input +class ChangeLoggedModelFilterMixin(BaseFilterMixin): + created: auto + last_updated: auto + created_by_request: str | None + updated_by_request: str | None + modified_by_request: str | None + + def filter_created_by_request(self, queryset): + return self.filter_by_filterset(queryset, 'created_by_request') + + def filter_updated_by_request(self, queryset): + return self.filter_by_filterset(queryset, 'updated_by_request') + + def filter_modified_by_request(self, queryset): + return self.filter_by_filterset(queryset, 'modified_by_request') + + +@strawberry.input +class NetBoxModelFilterMixin(ChangeLoggedModelFilterMixin): + q: str | None + tag: List[str] | None + + def filter_q(self, queryset): + # return self.search(queryset, None, self.q) + return self.filter_by_filterset(queryset, 'q') + + def filter_tag(self, queryset, info): + # return self.filterset(data={'tag': self.tag}, queryset=queryset).qs + # return self.filterset(data={'tag': getattr(self, 'tag')}, queryset=queryset).qs + return self.filter_by_filterset(queryset, 'tag') diff --git a/netbox/tenancy/graphql/filter_mixins.py b/netbox/tenancy/graphql/filter_mixins.py new file mode 100644 index 000000000..c33dc24aa --- /dev/null +++ b/netbox/tenancy/graphql/filter_mixins.py @@ -0,0 +1,48 @@ +from typing import List +import strawberry +import strawberry_django +from strawberry import auto +from netbox.graphql.filter_mixins import BaseFilterMixin + +__all__ = ( + 'ContactModelFilterMixin', + 'TenancyFilterMixin', +) + + +@strawberry.input +class TenancyFilterMixin(BaseFilterMixin): + created: auto + last_updated: auto + created_by_request: str | None + updated_by_request: str | None + modified_by_request: str | None + + def filter_created_by_request(self, queryset): + return self.filter_by_filterset(queryset, 'created_by_request') + + def filter_updated_by_request(self, queryset): + return self.filter_by_filterset(queryset, 'updated_by_request') + + def filter_modified_by_request(self, queryset): + return self.filter_by_filterset(queryset, 'modified_by_request') + + +@strawberry.input +class ContactModelFilterMixin(BaseFilterMixin): + tenant_group_id: List[str] | None + tenant_group: List[str] | None + tenant_id: List[str] | None + tenant: List[str] | None + + def filter_tenant_group_id(self, queryset): + return self.filter_by_filterset(queryset, 'tenant_group_id') + + def filter_tenant_group(self, queryset): + return self.filter_by_filterset(queryset, 'tenant_group') + + def filter_tenant_id(self, queryset): + return self.filter_by_filterset(queryset, 'tenant_id') + + def filter_tenant(self, queryset): + return self.filter_by_filterset(queryset, 'tenant')