|
|
@@ -11,8 +11,11 @@ from utilities.filters import *
|
|
|
|
|
|
def autotype_decorator(filterset):
|
|
|
|
|
|
- def wrapper(cls):
|
|
|
+ def show_field(fieldname, v, cls):
|
|
|
print(f"cls: {cls}")
|
|
|
+ print(f"{fieldname}: {v}")
|
|
|
+
|
|
|
+ def wrapper(cls):
|
|
|
cls.filterset = filterset
|
|
|
fields = filterset.get_fields()
|
|
|
model = filterset._meta.model
|
|
|
@@ -35,11 +38,9 @@ def autotype_decorator(filterset):
|
|
|
create_function = True
|
|
|
attr_type = str | None
|
|
|
elif isinstance(v, MACAddressFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("MACAddressFilter")
|
|
|
+ show_field("MACAddressFilter", v, cls)
|
|
|
elif isinstance(v, MultiValueArrayFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("MultiValueArrayFilter")
|
|
|
+ show_field("MultiValueArrayFilter", v, cls)
|
|
|
elif isinstance(v, MultiValueCharFilter):
|
|
|
create_function = True
|
|
|
attr_type = List[str] | None
|
|
|
@@ -48,8 +49,7 @@ def autotype_decorator(filterset):
|
|
|
elif isinstance(v, MultiValueDateTimeFilter):
|
|
|
attr_type = auto
|
|
|
elif isinstance(v, MultiValueDecimalFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("MultiValueDecimalFilter")
|
|
|
+ show_field("MultiValueDecimalFilter", v, cls)
|
|
|
elif isinstance(v, MultiValueMACAddressFilter):
|
|
|
create_function = True
|
|
|
attr_type = List[str] | None
|
|
|
@@ -57,17 +57,14 @@ def autotype_decorator(filterset):
|
|
|
create_function = True
|
|
|
attr_type = List[str] | None
|
|
|
elif isinstance(v, MultiValueTimeFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("MultiValueTimeFilter")
|
|
|
+ show_field("MultiValueTimeFilter", v, cls)
|
|
|
elif isinstance(v, MultiValueWWNFilter):
|
|
|
create_function = True
|
|
|
attr_type = List[str] | None
|
|
|
elif isinstance(v, NullableCharFieldFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("NullableCharFieldFilter")
|
|
|
+ show_field("NullableCharFieldFilter", v, cls)
|
|
|
elif isinstance(v, NumericArrayFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("NumericArrayFilter")
|
|
|
+ show_field("NumericArrayFilter", v, cls)
|
|
|
elif isinstance(v, TreeNodeMultipleChoiceFilter):
|
|
|
create_function = True
|
|
|
attr_type = List[str] | None
|
|
|
@@ -75,26 +72,19 @@ def autotype_decorator(filterset):
|
|
|
# From django_filters - ordering of these matters as base classes must
|
|
|
# come after derived classes so the base class doesn't get matched first
|
|
|
elif issubclass(type(v), django_filters.OrderingFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("OrderingFilter")
|
|
|
+ show_field("OrderingFilter", v, cls)
|
|
|
elif issubclass(type(v), django_filters.BaseRangeFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("BaseRangeFilter")
|
|
|
+ show_field("BaseRangeFilter", v, cls)
|
|
|
elif issubclass(type(v), django_filters.BaseInFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("BaseInFilter")
|
|
|
+ show_field("BaseInFilter", v, cls)
|
|
|
elif issubclass(type(v), django_filters.LookupChoiceFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("LookupChoiceFilter")
|
|
|
+ show_field("LookupChoiceFilter", v, cls)
|
|
|
elif issubclass(type(v), django_filters.AllValuesMultipleFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("AllValuesMultipleFilter")
|
|
|
+ show_field("AllValuesMultipleFilter", v, cls)
|
|
|
elif issubclass(type(v), django_filters.AllValuesFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("AllValuesFilter")
|
|
|
+ show_field("AllValuesFilter", v, cls)
|
|
|
elif issubclass(type(v), django_filters.TimeRangeFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("TimeRangeFilter")
|
|
|
+ show_field("TimeRangeFilter", v, cls)
|
|
|
elif issubclass(type(v), django_filters.IsoDateTimeFromToRangeFilter):
|
|
|
create_function = True
|
|
|
attr_type = str | None
|
|
|
@@ -108,14 +98,11 @@ def autotype_decorator(filterset):
|
|
|
create_function = True
|
|
|
attr_type = str | None
|
|
|
elif issubclass(type(v), django_filters.RangeFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("RangeFilter")
|
|
|
+ show_field("RangeFilter", v, cls)
|
|
|
elif issubclass(type(v), django_filters.NumericRangeFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("NumericRangeFilter")
|
|
|
+ show_field("NumericRangeFilter", v, cls)
|
|
|
elif issubclass(type(v), django_filters.NumberFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("NumberFilter")
|
|
|
+ show_field("NumberFilter", v, cls)
|
|
|
elif issubclass(type(v), django_filters.ModelMultipleChoiceFilter):
|
|
|
create_function = True
|
|
|
attr_type = List[str] | None
|
|
|
@@ -123,11 +110,9 @@ def autotype_decorator(filterset):
|
|
|
create_function = True
|
|
|
attr_type = str | None
|
|
|
elif issubclass(type(v), django_filters.DurationFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("DurationFilter")
|
|
|
+ show_field("DurationFilter", v, cls)
|
|
|
elif issubclass(type(v), django_filters.IsoDateTimeFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("IsoDateTimeFilter")
|
|
|
+ show_field("IsoDateTimeFilter", v, cls)
|
|
|
elif issubclass(type(v), django_filters.DateTimeFilter):
|
|
|
attr_type = auto
|
|
|
elif issubclass(type(v), django_filters.TimeFilter):
|
|
|
@@ -135,17 +120,14 @@ def autotype_decorator(filterset):
|
|
|
elif issubclass(type(v), django_filters.DateFilter):
|
|
|
attr_type = auto
|
|
|
elif issubclass(type(v), django_filters.TypedMultipleChoiceFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("TypedMultipleChoiceFilter")
|
|
|
+ show_field("TypedMultipleChoiceFilter", v, cls)
|
|
|
elif issubclass(type(v), django_filters.MultipleChoiceFilter):
|
|
|
create_function = True
|
|
|
attr_type = List[str] | None
|
|
|
elif issubclass(type(v), django_filters.TypedChoiceFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("TypedChoiceFilter")
|
|
|
+ show_field("TypedChoiceFilter", v, cls)
|
|
|
elif issubclass(type(v), django_filters.ChoiceFilter):
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("ChoiceFilter")
|
|
|
+ show_field("ChoiceFilter", v, cls)
|
|
|
elif issubclass(type(v), django_filters.BooleanFilter):
|
|
|
create_function = True
|
|
|
attr_type = bool | None
|
|
|
@@ -157,8 +139,7 @@ def autotype_decorator(filterset):
|
|
|
create_function = True
|
|
|
attr_type = str | None
|
|
|
else:
|
|
|
- print(f"{fieldname}: {v}")
|
|
|
- print("unknown type!")
|
|
|
+ show_field("unknown type!", v, cls)
|
|
|
|
|
|
if fieldname not in cls.__annotations__ and attr_type:
|
|
|
cls.__annotations__[fieldname] = attr_type
|
|
|
@@ -178,36 +159,3 @@ class BaseFilterMixin:
|
|
|
|
|
|
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')
|