Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions netbox/circuits/graphql/filter_mixins_v1.py
Original file line number Diff line number Diff line change
@@ -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()
18 changes: 12 additions & 6 deletions netbox/circuits/graphql/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import strawberry
import strawberry_django
from strawberry.scalars import ID
from strawberry_django import FilterLookup, DateFilterLookup
from strawberry_django import BaseFilterLookup, FilterLookup, DateFilterLookup

from circuits import models
from core.graphql.filter_mixins import BaseObjectTypeFilterMixin, ChangeLogFilterMixin
Expand Down Expand Up @@ -52,7 +52,9 @@ class CircuitTerminationFilter(
circuit: Annotated['CircuitFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
strawberry_django.filter_field()
)
term_side: Annotated['CircuitTerminationSideEnum', strawberry.lazy('circuits.graphql.enums')] | None = (
term_side: (
BaseFilterLookup[Annotated['CircuitTerminationSideEnum', strawberry.lazy('circuits.graphql.enums')]] | None
) = (
strawberry_django.filter_field()
)
termination_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = (
Expand Down Expand Up @@ -108,7 +110,7 @@ class CircuitFilter(
strawberry_django.filter_field()
)
type_id: ID | None = strawberry_django.filter_field()
status: Annotated['CircuitStatusEnum', strawberry.lazy('circuits.graphql.enums')] | None = (
status: BaseFilterLookup[Annotated['CircuitStatusEnum', strawberry.lazy('circuits.graphql.enums')]] | None = (
strawberry_django.filter_field()
)
install_date: DateFilterLookup[date] | None = strawberry_django.filter_field()
Expand Down Expand Up @@ -143,7 +145,7 @@ class CircuitGroupAssignmentFilter(
strawberry_django.filter_field()
)
group_id: ID | None = strawberry_django.filter_field()
priority: Annotated['CircuitPriorityEnum', strawberry.lazy('circuits.graphql.enums')] | None = (
priority: BaseFilterLookup[Annotated['CircuitPriorityEnum', strawberry.lazy('circuits.graphql.enums')]] | None = (
strawberry_django.filter_field()
)

Expand Down Expand Up @@ -198,7 +200,7 @@ class VirtualCircuitFilter(TenancyFilterMixin, PrimaryModelFilterMixin):
strawberry_django.filter_field()
)
type_id: ID | None = strawberry_django.filter_field()
status: Annotated['CircuitStatusEnum', strawberry.lazy('circuits.graphql.enums')] | None = (
status: BaseFilterLookup[Annotated['CircuitStatusEnum', strawberry.lazy('circuits.graphql.enums')]] | None = (
strawberry_django.filter_field()
)
group_assignments: Annotated['CircuitGroupAssignmentFilter', strawberry.lazy('circuits.graphql.filters')] | None = (
Expand All @@ -214,7 +216,11 @@ class VirtualCircuitTerminationFilter(
strawberry_django.filter_field()
)
virtual_circuit_id: ID | None = strawberry_django.filter_field()
role: Annotated['VirtualCircuitTerminationRoleEnum', strawberry.lazy('circuits.graphql.enums')] | None = (
role: (
BaseFilterLookup[
Annotated['VirtualCircuitTerminationRoleEnum', strawberry.lazy('circuits.graphql.enums')]
] | None
) = (
strawberry_django.filter_field()
)
interface: Annotated['InterfaceFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
Expand Down
228 changes: 228 additions & 0 deletions netbox/circuits/graphql/filters_v1.py
Original file line number Diff line number Diff line change
@@ -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()
42 changes: 42 additions & 0 deletions netbox/circuits/graphql/schema_v1.py
Original file line number Diff line number Diff line change
@@ -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()
Loading