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

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

@@ -1,10 +1,14 @@
 import strawberry
 from strawberry_django.optimizer import DjangoOptimizerExtension
 from strawberry.schema.config import StrawberryConfig
+
 from circuits.graphql.schema import CircuitsQuery
 from core.graphql.schema import CoreQuery
 from dcim.graphql.schema import DCIMQuery
 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 virtualization.graphql.schema import VirtualizationQuery
 # from vpn.graphql.schema import VPNQuery
@@ -18,13 +22,12 @@ class Query(
     CoreQuery,
     DCIMQuery,
     ExtrasQuery,
-    # IPAMQuery,
-    # TenancyQuery,
+    IPAMQuery,
+    TenancyQuery,
     # VirtualizationQuery,
     # VPNQuery,
     # WirelessQuery,
-    # *registry['plugins']['graphql_schemas'],  # Append plugin schemas
-    # graphene.ObjectType
+    *registry['plugins']['graphql_schemas'],  # Append plugin schemas
 ):
     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 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(
     models.Tenant,
     fields='__all__',
-    # filters=TenantFilter
+    filters=TenantFilter
 )
 class TenantType(NetBoxObjectType):
     pass
@@ -38,8 +38,9 @@ class TenantType(NetBoxObjectType):
 
 @strawberry_django.type(
     models.TenantGroup,
-    fields='__all__',
-    # filters=TenantGroupFilter
+    # fields='__all__',
+    exclude=('parent',),  # bug - temp
+    filters=TenantGroupFilter
 )
 class TenantGroupType(OrganizationalObjectType):
     pass
@@ -52,7 +53,7 @@ class TenantGroupType(OrganizationalObjectType):
 @strawberry_django.type(
     models.Contact,
     fields='__all__',
-    # filters=ContactFilter
+    filters=ContactFilter
 )
 class ContactType(ContactAssignmentsMixin, NetBoxObjectType):
     pass
@@ -61,7 +62,7 @@ class ContactType(ContactAssignmentsMixin, NetBoxObjectType):
 @strawberry_django.type(
     models.ContactRole,
     fields='__all__',
-    # filters=ContactRoleFilter
+    filters=ContactRoleFilter
 )
 class ContactRoleType(ContactAssignmentsMixin, OrganizationalObjectType):
     pass
@@ -69,8 +70,9 @@ class ContactRoleType(ContactAssignmentsMixin, OrganizationalObjectType):
 
 @strawberry_django.type(
     models.ContactGroup,
-    fields='__all__',
-    # filters=ContactGroupFilter
+    # fields='__all__',
+    exclude=('parent',),  # bug - temp
+    filters=ContactGroupFilter
 )
 class ContactGroupType(OrganizationalObjectType):
     pass
@@ -79,7 +81,7 @@ class ContactGroupType(OrganizationalObjectType):
 @strawberry_django.type(
     models.ContactAssignment,
     fields='__all__',
-    # filters=ContactAssignmentFilter
+    filters=ContactAssignmentFilter
 )
 class ContactAssignmentType(CustomFieldsMixin, TagsMixin, BaseObjectType):
     pass