From bfab461e43272271932fb468610ce7ca383eca03 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 5 Dec 2025 15:47:20 -0500 Subject: [PATCH] Move changelogging filters to ChangeLoggingMixin --- netbox/core/graphql/filter_mixins.py | 24 ++++++++++++++++++++++++ netbox/netbox/graphql/filters.py | 21 ++++++++------------- 2 files changed, 32 insertions(+), 13 deletions(-) create mode 100644 netbox/core/graphql/filter_mixins.py diff --git a/netbox/core/graphql/filter_mixins.py b/netbox/core/graphql/filter_mixins.py new file mode 100644 index 000000000..7383f6c4e --- /dev/null +++ b/netbox/core/graphql/filter_mixins.py @@ -0,0 +1,24 @@ +from dataclasses import dataclass +from datetime import datetime +from typing import Annotated, TYPE_CHECKING + +import strawberry +import strawberry_django +from strawberry_django import DatetimeFilterLookup + +if TYPE_CHECKING: + from .filters import * + +__all__ = ( + 'ChangeLoggingMixin', +) + + +@dataclass +class ChangeLoggingMixin: + # TODO: "changelog" is not a valid field name; needs to be updated for ObjectChange + changelog: Annotated['ObjectChangeFilter', strawberry.lazy('core.graphql.filters')] | None = ( + strawberry_django.filter_field() + ) + created: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field() + last_updated: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field() diff --git a/netbox/netbox/graphql/filters.py b/netbox/netbox/graphql/filters.py index dc8b40d2b..ff0aa85e9 100644 --- a/netbox/netbox/graphql/filters.py +++ b/netbox/netbox/graphql/filters.py @@ -1,12 +1,11 @@ from dataclasses import dataclass -from datetime import datetime -from typing import Annotated, TYPE_CHECKING +from typing import TYPE_CHECKING -import strawberry import strawberry_django from strawberry import ID -from strawberry_django import FilterLookup, DatetimeFilterLookup +from strawberry_django import FilterLookup +from core.graphql.filter_mixins import ChangeLoggingMixin from extras.graphql.filter_mixins import CustomFieldsFilterMixin, JournalEntriesFilterMixin, TagsFilterMixin if TYPE_CHECKING: @@ -22,25 +21,21 @@ __all__ = ( ) +@dataclass class BaseModelFilter: id: FilterLookup[ID] | None = strawberry_django.filter_field() -@dataclass -class ChangeLoggedModelFilter(BaseModelFilter): - # TODO: "changelog" is not a valid field name; needs to be updated for ObjectChange - changelog: Annotated['ObjectChangeFilter', strawberry.lazy('core.graphql.filters')] | None = ( - strawberry_django.filter_field() - ) - created: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field() - last_updated: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field() +class ChangeLoggedModelFilter(ChangeLoggingMixin, BaseModelFilter): + pass class NetBoxModelFilter( CustomFieldsFilterMixin, JournalEntriesFilterMixin, TagsFilterMixin, - ChangeLoggedModelFilter, + ChangeLoggingMixin, + BaseModelFilter ): pass