{ "info": { "author": "Denis Ryzhkov", "author_email": "denisr@denisr.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Operating System :: POSIX :: Linux", "Operating System :: Unix", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3 :: Only", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "\n* `asyncio `_ - explicit concurrency `to reduce race conditions `_\n* `graphql `_ - all you need and nothing more in one request +auto docs of your api\n* `uvloop, protocol `_ - `top performance `_\n* minimal http - unlike REST frameworks that are waste of time for ``/graphql`` endpoint\n* pluggable context - for auth, logging, etc\n* exception handling - at all levels, with default or custom handler\n\n**Usage**::\n\n pip install aiographql\n\n cat <<'END' >serve.py\n import asyncio, aiographql, graphene\n\n class User(graphene.ObjectType):\n id = graphene.ID(required=True)\n name = graphene.String()\n\n class Query(graphene.ObjectType):\n me = graphene.Field(User)\n\n async def resolve_me(self, info):\n await asyncio.sleep(1) # DB\n return User(id=42, name='John')\n\n schema = graphene.Schema(query=Query, mutation=None)\n\n aiographql.serve(schema, listen=[\n dict(protocol='tcp', port=25100),\n dict(protocol='unix', path='/tmp/worker0'),\n ])\n END\n\n python3 serve.py\n\n curl http://localhost:25100/ --data-binary \\\n '{\"query\": \"{\n me {\n id\n name\n }\n }\", \"variables\": null}'\n\n # OR:\n curl --unix-socket /tmp/worker0 http:/ --data-binary ...\n\n # Result:\n # 1 second async await for DB and then:\n {\"data\":{\"me\":{\"id\":\"42\",\"name\":\"John\"}}}\n\nSee `more examples and tests `_ about JWT auth, concurrent slow DB queries, etc.\n\n**Config**::\n\n import aiographql; help(aiographql.serve)\n\n serve(schema, listen, get_context=None, exception_handler=None, enable_uvloop=True, run=True)\n Configure the stack and start serving requests\n\n* ``schema``: ``graphene.Schema`` - GraphQL schema to serve\n* ``listen``: ``list`` - one or more endpoints to listen for connections:\n\n * ``dict(protocol='tcp', port=25100, ...)`` - `create_server() docs `_\n * ``dict(protocol='unix', path='/tmp/worker0', ...)`` - `create_unix_server() docs `_\n\n* ``get_context``: ``None`` or ``[async] callable(loop, context: dict): mixed`` - to produce GraphQL context like auth from input unified with ``exception_handler()``\n* ``exception_handler``: ``None`` or ``callable(loop, context: dict)`` - default or custom exception handler as defined in `the docs `_ +\n\n * ``headers``: ``bytes`` or ``None`` - HTTP headers, if known\n * ``request``: ``dict`` or ``bytes`` or ``None`` - accumulated HTTP request before content length is known, then accumulated content, then GraphQL request\n\n* ``enable_uvloop``: ``bool`` - enable uvloop for top performance, unless you have a better loop\n* ``run``: ``bool`` - if ``True``, run the loop; ``False`` is good for tests\n* return ``servers``: ``Servers`` - ``await servers.close()`` to close listening sockets - good for tests\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/academicmerit/aiographql", "keywords": "asyncio graphql graphene uvloop", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "aiographql", "package_url": "https://pypi.org/project/aiographql/", "platform": "", "project_url": "https://pypi.org/project/aiographql/", "project_urls": { "Homepage": "https://github.com/academicmerit/aiographql" }, "release_url": "https://pypi.org/project/aiographql/0.2.1/", "requires_dist": [ "graphene (<3,>=2.0.1)", "graphql-core (<3,>=2.0)", "ujson (<2,>=1.35)", "uvloop (<1,>=0.9.1)" ], "requires_python": ">=3.5", "summary": "asyncio + graphql = fast and simple api", "version": "0.2.1" }, "last_serial": 3625717, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "c1e3172e5b8bd6e849f4c519b470e018", "sha256": "d5ed69f58055130f35bdf90ce830d6200e2ce360b8a10809573464ae4ae7bc37" }, "downloads": -1, "filename": "aiographql-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c1e3172e5b8bd6e849f4c519b470e018", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 8018, "upload_time": "2018-02-13T22:17:51", "url": "https://files.pythonhosted.org/packages/31/85/e0243cabc20123fbed7d716eaa1503ccfb9c3359549cff08d439c0d2a797/aiographql-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b5662c58e339d56ffc5a10c6578db127", "sha256": "942cefc027a2620399d6f97c9b750a27d46e0fb01617af3dbc71807a933fd05d" }, "downloads": -1, "filename": "aiographql-0.1.0.tar.gz", "has_sig": false, "md5_digest": "b5662c58e339d56ffc5a10c6578db127", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 6036, "upload_time": "2018-02-13T22:17:53", "url": "https://files.pythonhosted.org/packages/0d/26/5fa10be122e83c3924c4963bfd6fb7fd2714faf55cc1521e09ae94df44e4/aiographql-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "ccc319e387babcc17045ada758564536", "sha256": "e6af4d5f5b1d229d1ab0a8de33e4d0290a3368c5c90b09b94e4d217a50a616fa" }, "downloads": -1, "filename": "aiographql-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ccc319e387babcc17045ada758564536", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 8907, "upload_time": "2018-02-16T17:33:39", "url": "https://files.pythonhosted.org/packages/5d/a4/15087d1ad7378de90c8e16d1ee11b703ffe953c57134521447f3ea43ccfa/aiographql-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cd9320d33c1f6262622cb72c9a004483", "sha256": "3783b02ebfe3c4c1ee81dd2bd76283b1956cc96387a1161a59e844b7eafeff92" }, "downloads": -1, "filename": "aiographql-0.2.0.tar.gz", "has_sig": false, "md5_digest": "cd9320d33c1f6262622cb72c9a004483", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 6892, "upload_time": "2018-02-16T17:33:43", "url": "https://files.pythonhosted.org/packages/ba/b8/cad0a2b167b7f2397a8e6523754a036fd68a96ee234e6c93730b5c1ef994/aiographql-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "2506074007e7b5801b01a9bf4fb51e79", "sha256": "beee65a0e6e41ee0bd6b07d7b199423660d4e8b28886da4076530598e7abb182" }, "downloads": -1, "filename": "aiographql-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2506074007e7b5801b01a9bf4fb51e79", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 9043, "upload_time": "2018-02-28T15:57:40", "url": "https://files.pythonhosted.org/packages/93/d1/3c3909b1515717ceee036267d62562903cdd711423d07bf96d44eb8fc834/aiographql-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "528c96e3d9a32ebf4051e6f376270b71", "sha256": "654ce7d1215d27e60599472866e268aad3bac917b034fccdbe8c3271204425dc" }, "downloads": -1, "filename": "aiographql-0.2.1.tar.gz", "has_sig": false, "md5_digest": "528c96e3d9a32ebf4051e6f376270b71", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 7017, "upload_time": "2018-02-28T15:57:44", "url": "https://files.pythonhosted.org/packages/7e/e1/e8a3af90327fa5e21b6cedaa518fff3ffe1cace31344a0c38e381e18ab44/aiographql-0.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2506074007e7b5801b01a9bf4fb51e79", "sha256": "beee65a0e6e41ee0bd6b07d7b199423660d4e8b28886da4076530598e7abb182" }, "downloads": -1, "filename": "aiographql-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2506074007e7b5801b01a9bf4fb51e79", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 9043, "upload_time": "2018-02-28T15:57:40", "url": "https://files.pythonhosted.org/packages/93/d1/3c3909b1515717ceee036267d62562903cdd711423d07bf96d44eb8fc834/aiographql-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "528c96e3d9a32ebf4051e6f376270b71", "sha256": "654ce7d1215d27e60599472866e268aad3bac917b034fccdbe8c3271204425dc" }, "downloads": -1, "filename": "aiographql-0.2.1.tar.gz", "has_sig": false, "md5_digest": "528c96e3d9a32ebf4051e6f376270b71", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 7017, "upload_time": "2018-02-28T15:57:44", "url": "https://files.pythonhosted.org/packages/7e/e1/e8a3af90327fa5e21b6cedaa518fff3ffe1cace31344a0c38e381e18ab44/aiographql-0.2.1.tar.gz" } ] }