Recursive types #181

This commit is contained in:
2025-09-28 21:53:15 +02:00
parent 39d06dfe48
commit 39351a5eb9
41 changed files with 281 additions and 134 deletions

View File

@@ -1,7 +1,7 @@
from starlette.responses import JSONResponse
from api.src.queries.cities import CityGraphType, CityFilter, CitySort
from api.src.queries.hello import UserGraphType, AuthUserFilter, AuthUserSort, AuthUserGraphType
from api.src.queries.hello import UserGraphType#, AuthUserFilter, AuthUserSort, AuthUserGraphType
from api.src.queries.user import UserFilter, UserSort
from cpl.api.api_module import ApiModule
from cpl.application.application_builder import ApplicationBuilder
@@ -47,9 +47,9 @@ def main():
.add_transient(UserGraphType)
.add_transient(UserFilter)
.add_transient(UserSort)
.add_transient(AuthUserGraphType)
.add_transient(AuthUserFilter)
.add_transient(AuthUserSort)
# .add_transient(AuthUserGraphType)
# .add_transient(AuthUserFilter)
# .add_transient(AuthUserSort)
.add_transient(HelloQuery)
# test data
.add_singleton(TestDataSeeder)

View File

@@ -1,12 +1,12 @@
from cpl.graphql.schema.filter.filter import Filter
from cpl.graphql.schema.graph_type import GraphType
from cpl.graphql.schema.db_model_graph_type import DbModelGraphType
from cpl.graphql.schema.filter.db_model_filter import DbModelFilter
from cpl.graphql.schema.sort.sort import Sort
from cpl.graphql.schema.sort.sort_order import SortOrder
from model.author import Author
class AuthorFilter(Filter[Author]):
class AuthorFilter(DbModelFilter[Author]):
def __init__(self):
Filter.__init__(self)
DbModelFilter.__init__(self, public=True)
self.int_field("id")
self.string_field("firstName")
self.string_field("lastName")
@@ -18,10 +18,10 @@ class AuthorSort(Sort[Author]):
self.field("firstName", SortOrder)
self.field("lastName", SortOrder)
class AuthorGraphType(GraphType[Author]):
class AuthorGraphType(DbModelGraphType[Author]):
def __init__(self):
GraphType.__init__(self)
DbModelGraphType.__init__(self, public=True)
self.int_field(
"id",

View File

@@ -1,6 +1,6 @@
from cpl.graphql.query_context import QueryContext
from cpl.graphql.schema.filter.filter import Filter
from cpl.graphql.schema.graph_type import GraphType
from cpl.graphql.schema.db_model_graph_type import DbModelGraphType
from cpl.graphql.schema.filter.db_model_filter import DbModelFilter
from cpl.graphql.schema.input import Input
from cpl.graphql.schema.mutation import Mutation
from cpl.graphql.schema.sort.sort import Sort
@@ -11,9 +11,9 @@ from model.post import Post
from model.post_dao import PostDao
class PostFilter(Filter[Post]):
class PostFilter(DbModelFilter[Post]):
def __init__(self):
Filter.__init__(self)
DbModelFilter.__init__(self, public=True)
self.int_field("id")
self.filter_field("author", AuthorFilter)
self.string_field("title")
@@ -26,15 +26,15 @@ class PostSort(Sort[Post]):
self.field("title", SortOrder)
self.field("content", SortOrder)
class PostGraphType(GraphType[Post]):
class PostGraphType(DbModelGraphType[Post]):
def __init__(self, authors: AuthorDao):
GraphType.__init__(self)
DbModelGraphType.__init__(self, public=True)
self.int_field(
"id",
resolver=lambda root: root.id,
).with_public(True)
).with_optional().with_public(True)
async def _a(root: Post):
return await authors.get_by_id(root.author_id)

View File

@@ -11,32 +11,32 @@ from cpl.graphql.schema.sort.sort_order import SortOrder
users = [User(i, f"User {i}") for i in range(1, 101)]
cities = [City(i, f"City {i}") for i in range(1, 101)]
class AuthUserFilter(Filter[AuthUser]):
def __init__(self):
Filter.__init__(self)
self.field("id", int)
self.field("username", str)
class AuthUserSort(Sort[AuthUser]):
def __init__(self):
Sort.__init__(self)
self.field("id", SortOrder)
self.field("username", SortOrder)
class AuthUserGraphType(GraphType[AuthUser]):
def __init__(self):
GraphType.__init__(self)
self.int_field(
"id",
resolver=lambda root: root.id,
)
self.string_field(
"username",
resolver=lambda root: root.username,
)
# class AuthUserFilter(Filter[AuthUser]):
# def __init__(self):
# Filter.__init__(self)
# self.field("id", int)
# self.field("username", str)
#
#
# class AuthUserSort(Sort[AuthUser]):
# def __init__(self):
# Sort.__init__(self)
# self.field("id", SortOrder)
# self.field("username", SortOrder)
#
# class AuthUserGraphType(GraphType[AuthUser]):
#
# def __init__(self):
# GraphType.__init__(self)
#
# self.int_field(
# "id",
# resolver=lambda root: root.id,
# )
# self.string_field(
# "username",
# resolver=lambda root: root.username,
# )
class HelloQuery(Query):
def __init__(self):
@@ -60,10 +60,10 @@ class HelloQuery(Query):
CitySort,
resolver=lambda: cities,
)
self.dao_collection_field(
AuthUserGraphType,
AuthUserDao,
"authUsers",
AuthUserFilter,
AuthUserSort,
)
# self.dao_collection_field(
# AuthUserGraphType,
# AuthUserDao,
# "authUsers",
# AuthUserFilter,
# AuthUserSort,
# )