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,19 @@
from dataclasses import dataclass
from typing import Annotated, TYPE_CHECKING
import strawberry
import strawberry_django
from netbox.graphql.filter_mixins_v1 import OrganizationalModelFilterMixinV1
if TYPE_CHECKING:
from netbox.graphql.enums import ColorEnum
__all__ = (
'BaseCircuitTypeFilterMixinV1',
)
@dataclass
class BaseCircuitTypeFilterMixinV1(OrganizationalModelFilterMixinV1):
color: Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')] | None = strawberry_django.filter_field()

View File

@@ -0,0 +1,228 @@
from datetime import date
from typing import Annotated, TYPE_CHECKING
import strawberry
import strawberry_django
from strawberry.scalars import ID
from strawberry_django import FilterLookup, DateFilterLookup
from circuits import models
from core.graphql.filter_mixins_v1 import BaseObjectTypeFilterMixinV1, ChangeLogFilterMixinV1
from dcim.graphql.filter_mixins_v1 import CabledObjectModelFilterMixinV1
from extras.graphql.filter_mixins_v1 import CustomFieldsFilterMixinV1, TagsFilterMixinV1
from netbox.graphql.filter_mixins_v1 import (
DistanceFilterMixinV1,
ImageAttachmentFilterMixinV1,
OrganizationalModelFilterMixinV1,
PrimaryModelFilterMixinV1,
)
from tenancy.graphql.filter_mixins_v1 import ContactFilterMixinV1, TenancyFilterMixinV1
from .filter_mixins_v1 import BaseCircuitTypeFilterMixinV1
if TYPE_CHECKING:
from core.graphql.filters_v1 import ContentTypeFilterV1
from dcim.graphql.filters_v1 import (
InterfaceFilterV1, LocationFilterV1, RegionFilterV1, SiteFilterV1, SiteGroupFilterV1
)
from ipam.graphql.filters_v1 import ASNFilterV1
from netbox.graphql.filter_lookups import IntegerLookup
from .enums import *
__all__ = (
'CircuitFilterV1',
'CircuitGroupAssignmentFilterV1',
'CircuitGroupFilterV1',
'CircuitTerminationFilterV1',
'CircuitTypeFilterV1',
'ProviderFilterV1',
'ProviderAccountFilterV1',
'ProviderNetworkFilterV1',
'VirtualCircuitFilterV1',
'VirtualCircuitTerminationFilterV1',
'VirtualCircuitTypeFilterV1',
)
@strawberry_django.filter_type(models.CircuitTermination, lookups=True)
class CircuitTerminationFilterV1(
BaseObjectTypeFilterMixinV1,
CustomFieldsFilterMixinV1,
TagsFilterMixinV1,
ChangeLogFilterMixinV1,
CabledObjectModelFilterMixinV1,
):
circuit: Annotated['CircuitFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
term_side: Annotated['CircuitTerminationSideEnum', strawberry.lazy('circuits.graphql.enums')] | None = (
strawberry_django.filter_field()
)
termination_type: Annotated['ContentTypeFilterV1', strawberry.lazy('core.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
termination_id: ID | None = strawberry_django.filter_field()
port_speed: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field()
)
upstream_speed: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field()
)
xconnect_id: FilterLookup[str] | None = strawberry_django.filter_field()
pp_info: FilterLookup[str] | None = strawberry_django.filter_field()
description: FilterLookup[str] | None = strawberry_django.filter_field()
# Cached relations
_provider_network: Annotated['ProviderNetworkFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field(name='provider_network')
)
_location: Annotated['LocationFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field(name='location')
)
_region: Annotated['RegionFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field(name='region')
)
_site_group: Annotated['SiteGroupFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field(name='site_group')
)
_site: Annotated['SiteFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field(name='site')
)
@strawberry_django.filter_type(models.Circuit, lookups=True)
class CircuitFilterV1(
ContactFilterMixinV1,
ImageAttachmentFilterMixinV1,
DistanceFilterMixinV1,
TenancyFilterMixinV1,
PrimaryModelFilterMixinV1
):
cid: FilterLookup[str] | None = strawberry_django.filter_field()
provider: Annotated['ProviderFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
provider_id: ID | None = strawberry_django.filter_field()
provider_account: Annotated['ProviderAccountFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
provider_account_id: ID | None = strawberry_django.filter_field()
type: Annotated['CircuitTypeFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
type_id: ID | None = strawberry_django.filter_field()
status: Annotated['CircuitStatusEnum', strawberry.lazy('circuits.graphql.enums')] | None = (
strawberry_django.filter_field()
)
install_date: DateFilterLookup[date] | None = strawberry_django.filter_field()
termination_date: DateFilterLookup[date] | None = strawberry_django.filter_field()
commit_rate: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field()
)
terminations: Annotated['CircuitTerminationFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
@strawberry_django.filter_type(models.CircuitType, lookups=True)
class CircuitTypeFilterV1(BaseCircuitTypeFilterMixinV1):
pass
@strawberry_django.filter_type(models.CircuitGroup, lookups=True)
class CircuitGroupFilterV1(TenancyFilterMixinV1, OrganizationalModelFilterMixinV1):
pass
@strawberry_django.filter_type(models.CircuitGroupAssignment, lookups=True)
class CircuitGroupAssignmentFilterV1(
BaseObjectTypeFilterMixinV1, CustomFieldsFilterMixinV1, TagsFilterMixinV1, ChangeLogFilterMixinV1
):
member_type: Annotated['ContentTypeFilterV1', strawberry.lazy('core.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
member_id: ID | None = strawberry_django.filter_field()
group: Annotated['CircuitGroupFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
group_id: ID | None = strawberry_django.filter_field()
priority: Annotated['CircuitPriorityEnum', strawberry.lazy('circuits.graphql.enums')] | None = (
strawberry_django.filter_field()
)
@strawberry_django.filter_type(models.Provider, lookups=True)
class ProviderFilterV1(ContactFilterMixinV1, PrimaryModelFilterMixinV1):
name: FilterLookup[str] | None = strawberry_django.filter_field()
slug: FilterLookup[str] | None = strawberry_django.filter_field()
asns: Annotated['ASNFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = strawberry_django.filter_field()
circuits: Annotated['CircuitFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
@strawberry_django.filter_type(models.ProviderAccount, lookups=True)
class ProviderAccountFilterV1(ContactFilterMixinV1, PrimaryModelFilterMixinV1):
provider: Annotated['ProviderFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
provider_id: ID | None = strawberry_django.filter_field()
account: FilterLookup[str] | None = strawberry_django.filter_field()
name: FilterLookup[str] | None = strawberry_django.filter_field()
@strawberry_django.filter_type(models.ProviderNetwork, lookups=True)
class ProviderNetworkFilterV1(PrimaryModelFilterMixinV1):
name: FilterLookup[str] | None = strawberry_django.filter_field()
provider: Annotated['ProviderFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
provider_id: ID | None = strawberry_django.filter_field()
service_id: FilterLookup[str] | None = strawberry_django.filter_field()
@strawberry_django.filter_type(models.VirtualCircuitType, lookups=True)
class VirtualCircuitTypeFilterV1(BaseCircuitTypeFilterMixinV1):
pass
@strawberry_django.filter_type(models.VirtualCircuit, lookups=True)
class VirtualCircuitFilterV1(TenancyFilterMixinV1, PrimaryModelFilterMixinV1):
cid: FilterLookup[str] | None = strawberry_django.filter_field()
provider_network: Annotated['ProviderNetworkFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
provider_network_id: ID | None = strawberry_django.filter_field()
provider_account: Annotated['ProviderAccountFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
provider_account_id: ID | None = strawberry_django.filter_field()
type: Annotated['VirtualCircuitTypeFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
type_id: ID | None = strawberry_django.filter_field()
status: Annotated['CircuitStatusEnum', strawberry.lazy('circuits.graphql.enums')] | None = (
strawberry_django.filter_field()
)
group_assignments: Annotated[
'CircuitGroupAssignmentFilterV1', strawberry.lazy('circuits.graphql.filters_v1')
] | None = (
strawberry_django.filter_field()
)
@strawberry_django.filter_type(models.VirtualCircuitTermination, lookups=True)
class VirtualCircuitTerminationFilterV1(
BaseObjectTypeFilterMixinV1, CustomFieldsFilterMixinV1, TagsFilterMixinV1, ChangeLogFilterMixinV1
):
virtual_circuit: Annotated['VirtualCircuitFilterV1', strawberry.lazy('circuits.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
virtual_circuit_id: ID | None = strawberry_django.filter_field()
role: Annotated['VirtualCircuitTerminationRoleEnum', strawberry.lazy('circuits.graphql.enums')] | None = (
strawberry_django.filter_field()
)
interface: Annotated['InterfaceFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
interface_id: ID | None = strawberry_django.filter_field()
description: FilterLookup[str] | None = strawberry_django.filter_field()

View File

@@ -0,0 +1,42 @@
from typing import List
import strawberry
import strawberry_django
from .types_v1 import *
@strawberry.type(name="Query")
class CircuitsQueryV1:
circuit: CircuitTypeV1 = strawberry_django.field()
circuit_list: List[CircuitTypeV1] = strawberry_django.field()
circuit_termination: CircuitTerminationTypeV1 = strawberry_django.field()
circuit_termination_list: List[CircuitTerminationTypeV1] = strawberry_django.field()
circuit_type: CircuitTypeTypeV1 = strawberry_django.field()
circuit_type_list: List[CircuitTypeTypeV1] = strawberry_django.field()
circuit_group: CircuitGroupTypeV1 = strawberry_django.field()
circuit_group_list: List[CircuitGroupTypeV1] = strawberry_django.field()
circuit_group_assignment: CircuitGroupAssignmentTypeV1 = strawberry_django.field()
circuit_group_assignment_list: List[CircuitGroupAssignmentTypeV1] = strawberry_django.field()
provider: ProviderTypeV1 = strawberry_django.field()
provider_list: List[ProviderTypeV1] = strawberry_django.field()
provider_account: ProviderAccountTypeV1 = strawberry_django.field()
provider_account_list: List[ProviderAccountTypeV1] = strawberry_django.field()
provider_network: ProviderNetworkTypeV1 = strawberry_django.field()
provider_network_list: List[ProviderNetworkTypeV1] = strawberry_django.field()
virtual_circuit: VirtualCircuitTypeV1 = strawberry_django.field()
virtual_circuit_list: List[VirtualCircuitTypeV1] = strawberry_django.field()
virtual_circuit_termination: VirtualCircuitTerminationTypeV1 = strawberry_django.field()
virtual_circuit_termination_list: List[VirtualCircuitTerminationTypeV1] = strawberry_django.field()
virtual_circuit_type: VirtualCircuitTypeTypeV1 = strawberry_django.field()
virtual_circuit_type_list: List[VirtualCircuitTypeTypeV1] = strawberry_django.field()

View File

@@ -0,0 +1,189 @@
from typing import Annotated, List, TYPE_CHECKING, Union
import strawberry
import strawberry_django
from circuits import models
from dcim.graphql.mixins_v1 import CabledObjectMixinV1
from extras.graphql.mixins_v1 import ContactsMixinV1, CustomFieldsMixinV1, TagsMixinV1
from netbox.graphql.types_v1 import BaseObjectTypeV1, NetBoxObjectTypeV1, ObjectTypeV1, OrganizationalObjectTypeV1
from tenancy.graphql.types_v1 import TenantTypeV1
from .filters_v1 import *
if TYPE_CHECKING:
from dcim.graphql.types_v1 import InterfaceTypeV1, LocationTypeV1, RegionTypeV1, SiteGroupTypeV1, SiteTypeV1
from ipam.graphql.types_v1 import ASNTypeV1
__all__ = (
'CircuitGroupAssignmentTypeV1',
'CircuitGroupTypeV1',
'CircuitTerminationTypeV1',
'CircuitTypeV1',
'CircuitTypeTypeV1',
'ProviderTypeV1',
'ProviderAccountTypeV1',
'ProviderNetworkTypeV1',
'VirtualCircuitTerminationTypeV1',
'VirtualCircuitTypeV1',
'VirtualCircuitTypeTypeV1',
)
@strawberry_django.type(
models.Provider,
fields='__all__',
filters=ProviderFilterV1,
pagination=True
)
class ProviderTypeV1(NetBoxObjectTypeV1, ContactsMixinV1):
networks: List[Annotated["ProviderNetworkTypeV1", strawberry.lazy('circuits.graphql.types_v1')]]
circuits: List[Annotated["CircuitTypeV1", strawberry.lazy('circuits.graphql.types_v1')]]
asns: List[Annotated["ASNTypeV1", strawberry.lazy('ipam.graphql.types_v1')]]
accounts: List[Annotated["ProviderAccountTypeV1", strawberry.lazy('circuits.graphql.types_v1')]]
@strawberry_django.type(
models.ProviderAccount,
fields='__all__',
filters=ProviderAccountFilterV1,
pagination=True
)
class ProviderAccountTypeV1(ContactsMixinV1, NetBoxObjectTypeV1):
provider: Annotated["ProviderTypeV1", strawberry.lazy('circuits.graphql.types_v1')]
circuits: List[Annotated["CircuitTypeV1", strawberry.lazy('circuits.graphql.types_v1')]]
@strawberry_django.type(
models.ProviderNetwork,
fields='__all__',
filters=ProviderNetworkFilterV1,
pagination=True
)
class ProviderNetworkTypeV1(NetBoxObjectTypeV1):
provider: Annotated["ProviderTypeV1", strawberry.lazy('circuits.graphql.types_v1')]
circuit_terminations: List[Annotated["CircuitTerminationTypeV1", strawberry.lazy('circuits.graphql.types_v1')]]
@strawberry_django.type(
models.CircuitTermination,
exclude=['termination_type', 'termination_id', '_location', '_region', '_site', '_site_group', '_provider_network'],
filters=CircuitTerminationFilterV1,
pagination=True
)
class CircuitTerminationTypeV1(CustomFieldsMixinV1, TagsMixinV1, CabledObjectMixinV1, ObjectTypeV1):
circuit: Annotated["CircuitTypeV1", strawberry.lazy('circuits.graphql.types_v1')]
@strawberry_django.field
def termination(self) -> Annotated[Union[
Annotated["LocationTypeV1", strawberry.lazy('dcim.graphql.types_v1')],
Annotated["RegionTypeV1", strawberry.lazy('dcim.graphql.types_v1')],
Annotated["SiteGroupTypeV1", strawberry.lazy('dcim.graphql.types_v1')],
Annotated["SiteTypeV1", strawberry.lazy('dcim.graphql.types_v1')],
Annotated["ProviderNetworkTypeV1", strawberry.lazy('circuits.graphql.types_v1')],
], strawberry.union("CircuitTerminationTerminationTypeV1")] | None:
return self.termination
@strawberry_django.type(
models.CircuitType,
fields='__all__',
filters=CircuitTypeFilterV1,
pagination=True
)
class CircuitTypeTypeV1(OrganizationalObjectTypeV1):
color: str
circuits: List[Annotated["CircuitTypeV1", strawberry.lazy('circuits.graphql.types_v1')]]
@strawberry_django.type(
models.Circuit,
fields='__all__',
filters=CircuitFilterV1,
pagination=True
)
class CircuitTypeV1(NetBoxObjectTypeV1, ContactsMixinV1):
provider: ProviderTypeV1
provider_account: ProviderAccountTypeV1 | None
termination_a: CircuitTerminationTypeV1 | None
termination_z: CircuitTerminationTypeV1 | None
type: CircuitTypeTypeV1
tenant: TenantTypeV1 | None
terminations: List[CircuitTerminationTypeV1]
@strawberry_django.type(
models.CircuitGroup,
fields='__all__',
filters=CircuitGroupFilterV1,
pagination=True
)
class CircuitGroupTypeV1(OrganizationalObjectTypeV1):
tenant: TenantTypeV1 | None
@strawberry_django.type(
models.CircuitGroupAssignment,
exclude=['member_type', 'member_id'],
filters=CircuitGroupAssignmentFilterV1,
pagination=True
)
class CircuitGroupAssignmentTypeV1(TagsMixinV1, BaseObjectTypeV1):
group: Annotated["CircuitGroupTypeV1", strawberry.lazy('circuits.graphql.types_v1')]
@strawberry_django.field
def member(self) -> Annotated[Union[
Annotated["CircuitTypeV1", strawberry.lazy('circuits.graphql.types_v1')],
Annotated["VirtualCircuitTypeV1", strawberry.lazy('circuits.graphql.types_v1')],
], strawberry.union("CircuitGroupAssignmentMemberTypeV1")] | None:
return self.member
@strawberry_django.type(
models.VirtualCircuitType,
fields='__all__',
filters=VirtualCircuitTypeFilterV1,
pagination=True
)
class VirtualCircuitTypeTypeV1(OrganizationalObjectTypeV1):
color: str
virtual_circuits: List[Annotated["VirtualCircuitTypeV1", strawberry.lazy('circuits.graphql.types_v1')]]
@strawberry_django.type(
models.VirtualCircuitTermination,
fields='__all__',
filters=VirtualCircuitTerminationFilterV1,
pagination=True
)
class VirtualCircuitTerminationTypeV1(CustomFieldsMixinV1, TagsMixinV1, ObjectTypeV1):
virtual_circuit: Annotated[
"VirtualCircuitTypeV1",
strawberry.lazy('circuits.graphql.types_v1')
] = strawberry_django.field(select_related=["virtual_circuit"])
interface: Annotated[
"InterfaceTypeV1",
strawberry.lazy('dcim.graphql.types_v1')
] = strawberry_django.field(select_related=["interface"])
@strawberry_django.type(
models.VirtualCircuit,
fields='__all__',
filters=VirtualCircuitFilterV1,
pagination=True
)
class VirtualCircuitTypeV1(NetBoxObjectTypeV1):
provider_network: ProviderNetworkTypeV1 = strawberry_django.field(select_related=["provider_network"])
provider_account: ProviderAccountTypeV1 | None
type: Annotated["VirtualCircuitTypeTypeV1", strawberry.lazy('circuits.graphql.types_v1')] = strawberry_django.field(
select_related=["type"]
)
tenant: TenantTypeV1 | None
terminations: List[VirtualCircuitTerminationTypeV1]