diff --git a/netbox/ipam/graphql/types.py b/netbox/ipam/graphql/types.py index a711ac2b1..0fd7f086f 100644 --- a/netbox/ipam/graphql/types.py +++ b/netbox/ipam/graphql/types.py @@ -1,8 +1,18 @@ +from typing import List + import strawberry import strawberry_django - +from circuits.graphql.types import ProviderType +from dcim.graphql.types import SiteType from ipam import models -from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, NetBoxObjectType + +from netbox.graphql.scalars import BigInt +from netbox.graphql.types import ( + BaseObjectType, + NetBoxObjectType, + OrganizationalObjectType, +) + from .filters import * __all__ = ( @@ -25,57 +35,59 @@ __all__ = ( ) +@strawberry.type class IPAddressFamilyType: - - # value = graphene.Int() - # label = graphene.String() - - def __init__(self, value): - self.value = value - self.label = f'IPv{value}' + value: int + label: str +@strawberry.type class BaseIPAddressFamilyType: """ Base type for models that need to expose their IPAddress family type. """ - # family = graphene.Field(IPAddressFamilyType) - def resolve_family(self, _): + @strawberry.field + def family(self) -> IPAddressFamilyType: # Note that self, is an instance of models.IPAddress # thus resolves to the address family value. - return IPAddressFamilyType(self.family) + return IPAddressFamilyType(value=self.value, label=f'IPv{self.value}') @strawberry_django.type( models.ASN, - # fields='__all__', - exclude=('asn',), # bug - temp + fields='__all__', filters=ASNFilter ) class ASNType(NetBoxObjectType): - # asn = graphene.Field(BigInt) - pass + asn: BigInt + + @strawberry_django.field + def sites(self) -> List[SiteType]: + return self.sites.all() + + @strawberry_django.field + def providers(self) -> List[ProviderType]: + return self.providers.all() @strawberry_django.type( models.ASNRange, - # fields='__all__', - exclude=('start', 'end',), # bug - temp + fields='__all__', filters=ASNRangeFilter ) class ASNRangeType(NetBoxObjectType): - pass + start: BigInt + end: BigInt @strawberry_django.type( models.Aggregate, - # fields='__all__', - exclude=('prefix',), # bug - temp + fields='__all__', filters=AggregateFilter ) class AggregateType(NetBoxObjectType, BaseIPAddressFamilyType): - pass + prefix: str @strawberry_django.type(