Skip to content

Commit

Permalink
chore: Relocate GQL schema codes related to Image (#2938)
Browse files Browse the repository at this point in the history
Backported-from: main (24.12)
Backported-to: 24.09
Backport-of: 2938
  • Loading branch information
fregataa committed Oct 22, 2024
1 parent 18eea81 commit 54945cf
Show file tree
Hide file tree
Showing 7 changed files with 915 additions and 805 deletions.
4 changes: 3 additions & 1 deletion src/ai/backend/manager/models/endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,10 @@
URLColumn,
gql_mutation_wrapper,
)
from .gql_models.base import ImageRefType
from .gql_models.image import ImageNode
from .gql_models.vfolder import VirtualFolderNode
from .image import ImageIdentifier, ImageNode, ImageRefType, ImageRow
from .image import ImageIdentifier, ImageRow
from .minilang import EnumFieldItem
from .minilang.ordering import OrderSpecItem, QueryOrderParser
from .minilang.queryfilter import FieldSpecItem, QueryFilterParser
Expand Down
26 changes: 14 additions & 12 deletions src/ai/backend/manager/models/gql.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,20 @@
from .domain import CreateDomain, DeleteDomain, Domain, ModifyDomain, PurgeDomain
from .endpoint import Endpoint, EndpointList, EndpointToken, EndpointTokenList, ModifyEndpoint
from .gql_models.group import GroupConnection, GroupNode
from .gql_models.image import (
AliasImage,
ClearImages,
DealiasImage,
ForgetImage,
ForgetImageById,
Image,
ImageNode,
ModifyImage,
PreloadImage,
RescanImages,
UnloadImage,
UntagImageFromRegistry,
)
from .gql_models.session import (
ComputeSessionConnection,
ComputeSessionNode,
Expand All @@ -89,20 +103,8 @@
PurgeGroup,
)
from .image import (
AliasImage,
ClearImages,
DealiasImage,
ForgetImage,
ForgetImageById,
Image,
ImageLoadFilter,
ImageNode,
ModifyImage,
PreloadImage,
PublicImageLoadFilter,
RescanImages,
UnloadImage,
UntagImageFromRegistry,
)
from .kernel import (
ComputeContainer,
Expand Down
68 changes: 68 additions & 0 deletions src/ai/backend/manager/models/gql_models/base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
from __future__ import annotations

import graphene
from graphene.types import Scalar
from graphene.types.scalars import MAX_INT, MIN_INT
from graphql.language.ast import IntValueNode

SAFE_MIN_INT = -9007199254740991
SAFE_MAX_INT = 9007199254740991


class ResourceLimit(graphene.ObjectType):
key = graphene.String()
min = graphene.String()
max = graphene.String()


class KVPair(graphene.ObjectType):
key = graphene.String()
value = graphene.String()


class ResourceLimitInput(graphene.InputObjectType):
key = graphene.String()
min = graphene.String()
max = graphene.String()


class KVPairInput(graphene.InputObjectType):
key = graphene.String()
value = graphene.String()


class BigInt(Scalar):
"""
BigInt is an extension of the regular graphene.Int scalar type
to support integers outside the range of a signed 32-bit integer.
"""

@staticmethod
def coerce_bigint(value):
num = int(value)
if not (SAFE_MIN_INT <= num <= SAFE_MAX_INT):
raise ValueError("Cannot serialize integer out of the safe range.")
if not (MIN_INT <= num <= MAX_INT):
# treat as float
return float(int(num))
return num

serialize = coerce_bigint
parse_value = coerce_bigint

@staticmethod
def parse_literal(node):
if isinstance(node, IntValueNode):
num = int(node.value)
if not (SAFE_MIN_INT <= num <= SAFE_MAX_INT):
raise ValueError("Cannot parse integer out of the safe range.")
if not (MIN_INT <= num <= MAX_INT):
# treat as float
return float(int(num))
return num


class ImageRefType(graphene.InputObjectType):
name = graphene.String(required=True)
registry = graphene.String()
architecture = graphene.String()
Loading

0 comments on commit 54945cf

Please sign in to comment.