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,38 @@
from dataclasses import dataclass
from typing import Annotated, TYPE_CHECKING
import strawberry
import strawberry_django
from strawberry import ID
from core.graphql.filter_mixins_v1 import BaseFilterMixinV1
if TYPE_CHECKING:
from netbox.graphql.filter_lookups import TreeNodeFilter
from .filters_v1 import ContactAssignmentFilterV1, TenantFilterV1, TenantGroupFilterV1
__all__ = (
'ContactFilterMixinV1',
'TenancyFilterMixinV1',
)
@dataclass
class ContactFilterMixinV1(BaseFilterMixinV1):
contacts: Annotated['ContactAssignmentFilterV1', strawberry.lazy('tenancy.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
@dataclass
class TenancyFilterMixinV1(BaseFilterMixinV1):
tenant: Annotated['TenantFilterV1', strawberry.lazy('tenancy.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
tenant_id: ID | None = strawberry_django.filter_field()
tenant_group: Annotated['TenantGroupFilterV1', strawberry.lazy('tenancy.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
tenant_group_id: Annotated['TreeNodeFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field()
)

View File

@@ -0,0 +1,210 @@
from typing import Annotated, TYPE_CHECKING
import strawberry
import strawberry_django
from strawberry.scalars import ID
from strawberry_django import FilterLookup
from core.graphql.filter_mixins_v1 import ChangeLogFilterMixinV1
from extras.graphql.filter_mixins_v1 import CustomFieldsFilterMixinV1, TagsFilterMixinV1
from netbox.graphql.filter_mixins_v1 import (
NestedGroupModelFilterMixinV1,
OrganizationalModelFilterMixinV1,
PrimaryModelFilterMixinV1,
)
from tenancy import models
from .filter_mixins_v1 import ContactFilterMixinV1
if TYPE_CHECKING:
from core.graphql.filters_v1 import ContentTypeFilterV1
from circuits.graphql.filters_v1 import CircuitFilterV1, CircuitGroupFilterV1, VirtualCircuitFilterV1
from dcim.graphql.filters_v1 import (
CableFilterV1,
DeviceFilterV1,
LocationFilterV1,
PowerFeedFilterV1,
RackFilterV1,
RackReservationFilterV1,
SiteFilterV1,
VirtualDeviceContextFilterV1,
)
from ipam.graphql.filters_v1 import (
AggregateFilterV1,
ASNFilterV1,
ASNRangeFilterV1,
IPAddressFilterV1,
IPRangeFilterV1,
PrefixFilterV1,
RouteTargetFilterV1,
VLANFilterV1,
VLANGroupFilterV1,
VRFFilterV1,
)
from netbox.graphql.filter_lookups import TreeNodeFilter
from wireless.graphql.filters_v1 import WirelessLANFilterV1, WirelessLinkFilterV1
from virtualization.graphql.filters_v1 import ClusterFilterV1, VirtualMachineFilterV1
from vpn.graphql.filters_v1 import L2VPNFilterV1, TunnelFilterV1
from .enums import *
__all__ = (
'TenantFilterV1',
'TenantGroupFilterV1',
'ContactFilterV1',
'ContactRoleFilterV1',
'ContactGroupFilterV1',
'ContactAssignmentFilterV1',
)
@strawberry_django.filter_type(models.Tenant, lookups=True)
class TenantFilterV1(PrimaryModelFilterMixinV1, ContactFilterMixinV1):
name: FilterLookup[str] | None = strawberry_django.filter_field()
slug: FilterLookup[str] | None = strawberry_django.filter_field()
group: Annotated['TenantGroupFilterV1', strawberry.lazy('tenancy.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
group_id: Annotated['TreeNodeFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field()
)
# Reverse relations
aggregates: Annotated['AggregateFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
asns: Annotated['ASNFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = strawberry_django.filter_field()
asn_ranges: Annotated['ASNRangeFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
cables: Annotated['CableFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
circuit_groups: Annotated['CircuitGroupFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
circuits: Annotated['CircuitFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
clusters: Annotated['ClusterFilterV1', strawberry.lazy('virtualization.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
devices: Annotated['DeviceFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
ip_addresses: Annotated['IPAddressFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
ip_ranges: Annotated['IPRangeFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
l2vpns: Annotated['L2VPNFilterV1', strawberry.lazy('vpn.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
locations: Annotated['LocationFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
power_feeds: Annotated['PowerFeedFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
prefixes: Annotated['PrefixFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
racks: Annotated['RackFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
rackreservations: Annotated['RackReservationFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
route_targets: Annotated['RouteTargetFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
sites: Annotated['SiteFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
tunnels: Annotated['TunnelFilterV1', strawberry.lazy('vpn.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
vdcs: Annotated['VirtualDeviceContextFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
virtual_machines: Annotated[
'VirtualMachineFilterV1', strawberry.lazy('virtualization.graphql.filters_v1')
] | None = (
strawberry_django.filter_field()
)
vlan_groups: Annotated['VLANGroupFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
vlans: Annotated['VLANFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
virtual_circuits: Annotated['VirtualCircuitFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
vrfs: Annotated['VRFFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = strawberry_django.filter_field()
wireless_lans: Annotated['WirelessLANFilterV1', strawberry.lazy('wireless.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
wireless_links: Annotated['WirelessLinkFilterV1', strawberry.lazy('wireless.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
@strawberry_django.filter_type(models.TenantGroup, lookups=True)
class TenantGroupFilterV1(OrganizationalModelFilterMixinV1):
parent: Annotated['TenantGroupFilterV1', strawberry.lazy('tenancy.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
parent_id: ID | None = strawberry.UNSET
tenants: Annotated['TenantFilterV1', strawberry.lazy('tenancy.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
children: Annotated['TenantGroupFilterV1', strawberry.lazy('tenancy.graphql.filters_v1'), True] | None = (
strawberry_django.filter_field()
)
@strawberry_django.filter_type(models.Contact, lookups=True)
class ContactFilterV1(PrimaryModelFilterMixinV1):
name: FilterLookup[str] | None = strawberry_django.filter_field()
title: FilterLookup[str] | None = strawberry_django.filter_field()
phone: FilterLookup[str] | None = strawberry_django.filter_field()
email: FilterLookup[str] | None = strawberry_django.filter_field()
address: FilterLookup[str] | None = strawberry_django.filter_field()
link: FilterLookup[str] | None = strawberry_django.filter_field()
groups: Annotated['ContactGroupFilterV1', strawberry.lazy('tenancy.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
assignments: Annotated['ContactAssignmentFilterV1', strawberry.lazy('tenancy.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
@strawberry_django.filter_type(models.ContactRole, lookups=True)
class ContactRoleFilterV1(OrganizationalModelFilterMixinV1):
pass
@strawberry_django.filter_type(models.ContactGroup, lookups=True)
class ContactGroupFilterV1(NestedGroupModelFilterMixinV1):
parent: Annotated['ContactGroupFilterV1', strawberry.lazy('tenancy.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
@strawberry_django.filter_type(models.ContactAssignment, lookups=True)
class ContactAssignmentFilterV1(CustomFieldsFilterMixinV1, TagsFilterMixinV1, ChangeLogFilterMixinV1):
object_type: Annotated['ContentTypeFilterV1', strawberry.lazy('core.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
object_id: ID | None = strawberry_django.filter_field()
contact: Annotated['ContactFilterV1', strawberry.lazy('tenancy.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
contact_id: ID | None = strawberry_django.filter_field()
role: Annotated['ContactRoleFilterV1', strawberry.lazy('tenancy.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
role_id: ID | None = strawberry_django.filter_field()
priority: Annotated['ContactPriorityEnum', strawberry.lazy('tenancy.graphql.enums')] | None = (
strawberry_django.filter_field()
)

View File

@@ -0,0 +1,12 @@
from typing import Annotated, List
import strawberry
__all__ = (
'ContactAssignmentsMixinV1',
)
@strawberry.type
class ContactAssignmentsMixinV1:
assignments: List[Annotated["ContactAssignmentTypeV1", strawberry.lazy('tenancy.graphql.types_v1')]] # noqa: F821

View File

@@ -0,0 +1,27 @@
from typing import List
import strawberry
import strawberry_django
from .types_v1 import *
@strawberry.type(name="Query")
class TenancyQueryV1:
tenant: TenantTypeV1 = strawberry_django.field()
tenant_list: List[TenantTypeV1] = strawberry_django.field()
tenant_group: TenantGroupTypeV1 = strawberry_django.field()
tenant_group_list: List[TenantGroupTypeV1] = strawberry_django.field()
contact: ContactTypeV1 = strawberry_django.field()
contact_list: List[ContactTypeV1] = strawberry_django.field()
contact_role: ContactRoleTypeV1 = strawberry_django.field()
contact_role_list: List[ContactRoleTypeV1] = strawberry_django.field()
contact_group: ContactGroupTypeV1 = strawberry_django.field()
contact_group_list: List[ContactGroupTypeV1] = strawberry_django.field()
contact_assignment: ContactAssignmentTypeV1 = strawberry_django.field()
contact_assignment_list: List[ContactAssignmentTypeV1] = strawberry_django.field()

View File

@@ -0,0 +1,147 @@
from typing import Annotated, List, TYPE_CHECKING
import strawberry
import strawberry_django
from extras.graphql.mixins_v1 import CustomFieldsMixinV1, TagsMixinV1, ContactsMixinV1
from netbox.graphql.types_v1 import BaseObjectTypeV1, OrganizationalObjectTypeV1, NetBoxObjectTypeV1
from tenancy import models
from .filters_v1 import *
from .mixins_v1 import ContactAssignmentsMixinV1
if TYPE_CHECKING:
from circuits.graphql.types_v1 import CircuitTypeV1
from dcim.graphql.types_v1 import (
CableTypeV1,
DeviceTypeV1,
LocationTypeV1,
PowerFeedTypeV1,
RackTypeV1,
RackReservationTypeV1,
SiteTypeV1,
VirtualDeviceContextTypeV1,
)
from ipam.graphql.types_v1 import (
AggregateTypeV1,
ASNTypeV1,
ASNRangeTypeV1,
IPAddressTypeV1,
IPRangeTypeV1,
PrefixTypeV1,
RouteTargetTypeV1,
VLANTypeV1,
VRFTypeV1,
)
from netbox.graphql.types_v1 import ContentTypeTypeV1
from wireless.graphql.types_v1 import WirelessLANTypeV1, WirelessLinkTypeV1
from virtualization.graphql.types_v1 import ClusterTypeV1, VirtualMachineTypeV1
from vpn.graphql.types_v1 import L2VPNTypeV1, TunnelTypeV1
__all__ = (
'ContactAssignmentTypeV1',
'ContactGroupTypeV1',
'ContactRoleTypeV1',
'ContactTypeV1',
'TenantTypeV1',
'TenantGroupTypeV1',
)
#
# Tenants
#
@strawberry_django.type(
models.Tenant,
fields='__all__',
filters=TenantFilterV1,
pagination=True
)
class TenantTypeV1(ContactsMixinV1, NetBoxObjectTypeV1):
group: Annotated['TenantGroupTypeV1', strawberry.lazy('tenancy.graphql.types_v1')] | None
asns: List[Annotated['ASNTypeV1', strawberry.lazy('ipam.graphql.types_v1')]]
circuits: List[Annotated['CircuitTypeV1', strawberry.lazy('circuits.graphql.types_v1')]]
sites: List[Annotated['SiteTypeV1', strawberry.lazy('dcim.graphql.types_v1')]]
vlans: List[Annotated['VLANTypeV1', strawberry.lazy('ipam.graphql.types_v1')]]
wireless_lans: List[Annotated['WirelessLANTypeV1', strawberry.lazy('wireless.graphql.types_v1')]]
route_targets: List[Annotated['RouteTargetTypeV1', strawberry.lazy('ipam.graphql.types_v1')]]
locations: List[Annotated['LocationTypeV1', strawberry.lazy('dcim.graphql.types_v1')]]
ip_ranges: List[Annotated['IPRangeTypeV1', strawberry.lazy('ipam.graphql.types_v1')]]
rackreservations: List[Annotated['RackReservationTypeV1', strawberry.lazy('dcim.graphql.types_v1')]]
racks: List[Annotated['RackTypeV1', strawberry.lazy('dcim.graphql.types_v1')]]
vdcs: List[Annotated['VirtualDeviceContextTypeV1', strawberry.lazy('dcim.graphql.types_v1')]]
prefixes: List[Annotated['PrefixTypeV1', strawberry.lazy('ipam.graphql.types_v1')]]
cables: List[Annotated['CableTypeV1', strawberry.lazy('dcim.graphql.types_v1')]]
virtual_machines: List[Annotated['VirtualMachineTypeV1', strawberry.lazy('virtualization.graphql.types_v1')]]
vrfs: List[Annotated['VRFTypeV1', strawberry.lazy('ipam.graphql.types_v1')]]
asn_ranges: List[Annotated['ASNRangeTypeV1', strawberry.lazy('ipam.graphql.types_v1')]]
wireless_links: List[Annotated['WirelessLinkTypeV1', strawberry.lazy('wireless.graphql.types_v1')]]
aggregates: List[Annotated['AggregateTypeV1', strawberry.lazy('ipam.graphql.types_v1')]]
power_feeds: List[Annotated['PowerFeedTypeV1', strawberry.lazy('dcim.graphql.types_v1')]]
devices: List[Annotated['DeviceTypeV1', strawberry.lazy('dcim.graphql.types_v1')]]
tunnels: List[Annotated['TunnelTypeV1', strawberry.lazy('vpn.graphql.types_v1')]]
ip_addresses: List[Annotated['IPAddressTypeV1', strawberry.lazy('ipam.graphql.types_v1')]]
clusters: List[Annotated['ClusterTypeV1', strawberry.lazy('virtualization.graphql.types_v1')]]
l2vpns: List[Annotated['L2VPNTypeV1', strawberry.lazy('vpn.graphql.types_v1')]]
@strawberry_django.type(
models.TenantGroup,
fields='__all__',
filters=TenantGroupFilterV1,
pagination=True
)
class TenantGroupTypeV1(OrganizationalObjectTypeV1):
parent: Annotated['TenantGroupTypeV1', strawberry.lazy('tenancy.graphql.types_v1')] | None
tenants: List[TenantTypeV1]
children: List[Annotated['TenantGroupTypeV1', strawberry.lazy('tenancy.graphql.types_v1')]]
#
# Contacts
#
@strawberry_django.type(
models.Contact,
fields='__all__',
filters=ContactFilterV1,
pagination=True
)
class ContactTypeV1(ContactAssignmentsMixinV1, NetBoxObjectTypeV1):
groups: List[Annotated['ContactGroupTypeV1', strawberry.lazy('tenancy.graphql.types_v1')]]
@strawberry_django.type(
models.ContactRole,
fields='__all__',
filters=ContactRoleFilterV1,
pagination=True
)
class ContactRoleTypeV1(ContactAssignmentsMixinV1, OrganizationalObjectTypeV1):
pass
@strawberry_django.type(
models.ContactGroup,
fields='__all__',
filters=ContactGroupFilterV1,
pagination=True
)
class ContactGroupTypeV1(OrganizationalObjectTypeV1):
parent: Annotated['ContactGroupTypeV1', strawberry.lazy('tenancy.graphql.types_v1')] | None
contacts: List[ContactTypeV1]
children: List[Annotated['ContactGroupTypeV1', strawberry.lazy('tenancy.graphql.types_v1')]]
@strawberry_django.type(
models.ContactAssignment,
fields='__all__',
filters=ContactAssignmentFilterV1,
pagination=True
)
class ContactAssignmentTypeV1(CustomFieldsMixinV1, TagsMixinV1, BaseObjectTypeV1):
object_type: Annotated['ContentTypeTypeV1', strawberry.lazy('netbox.graphql.types_v1')] | None
contact: Annotated['ContactTypeV1', strawberry.lazy('tenancy.graphql.types_v1')] | None
role: Annotated['ContactRoleTypeV1', strawberry.lazy('tenancy.graphql.types_v1')] | None