Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

aiographql

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

aiographql

asyncio + graphql = fast and simple api

  • 0.2.1
  • PyPI
  • Socket score

Maintainers
1
  • asyncio <https://docs.python.org/3/library/asyncio.html>_ - explicit concurrency to reduce race conditions <https://glyph.twistedmatrix.com/2014/02/unyielding.html>_
  • graphql <http://graphql.org/>_ - all you need and nothing more in one request +auto docs of your api
  • uvloop, protocol <https://github.com/MagicStack/uvloop#performance>_ - top performance <https://magic.io/blog/uvloop-blazing-fast-python-networking/>_
  • minimal http - unlike REST frameworks that are waste of time for /graphql endpoint
  • pluggable context - for auth, logging, etc
  • exception handling - at all levels, with default or custom handler

Usage::

pip install aiographql

cat <<'END' >serve.py
import asyncio, aiographql, graphene

class User(graphene.ObjectType):
    id = graphene.ID(required=True)
    name = graphene.String()

class Query(graphene.ObjectType):
    me = graphene.Field(User)

    async def resolve_me(self, info):
        await asyncio.sleep(1)  # DB
        return User(id=42, name='John')

schema = graphene.Schema(query=Query, mutation=None)

aiographql.serve(schema, listen=[
    dict(protocol='tcp', port=25100),
    dict(protocol='unix', path='/tmp/worker0'),
])
END

python3 serve.py

curl http://localhost:25100/ --data-binary \
'{"query": "{
    me {
        id
        name
    }
}", "variables": null}'

# OR:
curl --unix-socket /tmp/worker0 http:/ --data-binary ...

# Result:
# 1 second async await for DB and then:
{"data":{"me":{"id":"42","name":"John"}}}

See more examples and tests <https://github.com/academicmerit/aiographql/tree/master/tests>_ about JWT auth, concurrent slow DB queries, etc.

Config::

import aiographql; help(aiographql.serve)

serve(schema, listen, get_context=None, exception_handler=None, enable_uvloop=True, run=True)
    Configure the stack and start serving requests
  • schema: graphene.Schema - GraphQL schema to serve

  • listen: list - one or more endpoints to listen for connections:

    • dict(protocol='tcp', port=25100, ...) - create_server() docs <https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.AbstractEventLoop.create_server>_
    • dict(protocol='unix', path='/tmp/worker0', ...) - create_unix_server() docs <https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.AbstractEventLoop.create_unix_server>_
  • get_context: None or [async] callable(loop, context: dict): mixed - to produce GraphQL context like auth from input unified with exception_handler()

  • exception_handler: None or callable(loop, context: dict) - default or custom exception handler as defined in the docs <https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.AbstractEventLoop.set_exception_handler>_ +

    • headers: bytes or None - HTTP headers, if known
    • request: dict or bytes or None - accumulated HTTP request before content length is known, then accumulated content, then GraphQL request
  • enable_uvloop: bool - enable uvloop for top performance, unless you have a better loop

  • run: bool - if True, run the loop; False is good for tests

  • return servers: Servers - await servers.close() to close listening sockets - good for tests

Keywords

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc