Просмотр исходного кода

#6732 - Add graphql support for new ASN model and fix ASN overflow on longs

Daniel Sheppard 4 лет назад
Родитель
Сommit
de5c9ef4b2

+ 4 - 0
netbox/dcim/graphql/types.py

@@ -1,8 +1,11 @@
+import graphene
+
 from dcim import filtersets, models
 from extras.graphql.mixins import (
     ChangelogMixin, ConfigContextMixin, CustomFieldsMixin, ImageAttachmentsMixin, TagsMixin,
 )
 from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin
+from ipam.graphql.scalars import ASNField
 from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, PrimaryObjectType
 
 __all__ = (
@@ -374,6 +377,7 @@ class RegionType(VLANGroupsMixin, OrganizationalObjectType):
 
 
 class SiteType(VLANGroupsMixin, ImageAttachmentsMixin, PrimaryObjectType):
+    asn = graphene.Field(ASNField)
 
     class Meta:
         model = models.Site

+ 5 - 0
netbox/ipam/graphql/scalars.py

@@ -0,0 +1,5 @@
+from netbox.graphql.scalars import BigInt
+
+
+class ASNField(BigInt):
+    pass

+ 4 - 0
netbox/ipam/graphql/types.py

@@ -1,4 +1,7 @@
+import graphene
+
 from ipam import filtersets, models
+from ipam.graphql.scalars import ASNField
 from netbox.graphql.types import OrganizationalObjectType, PrimaryObjectType
 
 __all__ = (
@@ -18,6 +21,7 @@ __all__ = (
 
 
 class ASNType(PrimaryObjectType):
+    asn = graphene.Field(ASNField)
 
     class Meta:
         model = models.ASN

+ 23 - 0
netbox/netbox/graphql/scalars.py

@@ -0,0 +1,23 @@
+from graphene import Scalar
+from graphql.language import ast
+from graphql.type.scalars import MAX_INT, MIN_INT
+
+
+class BigInt(Scalar):
+    """
+    Handle any BigInts
+    """
+    @staticmethod
+    def to_float(value):
+        num = int(value)
+        if num > MAX_INT or num < MIN_INT:
+            return float(num)
+        return num
+
+    serialize = to_float
+    parse_value = to_float
+
+    @staticmethod
+    def parse_literal(node):
+        if isinstance(node, ast.IntValue):
+            return BigInt.to_float(node.value)