Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

tartiflette-aiohttp is a wrapper of aiohttp which includes the Tartiflette GraphQL Engine, do not hesitate to take a look of the Tartiflette project.

License

NotificationsYou must be signed in to change notification settings

tartiflette/tartiflette-aiohttp

Repository files navigation

Tartiflette aiohttp

tartiflette-aiohttp is a wrapper ofaiohttp which includes the Tartiflette GraphQL Engine. You can take a look at theTartiflette API documentation.

Usage

# main.pyfromaiohttpimportwebfromtartifletteimportResolverfromtartiflette_aiohttpimportregister_graphql_handlers@Resolver("Query.hello")asyncdefresolver_hello(parent,args,ctx,info):return"hello "+args["name"]sdl="""    type Query {        hello(name: String): String    }"""web.run_app(register_graphql_handlers(web.Application(),engine_sdl=sdl    ))

Save the file and start the server.

$ python main.py======== Running on http://0.0.0.0:8080 ========(Press CTRL+C to quit)

Note: The server will be listening on the/graphql path by default.

Send a request to your server

curl -v -d '{"query": "query { hello(name: "Chuck") }"}' -H "Content-Type: application/json" http://localhost:8080/graphql

Installation

tartiflette-aiohttp is available onpypi.org.

WARNING: Do not forget to install thetartiflette dependencies beforehand as explained in the tutorial.

pip install tartiflette-aiohttp

How to use

Use with built-in Tartiflette Engine

The basic and common way to use Tartiflette withaiohttp, is to create anaiohttpweb.Application and use theregister_graphql_handlers helper to bind Tartiflette andaiohttp together.engine_* parameters will be forwarded to the built-intartiflette engine instance.

fromaiohttpimportwebfromtartiflette_aiohttpimportregister_graphql_handlerssdl="""    type Query {        hello(name: String): String    }"""ctx= {'user_service':user_service}web.run_app(register_graphql_handlers(app=web.Application(),engine_sdl=sdl,engine_schema_name="default",executor_context=ctx,executor_http_endpoint='/graphql',executor_http_methods=['POST','GET']    ))

Parameters:

  • engine_sdl: Contains theSchema Definition Language
    • Can be a string which contains the SDL
    • Can be an array of strings, which contain the SDLs
    • Can be a path to an SDL
    • Can be an array of paths which contain the SDLs
  • engine_schema_name: Name of the schema used by the built-in engine. Useful for advanced use-cases, seeSchema Registry API.
  • executor_context: Context which will be passed to each resolver (as a dict). Very useful for passing handlers to services, functions or data that you want to use in your resolvers. The context reference isunique per request, a shallow copy is created based on the context passed.
    • req: Request object fromaiohttp
    • app: Application object fromaiohttp
  • executor_http_endpoint: Endpoint where the GraphQL Engine will be attached, by default on/graphql
  • executor_http_methods: HTTP Methods where the GraphQL Engine will be attached, by default onPOST andGET.

Use with custom Tartiflette engine

In the case you already have a Tartiflette Engine instance, or, you do not want to use the built-in instance. You can pass an existing instance to theregister_graphql_handlers helper.

# main.pyfromaiohttpimportwebfromtartifletteimportResolver,Enginefromtartiflette_aiohttpimportregister_graphql_handlers@Resolver("Query.hello")asyncdefresolver_hello(parent,args,ctx,info):return"hello "+args["name"]sdl="""    type Query {        hello(name: String): String    }"""engine=Engine(sdl)ctx= {'user_service':user_service}web.run_app(register_graphql_handlers(app=web.Application(),engine=engine,executor_context=ctx,executor_http_endpoint='/graphql',executor_http_methods=['POST','GET']    ))

Parameters:

  • engine: an instance of the Tartiflette Engine
  • executor_context: Context which will be passed to each resolver (as a dict). Very useful for passing handlers to services, functions or data that you want to use in your resolvers.
    • req: Request object fromaiohttp
    • app: Application object fromaiohttp
  • executor_http_endpoint: Endpoint where the GraphQL Engine will be attached, by default on/graphql
  • executor_http_methods: HTTP Methods where the GraphQL Engine will be attached, by default onPOST andGET

Tartiflette with subscriptions

Tartiflette embeds an easy way to deal with subscriptions. The only thing to do isto fill in thesubscription_ws_endpoint parameter and everything will work outof the box withaiohttp WebSockets. You can see a full examplehere.

Enable GraphiQL handler

Tartiflette allows you to set up an instance of GraphiQL easily to quickly testyour queries. The easiest way to do that is to set thegraphiql_enabledparameter toTrue. Then, you can customize your GraphiQL instance by fillingthegraphiql_options parameter as bellow:

fromaiohttpimportwebfromtartiflette_aiohttpimportregister_graphql_handlers_SDL="""    type Query {        hello(name: String): String    }"""web.run_app(register_graphql_handlers(app=web.Application(),engine_sdl=_SDL,graphiql_enabled=True,graphiql_options={# This is optional"endpoint":"/explorer",# Default: `/graphiql`,"default_query":"""                query Hello($name: String) {                  hello(name: $name)                }            ""","default_variables": {"name":"Bob",            },"default_headers": {"Authorization":"Bearer <default_token>",            },        },    ))

Parameters:

  • engine_sdl: Contains theSchema Definition Language
    • Can be a string which contains the SDL
    • Can be an array of strings, which contain the SDLs
    • Can be a path to an SDL
    • Can be an array of paths which contain the SDLs
  • graphiql_enabled(Optional[bool] = False): Determines whether or not we should include a GraphiQL interface
  • graphiql_options(Optional[dict] = None): Customization options for the GraphiQL instance:
    • endpoint(Optional[str] = "/graphiql"): allows to customize the GraphiQL interface endpoint path
    • default_query(Optional[str] = None): allows you to pre-fill the GraphiQL interface with a default query
    • default_variables(Optional[dict] = None): allows you to pre-fill the GraphiQL interface with default variables
    • default_headers(Optional[dict] = None): allows you to add default headers to each request sent through the GraphiQL instance

Advance Use Case

Response header manipulation from resolver

It is possible to set header to the response directly from the resolver usingset_response_headers method like:

fromtartiflette_aiohttpimportset_response_headers@Resolver("Query.X")asyncdefresolver_x(parent_result,args,ctx,info):# do thingsset_response_headers({"Header":"Value","AnotherHeader":"AnotherValue"})returnresult

Note that this feature uses ContextVar and will only works for python 3.7.1 and later.

OR it is also possible to do, if you do not have ContextVar, or don't want to use them:

fromaiohttpimportwebdefa_callable(req,data,ctx):returnweb.json_response(data,headers=ctx["_any_custom_key"])web.run_app(register_graphql_handlers(app=web.Application(),engine_sdl=_SDL,response_formatter=a_callable    ))@Resolver("Type.field_name")asyncdeffiel_name_resolver(pr,args,ctx,info):ctx["_any_custom_key"]= {"X-Header":"What a wonderfull value"}returnsomething

About

tartiflette-aiohttp is a wrapper of aiohttp which includes the Tartiflette GraphQL Engine, do not hesitate to take a look of the Tartiflette project.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors7


[8]ページ先頭

©2009-2026 Movatter.jp