Arthur 1 год назад
Родитель
Сommit
8aca8f84b4
2 измененных файлов с 93 добавлено и 0 удалено
  1. 45 0
      netbox/netbox/graphql/filter_mixins.py
  2. 48 0
      netbox/tenancy/graphql/filter_mixins.py

+ 45 - 0
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')

+ 48 - 0
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')