Clone all GraphQL objects to V1 versions

This commit is contained in:
Brian Tiemann
2025-10-23 20:19:16 -04:00
parent cee2a5e0ed
commit 867a01fae5
47 changed files with 6423 additions and 10 deletions

View File

@@ -0,0 +1,36 @@
from dataclasses import dataclass
from datetime import datetime
from typing import Annotated, TYPE_CHECKING
import strawberry
import strawberry_django
from strawberry import ID
from strawberry_django import DatetimeFilterLookup
if TYPE_CHECKING:
from .filters_v1 import *
__all__ = (
'BaseFilterMixinV1',
'BaseObjectTypeFilterMixinV1',
'ChangeLogFilterMixinV1',
)
# @strawberry.input
class BaseFilterMixinV1: ...
@dataclass
class BaseObjectTypeFilterMixinV1(BaseFilterMixinV1):
id: ID | None = strawberry.UNSET
@dataclass
class ChangeLogFilterMixinV1(BaseFilterMixinV1):
id: ID | None = strawberry.UNSET
changelog: Annotated['ObjectChangeFilterV1', strawberry.lazy('core.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
created: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
last_updated: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()

View File

@@ -0,0 +1,89 @@
from datetime import datetime
from typing import Annotated, TYPE_CHECKING
import strawberry
import strawberry_django
from django.contrib.contenttypes.models import ContentType as DjangoContentType
from strawberry.scalars import ID
from strawberry_django import DatetimeFilterLookup, FilterLookup
from core import models
from core.graphql.filter_mixins_v1 import BaseFilterMixinV1
from netbox.graphql.filter_mixins import PrimaryModelFilterMixin
if TYPE_CHECKING:
from netbox.graphql.filter_lookups import IntegerLookup, JSONFilter
from users.graphql.filters import UserFilter
__all__ = (
'DataFileFilterV1',
'DataSourceFilterV1',
'ObjectChangeFilterV1',
'ContentTypeFilterV1',
)
@strawberry_django.filter_type(models.DataFile, lookups=True)
class DataFileFilterV1(BaseFilterMixinV1):
id: ID | None = strawberry_django.filter_field()
created: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
last_updated: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
source: Annotated['DataSourceFilterV1', strawberry.lazy('core.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
source_id: ID | None = strawberry_django.filter_field()
path: FilterLookup[str] | None = strawberry_django.filter_field()
size: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field()
)
hash: FilterLookup[str] | None = strawberry_django.filter_field()
@strawberry_django.filter_type(models.DataSource, lookups=True)
class DataSourceFilterV1(PrimaryModelFilterMixin):
name: FilterLookup[str] | None = strawberry_django.filter_field()
type: FilterLookup[str] | None = strawberry_django.filter_field()
source_url: FilterLookup[str] | None = strawberry_django.filter_field()
status: FilterLookup[str] | None = strawberry_django.filter_field()
enabled: FilterLookup[bool] | None = strawberry_django.filter_field()
ignore_rules: FilterLookup[str] | None = strawberry_django.filter_field()
parameters: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field()
)
last_synced: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
datafiles: Annotated['DataFileFilterV1', strawberry.lazy('core.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
@strawberry_django.filter_type(models.ObjectChange, lookups=True)
class ObjectChangeFilterV1(BaseFilterMixinV1):
id: ID | None = strawberry_django.filter_field()
time: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field()
user: Annotated['UserFilter', strawberry.lazy('users.graphql.filters')] | None = strawberry_django.filter_field()
user_name: FilterLookup[str] | None = strawberry_django.filter_field()
request_id: FilterLookup[str] | None = strawberry_django.filter_field()
action: FilterLookup[str] | None = strawberry_django.filter_field()
changed_object_type: Annotated['ContentTypeFilterV1', strawberry.lazy('core.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
changed_object_type_id: ID | None = strawberry_django.filter_field()
changed_object_id: ID | None = strawberry_django.filter_field()
related_object_type: Annotated['ContentTypeFilterV1', strawberry.lazy('core.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
related_object_id: ID | None = strawberry_django.filter_field()
object_repr: FilterLookup[str] | None = strawberry_django.filter_field()
prechange_data: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field()
)
postchange_data: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field()
)
@strawberry_django.filter_type(DjangoContentType, lookups=True)
class ContentTypeFilterV1(BaseFilterMixinV1):
id: ID | None = strawberry_django.filter_field()
app_label: FilterLookup[str] | None = strawberry_django.filter_field()
model: FilterLookup[str] | None = strawberry_django.filter_field()

View File

@@ -0,0 +1,35 @@
from typing import Annotated, List, TYPE_CHECKING
import strawberry
import strawberry_django
from django.contrib.contenttypes.models import ContentType
from strawberry.types import Info
from core.models import ObjectChange
if TYPE_CHECKING:
from core.graphql.types_v1 import DataFileTypeV1, DataSourceTypeV1, ObjectChangeTypeV1
__all__ = (
'ChangelogMixinV1',
'SyncedDataMixinV1',
)
@strawberry.type
class ChangelogMixinV1:
@strawberry_django.field
def changelog(self, info: Info) -> List[Annotated['ObjectChangeTypeV1', strawberry.lazy('.types_v1')]]: # noqa: F821
content_type = ContentType.objects.get_for_model(self)
object_changes = ObjectChange.objects.filter(
changed_object_type=content_type,
changed_object_id=self.pk
)
return object_changes.restrict(info.context.request.user, 'view')
@strawberry.type
class SyncedDataMixinV1:
data_source: Annotated['DataSourceTypeV1', strawberry.lazy('core.graphql.types_v1')] | None
data_file: Annotated['DataFileTypeV1', strawberry.lazy('core.graphql.types_v1')] | None

View File

@@ -0,0 +1,15 @@
from typing import List
import strawberry
import strawberry_django
from .types_v1 import *
@strawberry.type(name="Query")
class CoreQueryV1:
data_file: DataFileTypeV1 = strawberry_django.field()
data_file_list: List[DataFileTypeV1] = strawberry_django.field()
data_source: DataSourceTypeV1 = strawberry_django.field()
data_source_list: List[DataSourceTypeV1] = strawberry_django.field()

View File

@@ -0,0 +1,56 @@
from typing import Annotated, List
import strawberry
import strawberry_django
from django.contrib.contenttypes.models import ContentType as DjangoContentType
from core import models
from netbox.graphql.types_v1 import BaseObjectTypeV1, NetBoxObjectTypeV1
from .filters_v1 import *
__all__ = (
'ContentTypeV1',
'DataFileTypeV1',
'DataSourceTypeV1',
'ObjectChangeTypeV1',
)
@strawberry_django.type(
models.DataFile,
exclude=['data',],
filters=DataFileFilterV1,
pagination=True
)
class DataFileTypeV1(BaseObjectTypeV1):
source: Annotated["DataSourceTypeV1", strawberry.lazy('core.graphql.types_v1')]
@strawberry_django.type(
models.DataSource,
fields='__all__',
filters=DataSourceFilterV1,
pagination=True
)
class DataSourceTypeV1(NetBoxObjectTypeV1):
datafiles: List[Annotated["DataFileTypeV1", strawberry.lazy('core.graphql.types_v1')]]
@strawberry_django.type(
models.ObjectChange,
fields='__all__',
filters=ObjectChangeFilterV1,
pagination=True
)
class ObjectChangeTypeV1(BaseObjectTypeV1):
pass
@strawberry_django.type(
DjangoContentType,
fields='__all__',
pagination=True
)
class ContentTypeV1:
pass