{ "info": { "author": "Max Ponomarev", "author_email": "ponomarev1802@mail.ru", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.7", "Topic :: Internet :: WWW/HTTP" ], "description": "# GraphQL Facade\n\nGraphQL Facade is a python application-intermediary between a \nfrontend application using GraphQL and a REST application on the backend \noriented declarative style of the description of the services.\n\n## GraphQL Facade allow\n\n* make a requests to the REST service using GraphQL language\n* use batch loading (subject to the rules)\n\n## Adding new REST service to the Application\n\nTo add a new service, you need to perform several steps:\n\n1) create a description of the data schema in [graphql syntax](https://graphql.org/learn/)\n2) create [REST service description](#rest-service-description) (yaml or json supported)\n3) describe [resolvers](#resolvers) (yaml or json)\n4) add [schema description](#schemas-description) to main configuration file\n5) specify the Base Url of the service in the application settings\n\n## REST service description\n```\n: \n :\n method: \n path: \n```\n`service_name`: Name of your REST API service. \n`endpoint_name`: Name of your REST endpoint. \n`method`: GET, POST, PATCH, PUT, DELETE (GET default) \n`path`: path to yor endpoint\n\n## Resolvers\n```\n:\n endpoint: \n batch: True\n args:\n : \n loader: \n```\n`Parent_name.field_name`: field name in your graphql schema (`Query.name` for example) \n`endpoint`: your rest endpoint for this data field in `service_name`.`endpoint_name` format \n`loader`: path to custom resolver (not a required field). Use python site-packages syntax \n`args`: if you want to use any params to make request to REST you can set args field.\n`param_name` - an arbitrary name of the variable, `param_value` - arbitrary value.\nTo use the attributes of a parent element, use `parent.` the prefix and then the name of the attribute.\nfor examle `post_is: parent.id`\n`batch`: use [batch loading](#batch-loading). False by default \n\n## Schemas description\n```\nschemas:\n :\n url: \n resolvers: \n sdl:\n - \n - \n\nrest:\n - \n```\n`schema_name`: your schema name \n`url`: url to graphql endpoint (by default equal to schema name) \n`resolvers`: path (relative to base directory) to your resolvers file \n`sdl`: list of paths to `.graphql` files (schema descriptions) or directories with `.graphql` files \n`rest`: list of paths to rest definition files (relative to base directory) \n## REST App connection Example\nLet's say you have a REST service with signature:\nInput:\n```\n{\n id: [0, 1, 2],\n q: \"any search string\"\n}\n```\nOutput:\n```\n{\n \"pagination\": {\n \"total\": 0,\n \"offset\": 0,\n \"limit\": 0\n },\n \"result\": [\n {\n \"conditions\": {},\n \"calculator_id\": 0,\n \"version\": 0,\n \"created\": \"2019-08-29T09:09:23.048Z\",\n \"terms\": [\n 0\n ],\n \"status\": \"archive\",\n \"updated\": \"2019-08-29T09:09:23.048Z\",\n \"amounts\": [\n 0\n ],\n \"priority\": 0,\n \"title\": \"string\",\n \"meta\": {},\n \"id\": 0\n }\n ]\n}\n```\n\nfor connect your api to GraphQL facade follow that steps:\n\n### preview\n\nAs a result of all the steps we get the structure (files and directories that we will not use are omitted)\n\n```\n-app\n -graphql\n -calculator\n -sdl\n mutation.graphql\n query.graphql\n loaders.py\n resolvers.yaml\n rest.yaml\n ...\n init_facade.yaml\n ...\n...\n```\n`.graphql` files - description of your data schema \n`loaders.py` custom resolvers (if you need) \n`resolvers.yaml` description of resolvers \n`rest.yaml` description of rest api service \n`init_facade.yaml` description all schemas and file paths for schema \n\nthe file scheme is conditional and not mandatory but it is recommended to adhere to this rule of file location and naming\n\n### 1. describe data schema\n\nthe data schema describes data types and arguments\nfor our REST service it will have the following form\n\n###### app/graphql/calculator/sdl/query.graphql\n```\ntype Query {\n calculators(id: [Int], q: String): Calculators\n }\n\ntype Calculators{\n pagination: Pagination\n result: [Calculator]\n }\n\ntype Calculator {\n id: Int\n created: String\n updated: String\n calculator_id: Int\n status: String\n version: Int\n title: String\n amounts: [String]\n terms: [Int]\n meta: String\n priority: Int\n conditions: String\n }\n\ntype Pagination {\n total: Int\n limit: Int\n offset: Int\n }\n```\n\n### 2. REST service description\n\nREST description files contains information about paths to your REST handlers\n\nfor our API:\n\n###### app/graphql/calculator/rest.json\n```\n{\n \"calculator\": {\n \"find_calculators\": {\n \"method\": \"GET\",\n \"path\": \"/api/v1/pdl_calculators/\"\n }\n}\n```\n### 3. describe resolvers\n\nResolvers files explain how to receive Schema fields \n(which REST handler to use, whether to use bath loading or smth else)\n\n###### app/graphql/calculator/resolvers.json\n```\n{\n \"Query.calculators\": {\n \"endpoint\": \"calculator.find_calculators\"\n }\n}\n```\n### 4. main configuration file\n###### app/init_facade.yaml\nConfiguration file describe file location for our schema\n```\nschemas:\n\n calculator:\n url: calculator\n resolvers: app/graphql/calculator/resolvers\n sdl:\n - app/graphql/calculator/sdl\n\nrest:\n - app/graphql/calculator/rest\n\n```\n### 5. base url to config\nIt is important not to forget to specify URLs in the application settings\nWe do not specify base_url in yaml or json files to be able to pass base_url as environment variables\n\nKey must match to REST service name in rest.yaml file\n###### settings/config.py\n```\nclass Config:\n...\n BASE_URLS = {\n ...\n 'calculator': env.str('calculator_api', default='http:/calculator.prod.com')\n ...\n }\n...\n```\n## Batch loading\n\nFor use batch loading you must follow few simple rules:\n* REST API endpoint must accept a list of `id` arguments\n* REST must return list of records (which perform a conditions of a request) in `result` field and send `id` field to each row \nfor example:\n```\n{\n \"pagination\": {\n \"total\": 2,\n \"limit\": 10,\n \"offset\": 0\n },\n \"result\": [\n {\n \"id\": 1\n },\n {\n \"id\": 2\n }\n ],\n \"success\": true\n}\n```\n* finally set `batch` = `True` in your fields resolver description:\n```\nCalculator.calculator:\n endpoint: /api/v1/calculator\n batch: True\n```\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/lazy-labs/bff-graphql", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "gql-ext", "package_url": "https://pypi.org/project/gql-ext/", "platform": "", "project_url": "https://pypi.org/project/gql-ext/", "project_urls": { "Homepage": "https://github.com/lazy-labs/bff-graphql" }, "release_url": "https://pypi.org/project/gql-ext/0.0.13/", "requires_dist": [ "aiodataloader (==0.1.2)", "aiohttp (==3.5.4)", "pyyaml (==5.1.2)", "tartiflette (==0.12.4)", "ujson (==1.35)", "asyncpg (==0.18.3)" ], "requires_python": ">=3.7", "summary": "The web framework", "version": "0.0.13" }, "last_serial": 5959679, "releases": { "0.0.10": [ { "comment_text": "", "digests": { "md5": "215a9499aabf44f7560eb70ab579493b", "sha256": "9be4f9ba10f8ad64b5e69f14ee7c5f5592ee3f2aa3ceb28bd8f37de89578eec2" }, "downloads": -1, "filename": "gql_ext-0.0.10-py3-none-any.whl", "has_sig": false, "md5_digest": "215a9499aabf44f7560eb70ab579493b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 20022, "upload_time": "2019-10-03T15:40:55", "url": "https://files.pythonhosted.org/packages/c6/9e/f6bef1a7f6b8570361c2e93b03c97c6c388d118b547f270cc47fff122878/gql_ext-0.0.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3d9a76418a74dcfa68c0dc8445bc309b", "sha256": "6b3a9f444932668a6f7184f024e1c9ba59badd2ee430041c6e5d257129ba56b0" }, "downloads": -1, "filename": "gql_ext-0.0.10.tar.gz", "has_sig": false, "md5_digest": "3d9a76418a74dcfa68c0dc8445bc309b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 18525, "upload_time": "2019-10-03T15:40:58", "url": "https://files.pythonhosted.org/packages/a4/80/5a7cf1af313da713982cbb389aadb5226d7a529c8e0d046bc6d802a2dda4/gql_ext-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "d896caca36030507eac0227067c12f84", "sha256": "ed2b83308f548a29d5b60762900b9827e5d8dbd599501ef118c5b452dbbba436" }, "downloads": -1, "filename": "gql_ext-0.0.11-py3-none-any.whl", "has_sig": false, "md5_digest": "d896caca36030507eac0227067c12f84", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 20046, "upload_time": "2019-10-10T08:46:22", "url": "https://files.pythonhosted.org/packages/23/3d/cb18f79598628c4c5f7bb3b2743a1bf255c0c46a4efb895f6cf9a2fd0fc1/gql_ext-0.0.11-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ea223b84bfea29808e7946bb38cb7439", "sha256": "9f0ec742a411b787f4cbc09f4130d1af1e34c6775a0be93716987d7d168f429e" }, "downloads": -1, "filename": "gql_ext-0.0.11.tar.gz", "has_sig": false, "md5_digest": "ea223b84bfea29808e7946bb38cb7439", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 18556, "upload_time": "2019-10-10T08:46:24", "url": "https://files.pythonhosted.org/packages/a7/08/3c41f66595113faa73dcb359b5c5a310f68efaa5e098358cf543b822182f/gql_ext-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "4fb1dedbdd0224c0c086264955498f94", "sha256": "04dbaa88f7e1efbc69b21cd18a272bf7b68fa463e244b71ab0d67ebdc4165349" }, "downloads": -1, "filename": "gql_ext-0.0.12-py3-none-any.whl", "has_sig": false, "md5_digest": "4fb1dedbdd0224c0c086264955498f94", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 20260, "upload_time": "2019-10-11T10:13:53", "url": "https://files.pythonhosted.org/packages/0d/2c/5cabf5d6023cfaa33a5606f286bc62297ff446429970e0bdd18374bc8565/gql_ext-0.0.12-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fd4e8a337dca437de5bbb6b5dab0c037", "sha256": "c08f38483d9ddd718d5c61782e6a39cd7b1e3489840aa1c62baedd813b0da661" }, "downloads": -1, "filename": "gql_ext-0.0.12.tar.gz", "has_sig": false, "md5_digest": "fd4e8a337dca437de5bbb6b5dab0c037", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 18720, "upload_time": "2019-10-11T10:13:55", "url": "https://files.pythonhosted.org/packages/9c/e3/b2e103dc4e5aac7144366a42f905ebedf4e4195956ac61fc761b08595635/gql_ext-0.0.12.tar.gz" } ], "0.0.13": [ { "comment_text": "", "digests": { "md5": "04fd0b825f2dc63907ff518e00b3c3b3", "sha256": "fa71cf1377c686c11212aa9dc06e09fcd87f7a95a01ac17cc02b63df162de3f0" }, "downloads": -1, "filename": "gql_ext-0.0.13-py3-none-any.whl", "has_sig": false, "md5_digest": "04fd0b825f2dc63907ff518e00b3c3b3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 20255, "upload_time": "2019-10-11T10:32:30", "url": "https://files.pythonhosted.org/packages/4c/8d/3dc850be9cb60cdce920e673d872b164ddec08ae4732e80f7c16530f387e/gql_ext-0.0.13-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ae297808913a981024c697d105ce2e2", "sha256": "2b2880ff085f080e150a15d2d2f81e400ce37ace34208bf854d70f4ddce59677" }, "downloads": -1, "filename": "gql_ext-0.0.13.tar.gz", "has_sig": false, "md5_digest": "8ae297808913a981024c697d105ce2e2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 18694, "upload_time": "2019-10-11T10:32:32", "url": "https://files.pythonhosted.org/packages/32/6d/56df19ba93f23cd8fd493a9fc6d7ff799273a0fe8c2bed92831a6579f672/gql_ext-0.0.13.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "fe7dc97f4f34bceb18049c069183bb34", "sha256": "5323981d65ee9e7e20fd93e829fee51e1a66231fbd0effb7864e5c734acee276" }, "downloads": -1, "filename": "gql_ext-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "fe7dc97f4f34bceb18049c069183bb34", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 17283, "upload_time": "2019-09-20T22:25:52", "url": "https://files.pythonhosted.org/packages/60/64/9aacc51793a3a3da12c2be20cea4d4c3fc8512b53dc190048b0ca60a2fba/gql_ext-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e193e02f5cb5f3f64389a0f1fd485511", "sha256": "eedf373ad3ea8edb5107ba638cb5fb1a0c007f42fa6feeef00e81c4cd607581c" }, "downloads": -1, "filename": "gql_ext-0.0.2.tar.gz", "has_sig": false, "md5_digest": "e193e02f5cb5f3f64389a0f1fd485511", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 16084, "upload_time": "2019-09-20T22:25:53", "url": "https://files.pythonhosted.org/packages/da/f1/6789f85f48e4215a413696148698ec0d5bb2e1548bfaad963716e0c1bf37/gql_ext-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "988ac68194a1af7c506cb94df024c446", "sha256": "6085262c8892278f66724f7e96705e98ea24f66f128c4da47ae14a9a046a39bd" }, "downloads": -1, "filename": "gql_ext-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "988ac68194a1af7c506cb94df024c446", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 17273, "upload_time": "2019-09-20T22:41:09", "url": "https://files.pythonhosted.org/packages/2e/5d/acd5b51a756b3bc80a5f45340bc9fea27c0de193245148549dfaf250d75b/gql_ext-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "19bc3d719d9205b9eaedb36deea29377", "sha256": "434148fdf9cf661561bc0a06c4b4ede9c79f770fcaa234c1c567814ebabbd5d3" }, "downloads": -1, "filename": "gql_ext-0.0.3.tar.gz", "has_sig": false, "md5_digest": "19bc3d719d9205b9eaedb36deea29377", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 16098, "upload_time": "2019-09-20T22:41:11", "url": "https://files.pythonhosted.org/packages/b5/97/24def80d70e860a4f75ba481f38fb0993ca24ae3c6e84110c2d75f5e98c6/gql_ext-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "90faee82edf660cb06163d4fc61ad791", "sha256": "3cd085a5f7f2c15b781c590b634cacbfb6fe7557c608086181f24c57d043064f" }, "downloads": -1, "filename": "gql_ext-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "90faee82edf660cb06163d4fc61ad791", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 19711, "upload_time": "2019-09-20T23:17:34", "url": "https://files.pythonhosted.org/packages/0f/02/fd4e1e9a8ab4331d8401d546657786ddfcbb3e42ff92afb18b8ebdbba1fd/gql_ext-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "359b4b0e63d143f73f045662fd764da4", "sha256": "949d5e9a0a7efc15f074614c49c5975e914519ff66f808ac619c8b09ded93a2c" }, "downloads": -1, "filename": "gql_ext-0.0.4.tar.gz", "has_sig": false, "md5_digest": "359b4b0e63d143f73f045662fd764da4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 18274, "upload_time": "2019-09-20T23:17:36", "url": "https://files.pythonhosted.org/packages/d4/24/687ee404e8e8c8b3324e29c6efdc2216025add6370e761b16b758216b86e/gql_ext-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "50258f576879d918f6df726e94643008", "sha256": "1a2aa966075a61b0173c2b5d6b5a44740dc657742301dde30962d3fe0f26ddca" }, "downloads": -1, "filename": "gql_ext-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "50258f576879d918f6df726e94643008", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 19956, "upload_time": "2019-09-26T14:54:34", "url": "https://files.pythonhosted.org/packages/d4/3b/4309b952079d981caa6cc1a6bb687e036568e0774cf8becfa7ec6d80c1f7/gql_ext-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "801a1e2195292ffe4f584440ecf73781", "sha256": "1bd19a8275bfc978be54c6e5bd2f0f564ffe299d9436f5ec8ffbaca944338309" }, "downloads": -1, "filename": "gql_ext-0.0.5.tar.gz", "has_sig": false, "md5_digest": "801a1e2195292ffe4f584440ecf73781", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 18461, "upload_time": "2019-09-26T14:54:36", "url": "https://files.pythonhosted.org/packages/5f/4f/f0ee5a12bcf61a38456ea4b5ffc1a52ff49e98aa5a143b217b17e8602443/gql_ext-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "b32bb481355c0cb28da163030bac9263", "sha256": "d08d64ea77df07ba8c0bc435445c6d13dd1a644e602c630ccf5cc3ddcfb1d481" }, "downloads": -1, "filename": "gql_ext-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "b32bb481355c0cb28da163030bac9263", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 19992, "upload_time": "2019-09-26T15:27:37", "url": "https://files.pythonhosted.org/packages/7e/ca/afb5729a3884a38e405792e39cac2108a43c50172cc79a31ec39983290b2/gql_ext-0.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a7dbcdfda2541265028caf3aa5a695ed", "sha256": "fabfe1c8c8c0801271aa72cebbe9f769b43086aaf47e6c45a8527a2ef69c92f2" }, "downloads": -1, "filename": "gql_ext-0.0.6.tar.gz", "has_sig": false, "md5_digest": "a7dbcdfda2541265028caf3aa5a695ed", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 18490, "upload_time": "2019-09-26T15:27:38", "url": "https://files.pythonhosted.org/packages/6f/b7/a711aeb8ca14da208bc517b8e02e29b4a9b16fe8a59e0c48dc5971005f3c/gql_ext-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "70b4c946e4bdf38f4bb7e97b9a3fd78f", "sha256": "ce1e00f416b41fd6cc7bfadcc7e96a3e16d868640f1b4689cba7841143ce0c8a" }, "downloads": -1, "filename": "gql_ext-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "70b4c946e4bdf38f4bb7e97b9a3fd78f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 19986, "upload_time": "2019-09-26T15:31:24", "url": "https://files.pythonhosted.org/packages/b3/8f/6b176ee5e75a63dcdaa84b2f052033d40bec704cbaf3ba8820c16ab9ae5e/gql_ext-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0bb8d68646483637dc21bebb5818822f", "sha256": "637e350103e8bf08f1321aa067bd2ab37314699a0a1ea49c145b5e0d22edeef0" }, "downloads": -1, "filename": "gql_ext-0.0.7.tar.gz", "has_sig": false, "md5_digest": "0bb8d68646483637dc21bebb5818822f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 18491, "upload_time": "2019-09-26T15:31:26", "url": "https://files.pythonhosted.org/packages/71/5a/db06f421c6df5b50689e022c8f3819929df62677861cb82c7922812c6bb6/gql_ext-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "e199fa5b1f35113fbc648f9a0a6a5a77", "sha256": "e41b608df9162e6a1e4daf35cbad478e5d6b1bb2809e442a57b7e773b762c3af" }, "downloads": -1, "filename": "gql_ext-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "e199fa5b1f35113fbc648f9a0a6a5a77", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 20002, "upload_time": "2019-10-03T08:54:31", "url": "https://files.pythonhosted.org/packages/40/f9/a470218033fca18bd93bf901a031f9c344287e9a4a3174855bfe27b05529/gql_ext-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ce5b46c82a08a12f7e0d550118f15a73", "sha256": "728e9d598f7207dce5c1d9dc8694efb51a2aeec6079f79cb487b7d91e6810949" }, "downloads": -1, "filename": "gql_ext-0.0.8.tar.gz", "has_sig": false, "md5_digest": "ce5b46c82a08a12f7e0d550118f15a73", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 18511, "upload_time": "2019-10-03T08:54:33", "url": "https://files.pythonhosted.org/packages/de/81/1742a67f4b84636fc99f4af99354512517143620fbb8fb8c720e680614dd/gql_ext-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "1ab52fc67a5df3a614e3b24f5486c3d9", "sha256": "12285cdfe275bff504007366d37b6b6632ee533535783df82ef444eb7f71fc98" }, "downloads": -1, "filename": "gql_ext-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "1ab52fc67a5df3a614e3b24f5486c3d9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 20006, "upload_time": "2019-10-03T09:34:21", "url": "https://files.pythonhosted.org/packages/ea/fd/866223154d04ff9d54a2583c14b84f097a93ff3714c8ae2dba7fa414cd9c/gql_ext-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "84a1bda3d3ac34b04c65bc636e05932b", "sha256": "6ef1983c81af4e72e9cf6ae5e81655a925b201c001c597679341adfbfcdb25d3" }, "downloads": -1, "filename": "gql_ext-0.0.9.tar.gz", "has_sig": false, "md5_digest": "84a1bda3d3ac34b04c65bc636e05932b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 18514, "upload_time": "2019-10-03T09:34:23", "url": "https://files.pythonhosted.org/packages/63/48/e831960e9b8a1690f334c0ca0ccd86ad4f0cc7fd9e508f92a96604907868/gql_ext-0.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "04fd0b825f2dc63907ff518e00b3c3b3", "sha256": "fa71cf1377c686c11212aa9dc06e09fcd87f7a95a01ac17cc02b63df162de3f0" }, "downloads": -1, "filename": "gql_ext-0.0.13-py3-none-any.whl", "has_sig": false, "md5_digest": "04fd0b825f2dc63907ff518e00b3c3b3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 20255, "upload_time": "2019-10-11T10:32:30", "url": "https://files.pythonhosted.org/packages/4c/8d/3dc850be9cb60cdce920e673d872b164ddec08ae4732e80f7c16530f387e/gql_ext-0.0.13-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ae297808913a981024c697d105ce2e2", "sha256": "2b2880ff085f080e150a15d2d2f81e400ce37ace34208bf854d70f4ddce59677" }, "downloads": -1, "filename": "gql_ext-0.0.13.tar.gz", "has_sig": false, "md5_digest": "8ae297808913a981024c697d105ce2e2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 18694, "upload_time": "2019-10-11T10:32:32", "url": "https://files.pythonhosted.org/packages/32/6d/56df19ba93f23cd8fd493a9fc6d7ff799273a0fe8c2bed92831a6579f672/gql_ext-0.0.13.tar.gz" } ] }