socketify.py/examples/graphiql_raw.py

61 wiersze
1.3 KiB
Python
Czysty Zwykły widok Historia

2022-11-15 13:17:09 +00:00
import dataclasses
import strawberry
import strawberry.utils.graphiql
from socketify import App
from typing import List, Optional
2022-11-16 19:28:46 +00:00
2022-11-15 13:17:09 +00:00
@strawberry.type
class User:
name: str
2022-11-16 19:28:46 +00:00
2022-11-15 13:17:09 +00:00
@strawberry.type
class Query:
@strawberry.field
def user(self) -> Optional[User]:
return User(name="Hello")
schema = strawberry.Schema(Query)
async def graphiql_post(res, req):
# we can pass whatever we want to context, query, headers or params, cookies etc
context_value = req.preserve()
2022-11-16 19:28:46 +00:00
# get all incoming data and parses as json
2022-11-15 13:17:09 +00:00
body = await res.get_json()
2022-11-16 19:28:46 +00:00
2022-11-15 13:17:09 +00:00
query = body["query"]
variables = body.get("variables", None)
root_value = body.get("root_value", None)
operation_name = body.get("operation_name", None)
data = await schema.execute(
query,
variables,
context_value,
root_value,
operation_name,
)
2022-11-16 19:28:46 +00:00
res.cork_end(
{
"data": (data.data),
**({"errors": data.errors} if data.errors else {}),
**({"extensions": data.extensions} if data.extensions else {}),
}
)
2022-11-15 13:17:09 +00:00
app = App()
app.get("/", lambda res, req: res.end(strawberry.utils.graphiql.get_graphiql_html()))
app.post("/", graphiql_post)
2022-11-16 19:28:46 +00:00
app.listen(
3000,
lambda config: print("Listening on port http://localhost:%d now\n" % config.port),
)
app.run()