Arthur 2 лет назад
Родитель
Сommit
d3fc026b5d

+ 105 - 0
netbox/ipam/graphql/filters.py

@@ -0,0 +1,105 @@
+import strawberry
+import strawberry_django
+from strawberry import auto
+from ipam import models, filtersets
+from netbox.graphql import filters
+
+
+__all__ = (
+    'ASNFilter',
+    'ASNRangeFilter',
+    'AggregateFilter',
+    'FHRPGroupFilter',
+    'FHRPGroupAssignmentFilter',
+    'IPAddressFilter',
+    'IPRangeFilter',
+    'PrefixFilter',
+    'RIRFilter',
+    'RoleFilter',
+    'RouteTargetFilter',
+    'ServiceFilter',
+    'ServiceTemplateFilter',
+    'VLANFilter',
+    'VLANGroupFilter',
+    'VRFFilter',
+)
+
+
+@strawberry_django.filter(models.ASN, lookups=True)
+class ASNFilter(filtersets.ASNFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.ASNRange, lookups=True)
+class ASNRangeFilter(filtersets.ASNRangeFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.Aggregate, lookups=True)
+class AggregateFilter(filtersets.AggregateFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.FHRPGroup, lookups=True)
+class FHRPGroupFilter(filtersets.FHRPGroupFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.FHRPGroupAssignment, lookups=True)
+class FHRPGroupAssignmentFilter(filtersets.FHRPGroupAssignmentFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.IPAddress, lookups=True)
+class IPAddressFilter(filtersets.IPAddressFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.IPRange, lookups=True)
+class IPRangeFilter(filtersets.IPRangeFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.Prefix, lookups=True)
+class PrefixFilter(filtersets.PrefixFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.RIR, lookups=True)
+class RIRFilter(filtersets.RIRFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.Role, lookups=True)
+class RoleFilter(filtersets.RoleFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.RouteTarget, lookups=True)
+class RouteTargetFilter(filtersets.RouteTargetFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.Service, lookups=True)
+class ServiceFilter(filtersets.ServiceFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.ServiceTemplate, lookups=True)
+class ServiceTemplateFilter(filtersets.ServiceTemplateFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.VLAN, lookups=True)
+class VLANFilter(filtersets.VLANFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.VLANGroup, lookups=True)
+class VLANGroupFilter(filtersets.VLANGroupFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.VRF, lookups=True)
+class VRFFilter(filtersets.VRFFilterSet):
+    id: auto

+ 37 - 84
netbox/ipam/graphql/schema.py

@@ -1,104 +1,57 @@
-import graphene
+from typing import List
+import strawberry
+import strawberry_django
 
 
 from ipam import models
 from ipam import models
-from netbox.graphql.fields import ObjectField, ObjectListField
-from utilities.graphql_optimizer import gql_query_optimizer
 from .types import *
 from .types import *
 
 
 
 
-class IPAMQuery(graphene.ObjectType):
-    asn = ObjectField(ASNType)
-    asn_list = ObjectListField(ASNType)
+@strawberry.type
+class IPAMQuery:
+    asn: ASNType = strawberry_django.field()
+    asn_list: List[ASNType] = strawberry_django.field()
 
 
-    def resolve_asn_list(root, info, **kwargs):
-        return gql_query_optimizer(models.ASN.objects.all(), info)
+    asn_range: ASNRangeType = strawberry_django.field()
+    asn_range_list: List[ASNRangeType] = strawberry_django.field()
 
 
-    asn_range = ObjectField(ASNRangeType)
-    asn_range_list = ObjectListField(ASNRangeType)
+    aggregate: AggregateType = strawberry_django.field()
+    aggregate_list: List[AggregateType] = strawberry_django.field()
 
 
-    def resolve_asn_range_list(root, info, **kwargs):
-        return gql_query_optimizer(models.ASNRange.objects.all(), info)
+    ip_address: IPAddressType = strawberry_django.field()
+    ip_address_list: List[IPAddressType] = strawberry_django.field()
 
 
-    aggregate = ObjectField(AggregateType)
-    aggregate_list = ObjectListField(AggregateType)
+    ip_range: IPRangeType = strawberry_django.field()
+    ip_range_list: List[IPRangeType] = strawberry_django.field()
 
 
-    def resolve_aggregate_list(root, info, **kwargs):
-        return gql_query_optimizer(models.Aggregate.objects.all(), info)
+    prefix: PrefixType = strawberry_django.field()
+    prefix_list: List[PrefixType] = strawberry_django.field()
 
 
-    ip_address = ObjectField(IPAddressType)
-    ip_address_list = ObjectListField(IPAddressType)
+    rir: RIRType = strawberry_django.field()
+    rir_list: List[RIRType] = strawberry_django.field()
 
 
-    def resolve_ip_address_list(root, info, **kwargs):
-        return gql_query_optimizer(models.IPAddress.objects.all(), info)
+    role: RoleType = strawberry_django.field()
+    role_list: List[RoleType] = strawberry_django.field()
 
 
-    ip_range = ObjectField(IPRangeType)
-    ip_range_list = ObjectListField(IPRangeType)
+    route_target: RouteTargetType = strawberry_django.field()
+    route_target_list: List[RouteTargetType] = strawberry_django.field()
 
 
-    def resolve_ip_range_list(root, info, **kwargs):
-        return gql_query_optimizer(models.IPRange.objects.all(), info)
+    service: ServiceType = strawberry_django.field()
+    service_list: List[ServiceType] = strawberry_django.field()
 
 
-    prefix = ObjectField(PrefixType)
-    prefix_list = ObjectListField(PrefixType)
+    service_template: ServiceTemplateType = strawberry_django.field()
+    service_template_list: List[ServiceTemplateType] = strawberry_django.field()
 
 
-    def resolve_prefix_list(root, info, **kwargs):
-        return gql_query_optimizer(models.Prefix.objects.all(), info)
+    fhrp_group: FHRPGroupType = strawberry_django.field()
+    fhrp_group_list: List[FHRPGroupType] = strawberry_django.field()
 
 
-    rir = ObjectField(RIRType)
-    rir_list = ObjectListField(RIRType)
+    fhrp_group_assignment: FHRPGroupAssignmentType = strawberry_django.field()
+    fhrp_group_assignment_list: List[FHRPGroupAssignmentType] = strawberry_django.field()
 
 
-    def resolve_rir_list(root, info, **kwargs):
-        return gql_query_optimizer(models.RIR.objects.all(), info)
+    vlan: VLANType = strawberry_django.field()
+    vlan_list: List[VLANType] = strawberry_django.field()
 
 
-    role = ObjectField(RoleType)
-    role_list = ObjectListField(RoleType)
+    vlan_group: VLANGroupType = strawberry_django.field()
+    vlan_group_list: List[VLANGroupType] = strawberry_django.field()
 
 
-    def resolve_role_list(root, info, **kwargs):
-        return gql_query_optimizer(models.Role.objects.all(), info)
-
-    route_target = ObjectField(RouteTargetType)
-    route_target_list = ObjectListField(RouteTargetType)
-
-    def resolve_route_target_list(root, info, **kwargs):
-        return gql_query_optimizer(models.RouteTarget.objects.all(), info)
-
-    service = ObjectField(ServiceType)
-    service_list = ObjectListField(ServiceType)
-
-    def resolve_service_list(root, info, **kwargs):
-        return gql_query_optimizer(models.Service.objects.all(), info)
-
-    service_template = ObjectField(ServiceTemplateType)
-    service_template_list = ObjectListField(ServiceTemplateType)
-
-    def resolve_service_template_list(root, info, **kwargs):
-        return gql_query_optimizer(models.ServiceTemplate.objects.all(), info)
-
-    fhrp_group = ObjectField(FHRPGroupType)
-    fhrp_group_list = ObjectListField(FHRPGroupType)
-
-    def resolve_fhrp_group_list(root, info, **kwargs):
-        return gql_query_optimizer(models.FHRPGroup.objects.all(), info)
-
-    fhrp_group_assignment = ObjectField(FHRPGroupAssignmentType)
-    fhrp_group_assignment_list = ObjectListField(FHRPGroupAssignmentType)
-
-    def resolve_fhrp_group_assignment_list(root, info, **kwargs):
-        return gql_query_optimizer(models.FHRPGroupAssignment.objects.all(), info)
-
-    vlan = ObjectField(VLANType)
-    vlan_list = ObjectListField(VLANType)
-
-    def resolve_vlan_list(root, info, **kwargs):
-        return gql_query_optimizer(models.VLAN.objects.all(), info)
-
-    vlan_group = ObjectField(VLANGroupType)
-    vlan_group_list = ObjectListField(VLANGroupType)
-
-    def resolve_vlan_group_list(root, info, **kwargs):
-        return gql_query_optimizer(models.VLANGroup.objects.all(), info)
-
-    vrf = ObjectField(VRFType)
-    vrf_list = ObjectListField(VRFType)
-
-    def resolve_vrf_list(root, info, **kwargs):
-        return gql_query_optimizer(models.VRF.objects.all(), info)
+    vrf: VRFType = strawberry_django.field()
+    vrf_list: List[VRFType] = strawberry_django.field()

+ 17 - 10
netbox/ipam/graphql/types.py

@@ -26,7 +26,7 @@ __all__ = (
 )
 )
 
 
 
 
-class IPAddressFamilyType(graphene.ObjectType):
+class IPAddressFamilyType:
 
 
     # value = graphene.Int()
     # value = graphene.Int()
     # label = graphene.String()
     # label = graphene.String()
@@ -50,8 +50,9 @@ class BaseIPAddressFamilyType:
 
 
 @strawberry_django.type(
 @strawberry_django.type(
     models.ASN,
     models.ASN,
-    fields='__all__',
-    filters=ProviderFilter
+    # fields='__all__',
+    exclude=('asn',),  # bug - temp
+    filters=ASNFilter
 )
 )
 class ASNType(NetBoxObjectType):
 class ASNType(NetBoxObjectType):
     # asn = graphene.Field(BigInt)
     # asn = graphene.Field(BigInt)
@@ -60,7 +61,8 @@ class ASNType(NetBoxObjectType):
 
 
 @strawberry_django.type(
 @strawberry_django.type(
     models.ASNRange,
     models.ASNRange,
-    fields='__all__',
+    # fields='__all__',
+    exclude=('start', 'end',),  # bug - temp
     filters=ASNRangeFilter
     filters=ASNRangeFilter
 )
 )
 class ASNRangeType(NetBoxObjectType):
 class ASNRangeType(NetBoxObjectType):
@@ -69,7 +71,8 @@ class ASNRangeType(NetBoxObjectType):
 
 
 @strawberry_django.type(
 @strawberry_django.type(
     models.Aggregate,
     models.Aggregate,
-    fields='__all__',
+    # fields='__all__',
+    exclude=('prefix',),  # bug - temp
     filters=AggregateFilter
     filters=AggregateFilter
 )
 )
 class AggregateType(NetBoxObjectType, BaseIPAddressFamilyType):
 class AggregateType(NetBoxObjectType, BaseIPAddressFamilyType):
@@ -99,7 +102,7 @@ class FHRPGroupAssignmentType(BaseObjectType):
 
 
 @strawberry_django.type(
 @strawberry_django.type(
     models.IPAddress,
     models.IPAddress,
-    exclude=('assigned_object_type', 'assigned_object_id'),
+    exclude=('assigned_object_type', 'assigned_object_id', 'address'),
     filters=IPAddressFilter
     filters=IPAddressFilter
 )
 )
 class IPAddressType(NetBoxObjectType, BaseIPAddressFamilyType):
 class IPAddressType(NetBoxObjectType, BaseIPAddressFamilyType):
@@ -111,7 +114,8 @@ class IPAddressType(NetBoxObjectType, BaseIPAddressFamilyType):
 
 
 @strawberry_django.type(
 @strawberry_django.type(
     models.IPRange,
     models.IPRange,
-    fields='__all__',
+    # fields='__all__',
+    exclude=('start_address', 'end_address',),  # bug - temp
     filters=IPRangeFilter
     filters=IPRangeFilter
 )
 )
 class IPRangeType(NetBoxObjectType):
 class IPRangeType(NetBoxObjectType):
@@ -122,7 +126,8 @@ class IPRangeType(NetBoxObjectType):
 
 
 @strawberry_django.type(
 @strawberry_django.type(
     models.Prefix,
     models.Prefix,
-    fields='__all__',
+    # fields='__all__',
+    exclude=('prefix',),  # bug - temp
     filters=PrefixFilter
     filters=PrefixFilter
 )
 )
 class PrefixType(NetBoxObjectType, BaseIPAddressFamilyType):
 class PrefixType(NetBoxObjectType, BaseIPAddressFamilyType):
@@ -158,7 +163,8 @@ class RouteTargetType(NetBoxObjectType):
 
 
 @strawberry_django.type(
 @strawberry_django.type(
     models.Service,
     models.Service,
-    fields='__all__',
+    # fields='__all__',
+    exclude=('ports',),  # bug - temp
     filters=ServiceFilter
     filters=ServiceFilter
 )
 )
 class ServiceType(NetBoxObjectType):
 class ServiceType(NetBoxObjectType):
@@ -167,7 +173,8 @@ class ServiceType(NetBoxObjectType):
 
 
 @strawberry_django.type(
 @strawberry_django.type(
     models.ServiceTemplate,
     models.ServiceTemplate,
-    fields='__all__',
+    # fields='__all__',
+    exclude=('ports',),  # bug - temp
     filters=ServiceTemplateFilter
     filters=ServiceTemplateFilter
 )
 )
 class ServiceTemplateType(NetBoxObjectType):
 class ServiceTemplateType(NetBoxObjectType):

+ 7 - 4
netbox/netbox/graphql/schema.py

@@ -1,10 +1,14 @@
 import strawberry
 import strawberry
 from strawberry_django.optimizer import DjangoOptimizerExtension
 from strawberry_django.optimizer import DjangoOptimizerExtension
 from strawberry.schema.config import StrawberryConfig
 from strawberry.schema.config import StrawberryConfig
+
 from circuits.graphql.schema import CircuitsQuery
 from circuits.graphql.schema import CircuitsQuery
 from core.graphql.schema import CoreQuery
 from core.graphql.schema import CoreQuery
 from dcim.graphql.schema import DCIMQuery
 from dcim.graphql.schema import DCIMQuery
 from extras.graphql.schema import ExtrasQuery
 from extras.graphql.schema import ExtrasQuery
+from ipam.graphql.schema import IPAMQuery
+from netbox.registry import registry
+from tenancy.graphql.schema import TenancyQuery
 from users.graphql.schema import UsersQuery
 from users.graphql.schema import UsersQuery
 # from virtualization.graphql.schema import VirtualizationQuery
 # from virtualization.graphql.schema import VirtualizationQuery
 # from vpn.graphql.schema import VPNQuery
 # from vpn.graphql.schema import VPNQuery
@@ -18,13 +22,12 @@ class Query(
     CoreQuery,
     CoreQuery,
     DCIMQuery,
     DCIMQuery,
     ExtrasQuery,
     ExtrasQuery,
-    # IPAMQuery,
-    # TenancyQuery,
+    IPAMQuery,
+    TenancyQuery,
     # VirtualizationQuery,
     # VirtualizationQuery,
     # VPNQuery,
     # VPNQuery,
     # WirelessQuery,
     # WirelessQuery,
-    # *registry['plugins']['graphql_schemas'],  # Append plugin schemas
-    # graphene.ObjectType
+    *registry['plugins']['graphql_schemas'],  # Append plugin schemas
 ):
 ):
     pass
     pass
 
 

+ 45 - 0
netbox/tenancy/graphql/filters.py

@@ -0,0 +1,45 @@
+import strawberry
+import strawberry_django
+from strawberry import auto
+from tenancy import models, filtersets
+from netbox.graphql import filters
+
+
+__all__ = (
+    'TenantFilter',
+    'TenantGroupFilter',
+    'ContactFilter',
+    'ContactRoleFilter',
+    'ContactGroupFilter',
+    'ContactAssignmentFilter',
+)
+
+
+@strawberry_django.filter(models.Tenant, lookups=True)
+class TenantFilter(filtersets.TenantFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.TenantGroup, lookups=True)
+class TenantGroupFilter(filtersets.TenantGroupFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.Contact, lookups=True)
+class ContactFilter(filtersets.ContactFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.ContactRole, lookups=True)
+class ContactRoleFilter(filtersets.ContactRoleFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.ContactGroup, lookups=True)
+class ContactGroupFilter(filtersets.ContactGroupFilterSet):
+    id: auto
+
+
+@strawberry_django.filter(models.ContactAssignment, lookups=True)
+class ContactAssignmentFilter(filtersets.ContactAssignmentFilterSet):
+    id: auto

+ 18 - 35
netbox/tenancy/graphql/schema.py

@@ -1,44 +1,27 @@
-import graphene
+from typing import List
+import strawberry
+import strawberry_django
 
 
-from netbox.graphql.fields import ObjectField, ObjectListField
-from tenancy import models
+from circuits import models
 from .types import *
 from .types import *
-from utilities.graphql_optimizer import gql_query_optimizer
 
 
 
 
-class TenancyQuery(graphene.ObjectType):
-    tenant = ObjectField(TenantType)
-    tenant_list = ObjectListField(TenantType)
+@strawberry.type
+class TenancyQuery:
+    tenant: TenantType = strawberry_django.field()
+    tenant_list: List[TenantType] = strawberry_django.field()
 
 
-    def resolve_tenant_list(root, info, **kwargs):
-        return gql_query_optimizer(models.Tenant.objects.all(), info)
+    tenant_group: TenantGroupType = strawberry_django.field()
+    tenant_group_list: List[TenantGroupType] = strawberry_django.field()
 
 
-    tenant_group = ObjectField(TenantGroupType)
-    tenant_group_list = ObjectListField(TenantGroupType)
+    contact: ContactType = strawberry_django.field()
+    contact_list: List[ContactType] = strawberry_django.field()
 
 
-    def resolve_tenant_group_list(root, info, **kwargs):
-        return gql_query_optimizer(models.TenantGroup.objects.all(), info)
+    contact_role: ContactRoleType = strawberry_django.field()
+    contact_role_list: List[ContactRoleType] = strawberry_django.field()
 
 
-    contact = ObjectField(ContactType)
-    contact_list = ObjectListField(ContactType)
+    contact_group: ContactGroupType = strawberry_django.field()
+    contact_group_list: List[ContactGroupType] = strawberry_django.field()
 
 
-    def resolve_contact_list(root, info, **kwargs):
-        return gql_query_optimizer(models.Contact.objects.all(), info)
-
-    contact_role = ObjectField(ContactRoleType)
-    contact_role_list = ObjectListField(ContactRoleType)
-
-    def resolve_contact_role_list(root, info, **kwargs):
-        return gql_query_optimizer(models.ContactRole.objects.all(), info)
-
-    contact_group = ObjectField(ContactGroupType)
-    contact_group_list = ObjectListField(ContactGroupType)
-
-    def resolve_contact_group_list(root, info, **kwargs):
-        return gql_query_optimizer(models.ContactGroup.objects.all(), info)
-
-    contact_assignment = ObjectField(ContactAssignmentType)
-    contact_assignment_list = ObjectListField(ContactAssignmentType)
-
-    def resolve_contact_assignment_list(root, info, **kwargs):
-        return gql_query_optimizer(models.ContactAssignment.objects.all(), info)
+    contact_assignment: ContactAssignmentType = strawberry_django.field()
+    contact_assignment_list: List[ContactAssignmentType] = strawberry_django.field()

+ 10 - 8
netbox/tenancy/graphql/types.py

@@ -30,7 +30,7 @@ class ContactAssignmentsMixin:
 @strawberry_django.type(
 @strawberry_django.type(
     models.Tenant,
     models.Tenant,
     fields='__all__',
     fields='__all__',
-    # filters=TenantFilter
+    filters=TenantFilter
 )
 )
 class TenantType(NetBoxObjectType):
 class TenantType(NetBoxObjectType):
     pass
     pass
@@ -38,8 +38,9 @@ class TenantType(NetBoxObjectType):
 
 
 @strawberry_django.type(
 @strawberry_django.type(
     models.TenantGroup,
     models.TenantGroup,
-    fields='__all__',
-    # filters=TenantGroupFilter
+    # fields='__all__',
+    exclude=('parent',),  # bug - temp
+    filters=TenantGroupFilter
 )
 )
 class TenantGroupType(OrganizationalObjectType):
 class TenantGroupType(OrganizationalObjectType):
     pass
     pass
@@ -52,7 +53,7 @@ class TenantGroupType(OrganizationalObjectType):
 @strawberry_django.type(
 @strawberry_django.type(
     models.Contact,
     models.Contact,
     fields='__all__',
     fields='__all__',
-    # filters=ContactFilter
+    filters=ContactFilter
 )
 )
 class ContactType(ContactAssignmentsMixin, NetBoxObjectType):
 class ContactType(ContactAssignmentsMixin, NetBoxObjectType):
     pass
     pass
@@ -61,7 +62,7 @@ class ContactType(ContactAssignmentsMixin, NetBoxObjectType):
 @strawberry_django.type(
 @strawberry_django.type(
     models.ContactRole,
     models.ContactRole,
     fields='__all__',
     fields='__all__',
-    # filters=ContactRoleFilter
+    filters=ContactRoleFilter
 )
 )
 class ContactRoleType(ContactAssignmentsMixin, OrganizationalObjectType):
 class ContactRoleType(ContactAssignmentsMixin, OrganizationalObjectType):
     pass
     pass
@@ -69,8 +70,9 @@ class ContactRoleType(ContactAssignmentsMixin, OrganizationalObjectType):
 
 
 @strawberry_django.type(
 @strawberry_django.type(
     models.ContactGroup,
     models.ContactGroup,
-    fields='__all__',
-    # filters=ContactGroupFilter
+    # fields='__all__',
+    exclude=('parent',),  # bug - temp
+    filters=ContactGroupFilter
 )
 )
 class ContactGroupType(OrganizationalObjectType):
 class ContactGroupType(OrganizationalObjectType):
     pass
     pass
@@ -79,7 +81,7 @@ class ContactGroupType(OrganizationalObjectType):
 @strawberry_django.type(
 @strawberry_django.type(
     models.ContactAssignment,
     models.ContactAssignment,
     fields='__all__',
     fields='__all__',
-    # filters=ContactAssignmentFilter
+    filters=ContactAssignmentFilter
 )
 )
 class ContactAssignmentType(CustomFieldsMixin, TagsMixin, BaseObjectType):
 class ContactAssignmentType(CustomFieldsMixin, TagsMixin, BaseObjectType):
     pass
     pass