├── .gitignore ├── .vscode └── extensions.json ├── 01-basics-final └── example.py ├── 01-basics └── example.py ├── 02-object-types-final └── example.py ├── 02-object-types └── example.py ├── 03-django ├── example │ ├── __init__.py │ ├── graphql.py │ ├── settings.py │ ├── urls.py │ ├── views.py │ └── wsgi.py └── manage.py ├── 04-django-channels ├── example │ ├── __init__.py │ ├── graphql.py │ ├── routing.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py ├── LICENSE ├── README.md ├── poetry.lock ├── pyproject.toml └── requirements.txt /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/_build/ 68 | 69 | # PyBuilder 70 | target/ 71 | 72 | # Jupyter Notebook 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # celery beat schedule file 79 | celerybeat-schedule 80 | 81 | # SageMath parsed files 82 | *.sage.py 83 | 84 | # Environments 85 | .env 86 | .venv 87 | env/ 88 | venv/ 89 | ENV/ 90 | env.bak/ 91 | venv.bak/ 92 | 93 | # Spyder project settings 94 | .spyderproject 95 | .spyproject 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "apollographql.vscode-apollo", 4 | "ms-python.python" 5 | ] 6 | } -------------------------------------------------------------------------------- /01-basics-final/example.py: -------------------------------------------------------------------------------- 1 | """Example 01: The Basics. 2 | 3 | Run with:: 4 | 5 | $ uvicorn example:app 6 | """ 7 | from ariadne import MutationType, QueryType, gql, make_executable_schema 8 | from ariadne.asgi import GraphQL 9 | 10 | # This is our schema 11 | type_defs = gql( 12 | """ 13 | type Query { 14 | hello: String! 15 | } 16 | 17 | type Mutation { 18 | add(a: Int!, b: Int!): Int! 19 | } 20 | """ 21 | ) 22 | 23 | query = QueryType() # our Query type 24 | mutation = MutationType() # our Mutation type 25 | 26 | 27 | @query.field("hello") # Query.hello 28 | def resolve_hello(*_): 29 | return "Hello DjangoCon!" 30 | 31 | 32 | @mutation.field("add") # Mutation.add 33 | def resolve_add(*_, a: int, b: int): 34 | return a + b 35 | 36 | 37 | # Create an executable GraphQL schema 38 | schema = make_executable_schema(type_defs, [query, mutation]) 39 | 40 | # Create the ASGI app 41 | app = GraphQL(schema, debug=True) 42 | -------------------------------------------------------------------------------- /01-basics/example.py: -------------------------------------------------------------------------------- 1 | """Example 01: The Basics. 2 | 3 | Run with:: 4 | 5 | $ uvicorn example:app 6 | """ 7 | from ariadne import gql, make_executable_schema 8 | from ariadne.asgi import GraphQL 9 | 10 | # This is our schema 11 | type_defs = gql( 12 | """ 13 | type Query { 14 | hello: String! 15 | } 16 | """ 17 | ) 18 | 19 | # Create an executable GraphQL schema 20 | schema = make_executable_schema(type_defs, []) 21 | 22 | # Create the ASGI app 23 | app = GraphQL(schema, debug=True) 24 | -------------------------------------------------------------------------------- /02-object-types-final/example.py: -------------------------------------------------------------------------------- 1 | """Example 02: Object Types. 2 | 3 | Run with:: 4 | 5 | $ uvicorn example:app 6 | """ 7 | from ariadne import ObjectType, QueryType, gql, make_executable_schema 8 | from ariadne.asgi import GraphQL 9 | 10 | # This is our schema 11 | type_defs = gql( 12 | """ 13 | type Book { 14 | title: String! 15 | year: Int! 16 | age: Int! 17 | } 18 | 19 | type Query { 20 | books: [Book!]! 21 | } 22 | """ 23 | ) 24 | 25 | query = QueryType() # our Query type 26 | 27 | 28 | @query.field("books") # Query.books 29 | def resolve_books(*_): 30 | return [ 31 | {"title": "The Color of Magic", "year": 1983}, 32 | {"title": "The Light Fantastic", "year": 1986}, 33 | {"title": "Equal Rites", "year": 1987}, 34 | ] 35 | 36 | 37 | book = ObjectType("Book") 38 | 39 | 40 | @book.field("age") 41 | def resolve_book_age(book, *_): 42 | return 2019 - book["year"] 43 | 44 | 45 | # Create an executable GraphQL schema 46 | schema = make_executable_schema(type_defs, [query, book]) 47 | 48 | # Create the ASGI app 49 | app = GraphQL(schema, debug=True) 50 | -------------------------------------------------------------------------------- /02-object-types/example.py: -------------------------------------------------------------------------------- 1 | """Example 02: Object Types. 2 | 3 | Run with:: 4 | 5 | $ uvicorn example:app 6 | """ 7 | from ariadne import ObjectType, QueryType, gql, make_executable_schema 8 | from ariadne.asgi import GraphQL 9 | 10 | # This is our schema 11 | type_defs = gql( 12 | """ 13 | type Book { 14 | title: String! 15 | year: Int! 16 | } 17 | 18 | type Query { 19 | books: [Book!]! 20 | } 21 | """ 22 | ) 23 | 24 | query = QueryType() # our Query type 25 | 26 | 27 | @query.field("books") # Query.books 28 | def resolve_books(*_): 29 | return [ 30 | {"title": "The Color of Magic", "year": 1983}, 31 | {"title": "The Light Fantastic", "year": 1986}, 32 | {"title": "Equal Rites", "year": 1987}, 33 | ] 34 | 35 | 36 | # Create an executable GraphQL schema 37 | schema = make_executable_schema(type_defs, [query]) 38 | 39 | # Create the ASGI app 40 | app = GraphQL(schema, debug=True) 41 | -------------------------------------------------------------------------------- /03-django/example/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mirumee/graphql-workshop/353bd11ba654975a727a1e1d657080e28a377c1c/03-django/example/__init__.py -------------------------------------------------------------------------------- /03-django/example/graphql.py: -------------------------------------------------------------------------------- 1 | from ariadne import gql, make_executable_schema 2 | 3 | # This is our schema 4 | type_defs = gql( 5 | """ 6 | type Query { 7 | hello: String! 8 | } 9 | """ 10 | ) 11 | 12 | # Create an executable GraphQL schema 13 | schema = make_executable_schema(type_defs, []) 14 | -------------------------------------------------------------------------------- /03-django/example/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for example project. 3 | 4 | Generated by 'django-admin startproject' using Django 2.2. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/2.2/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/2.2/ref/settings/ 11 | """ 12 | 13 | import os 14 | 15 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 16 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = '3=%q(gxqy5+@zq)w6i9(@t5ihc4977#ke27qss+ex#6uj0t0ni' 24 | 25 | # SECURITY WARNING: don't run with debug turned on in production! 26 | DEBUG = True 27 | 28 | ALLOWED_HOSTS = [] 29 | 30 | 31 | # Application definition 32 | 33 | INSTALLED_APPS = [ 34 | 'django.contrib.admin', 35 | 'django.contrib.auth', 36 | 'django.contrib.contenttypes', 37 | 'django.contrib.sessions', 38 | 'django.contrib.messages', 39 | 'django.contrib.staticfiles', 40 | ] 41 | 42 | MIDDLEWARE = [ 43 | 'django.middleware.security.SecurityMiddleware', 44 | 'django.contrib.sessions.middleware.SessionMiddleware', 45 | 'django.middleware.common.CommonMiddleware', 46 | 'django.middleware.csrf.CsrfViewMiddleware', 47 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 48 | 'django.contrib.messages.middleware.MessageMiddleware', 49 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 50 | ] 51 | 52 | ROOT_URLCONF = 'example.urls' 53 | 54 | TEMPLATES = [ 55 | { 56 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 57 | 'DIRS': [], 58 | 'APP_DIRS': True, 59 | 'OPTIONS': { 60 | 'context_processors': [ 61 | 'django.template.context_processors.debug', 62 | 'django.template.context_processors.request', 63 | 'django.contrib.auth.context_processors.auth', 64 | 'django.contrib.messages.context_processors.messages', 65 | ], 66 | }, 67 | }, 68 | ] 69 | 70 | WSGI_APPLICATION = 'example.wsgi.application' 71 | 72 | 73 | # Database 74 | # https://docs.djangoproject.com/en/2.2/ref/settings/#databases 75 | 76 | DATABASES = { 77 | # 'default': { 78 | # 'ENGINE': 'django.db.backends.sqlite3', 79 | # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 80 | # } 81 | } 82 | 83 | 84 | # Password validation 85 | # https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators 86 | 87 | AUTH_PASSWORD_VALIDATORS = [ 88 | { 89 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 90 | }, 91 | { 92 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 93 | }, 94 | { 95 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 96 | }, 97 | { 98 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 99 | }, 100 | ] 101 | 102 | 103 | # Internationalization 104 | # https://docs.djangoproject.com/en/2.2/topics/i18n/ 105 | 106 | LANGUAGE_CODE = 'en-us' 107 | 108 | TIME_ZONE = 'UTC' 109 | 110 | USE_I18N = True 111 | 112 | USE_L10N = True 113 | 114 | USE_TZ = True 115 | 116 | 117 | # Static files (CSS, JavaScript, Images) 118 | # https://docs.djangoproject.com/en/2.2/howto/static-files/ 119 | 120 | STATIC_URL = '/static/' 121 | -------------------------------------------------------------------------------- /03-django/example/urls.py: -------------------------------------------------------------------------------- 1 | """example URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/2.2/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.contrib import admin 17 | from django.urls import path 18 | 19 | from .views import graphql_view 20 | 21 | urlpatterns = [ 22 | path('admin/', admin.site.urls), 23 | path('graphql/', graphql_view) 24 | ] 25 | -------------------------------------------------------------------------------- /03-django/example/views.py: -------------------------------------------------------------------------------- 1 | import json 2 | from ariadne import graphql_sync 3 | from ariadne.constants import PLAYGROUND_HTML 4 | from django.conf import settings 5 | from django.http import HttpResponse, HttpResponseBadRequest, JsonResponse 6 | from django.views.decorators.csrf import csrf_exempt 7 | 8 | from .graphql import schema 9 | 10 | 11 | @csrf_exempt 12 | def graphql_view(request): 13 | if request.method == "GET": 14 | return HttpResponse(PLAYGROUND_HTML) 15 | 16 | if request.method != "POST": 17 | return HttpResponseBadRequest() 18 | 19 | if request.content_type != "application/json": 20 | return HttpResponseBadRequest() 21 | 22 | try: 23 | data = json.loads(request.body) 24 | except ValueError: 25 | return HttpResponseBadRequest() 26 | 27 | # Execute the query 28 | success, result = graphql_sync( 29 | schema, 30 | data, 31 | context_value=request, # expose request as info.context 32 | debug=settings.DEBUG, 33 | ) 34 | 35 | status_code = 200 if success else 400 36 | # Send response to client 37 | return JsonResponse(result, status=status_code) 38 | -------------------------------------------------------------------------------- /03-django/example/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for example project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'example.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /03-django/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | 6 | 7 | def main(): 8 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'example.settings') 9 | try: 10 | from django.core.management import execute_from_command_line 11 | except ImportError as exc: 12 | raise ImportError( 13 | "Couldn't import Django. Are you sure it's installed and " 14 | "available on your PYTHONPATH environment variable? Did you " 15 | "forget to activate a virtual environment?" 16 | ) from exc 17 | execute_from_command_line(sys.argv) 18 | 19 | 20 | if __name__ == '__main__': 21 | main() 22 | -------------------------------------------------------------------------------- /04-django-channels/example/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mirumee/graphql-workshop/353bd11ba654975a727a1e1d657080e28a377c1c/04-django-channels/example/__init__.py -------------------------------------------------------------------------------- /04-django-channels/example/graphql.py: -------------------------------------------------------------------------------- 1 | from ariadne import gql, make_executable_schema 2 | 3 | # This is our schema 4 | type_defs = gql( 5 | """ 6 | type Query { 7 | hello: String! 8 | } 9 | """ 10 | ) 11 | 12 | # Create an executable GraphQL schema 13 | schema = make_executable_schema(type_defs, []) 14 | -------------------------------------------------------------------------------- /04-django-channels/example/routing.py: -------------------------------------------------------------------------------- 1 | from ariadne.asgi import GraphQL 2 | from channels.http import AsgiHandler 3 | from channels.routing import ProtocolTypeRouter, URLRouter 4 | from django.urls import path 5 | 6 | from .graphql import schema 7 | 8 | 9 | graphql_server = GraphQL(schema, debug=True) 10 | 11 | application = ProtocolTypeRouter({ 12 | 'http': URLRouter([ 13 | path("graphql/", graphql_server), 14 | path("", AsgiHandler) 15 | ]), 16 | 'websocket': URLRouter([ 17 | path("graphql/", graphql_server), 18 | ]) 19 | }) 20 | -------------------------------------------------------------------------------- /04-django-channels/example/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for example project. 3 | 4 | Generated by 'django-admin startproject' using Django 2.2. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/2.2/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/2.2/ref/settings/ 11 | """ 12 | 13 | import os 14 | 15 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 16 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = 'ro@y(4x4he1h@2uoamqw!=)tj+o*dwyfrc(4ammj1o7y5e36(=' 24 | 25 | # SECURITY WARNING: don't run with debug turned on in production! 26 | DEBUG = True 27 | 28 | ALLOWED_HOSTS = [] 29 | 30 | 31 | # Application definition 32 | 33 | INSTALLED_APPS = [ 34 | 'django.contrib.admin', 35 | 'django.contrib.auth', 36 | 'django.contrib.contenttypes', 37 | 'django.contrib.sessions', 38 | 'django.contrib.messages', 39 | 'django.contrib.staticfiles', 40 | 'channels', 41 | ] 42 | 43 | MIDDLEWARE = [ 44 | 'django.middleware.security.SecurityMiddleware', 45 | 'django.contrib.sessions.middleware.SessionMiddleware', 46 | 'django.middleware.common.CommonMiddleware', 47 | 'django.middleware.csrf.CsrfViewMiddleware', 48 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 49 | 'django.contrib.messages.middleware.MessageMiddleware', 50 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 51 | ] 52 | 53 | ROOT_URLCONF = 'example.urls' 54 | 55 | TEMPLATES = [ 56 | { 57 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 58 | 'DIRS': [], 59 | 'APP_DIRS': True, 60 | 'OPTIONS': { 61 | 'context_processors': [ 62 | 'django.template.context_processors.debug', 63 | 'django.template.context_processors.request', 64 | 'django.contrib.auth.context_processors.auth', 65 | 'django.contrib.messages.context_processors.messages', 66 | ], 67 | }, 68 | }, 69 | ] 70 | 71 | WSGI_APPLICATION = 'example.wsgi.application' 72 | 73 | 74 | # Database 75 | # https://docs.djangoproject.com/en/2.2/ref/settings/#databases 76 | 77 | DATABASES = { 78 | # 'default': { 79 | # 'ENGINE': 'django.db.backends.sqlite3', 80 | # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 81 | # } 82 | } 83 | 84 | 85 | # Password validation 86 | # https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators 87 | 88 | AUTH_PASSWORD_VALIDATORS = [ 89 | { 90 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 91 | }, 92 | { 93 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 94 | }, 95 | { 96 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 97 | }, 98 | { 99 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 100 | }, 101 | ] 102 | 103 | 104 | # Internationalization 105 | # https://docs.djangoproject.com/en/2.2/topics/i18n/ 106 | 107 | LANGUAGE_CODE = 'en-us' 108 | 109 | TIME_ZONE = 'UTC' 110 | 111 | USE_I18N = True 112 | 113 | USE_L10N = True 114 | 115 | USE_TZ = True 116 | 117 | 118 | # Static files (CSS, JavaScript, Images) 119 | # https://docs.djangoproject.com/en/2.2/howto/static-files/ 120 | 121 | STATIC_URL = '/static/' 122 | 123 | ASGI_APPLICATION = "example.routing.application" 124 | -------------------------------------------------------------------------------- /04-django-channels/example/urls.py: -------------------------------------------------------------------------------- 1 | """example URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/2.2/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.contrib import admin 17 | from django.urls import path 18 | 19 | urlpatterns = [ 20 | path('admin/', admin.site.urls), 21 | ] 22 | -------------------------------------------------------------------------------- /04-django-channels/example/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for example project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'example.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /04-django-channels/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | 6 | 7 | def main(): 8 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'example.settings') 9 | try: 10 | from django.core.management import execute_from_command_line 11 | except ImportError as exc: 12 | raise ImportError( 13 | "Couldn't import Django. Are you sure it's installed and " 14 | "available on your PYTHONPATH environment variable? Did you " 15 | "forget to activate a virtual environment?" 16 | ) from exc 17 | execute_from_command_line(sys.argv) 18 | 19 | 20 | if __name__ == '__main__': 21 | main() 22 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Patryk Zawadzki 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # graphql-workshop 2 | A GraphQL workshop for DjangoCon EU 2019 3 | 4 | ## Installation 5 | 6 | Make sure you are using either Python 3.6 or 3.7. 7 | 8 | ### Create a virtual environment 9 | 10 | ```console 11 | python3 -m venv .venv 12 | ``` 13 | 14 | ### Activate the environment 15 | 16 | For **macOS** and **Linux**: 17 | 18 | ```console 19 | source .venv/bin/activate 20 | ``` 21 | 22 | For **Windows**: 23 | 24 | ```console 25 | .venv/Scripts/activate 26 | ``` 27 | 28 | ### Install the dependencies 29 | 30 | ```console 31 | pip install -r requirements.txt 32 | ``` 33 | -------------------------------------------------------------------------------- /poetry.lock: -------------------------------------------------------------------------------- 1 | [[package]] 2 | category = "dev" 3 | description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." 4 | name = "appdirs" 5 | optional = false 6 | python-versions = "*" 7 | version = "1.4.3" 8 | 9 | [[package]] 10 | category = "main" 11 | description = "Ariadne is a Python library for implementing GraphQL servers." 12 | name = "ariadne" 13 | optional = false 14 | python-versions = "*" 15 | version = "0.5.0" 16 | 17 | [package.dependencies] 18 | graphql-core-next = ">=1.0.4" 19 | python-multipart = ">=0.0.5" 20 | starlette = "<0.13" 21 | typing-extensions = ">=3.6.0" 22 | 23 | [[package]] 24 | category = "main" 25 | description = "ASGI specs, helper code, and adapters" 26 | name = "asgiref" 27 | optional = false 28 | python-versions = "*" 29 | version = "3.1.2" 30 | 31 | [package.dependencies] 32 | async-timeout = ">=2.0,<4.0" 33 | 34 | [package.extras] 35 | tests = ["pytest (>=4.3.0,<4.4.0)", "pytest-asyncio (>=0.10.0,<0.11.0)"] 36 | 37 | [[package]] 38 | category = "main" 39 | description = "Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP" 40 | name = "asn1crypto" 41 | optional = false 42 | python-versions = "*" 43 | version = "0.24.0" 44 | 45 | [[package]] 46 | category = "dev" 47 | description = "An abstract syntax tree for Python with inference support." 48 | name = "astroid" 49 | optional = false 50 | python-versions = ">=3.4.*" 51 | version = "2.2.5" 52 | 53 | [package.dependencies] 54 | lazy-object-proxy = "*" 55 | six = "*" 56 | typed-ast = ">=1.3.0" 57 | wrapt = "*" 58 | 59 | [[package]] 60 | category = "main" 61 | description = "Timeout context manager for asyncio programs" 62 | name = "async-timeout" 63 | optional = false 64 | python-versions = ">=3.5.3" 65 | version = "3.0.1" 66 | 67 | [[package]] 68 | category = "main" 69 | description = "Classes Without Boilerplate" 70 | name = "attrs" 71 | optional = false 72 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 73 | version = "19.1.0" 74 | 75 | [package.extras] 76 | dev = ["coverage", "hypothesis", "pympler", "pytest", "six", "zope.interface", "sphinx", "pre-commit"] 77 | docs = ["sphinx", "zope.interface"] 78 | tests = ["coverage", "hypothesis", "pympler", "pytest", "six", "zope.interface"] 79 | 80 | [[package]] 81 | category = "main" 82 | description = "WebSocket client & server library, WAMP real-time framework" 83 | name = "autobahn" 84 | optional = false 85 | python-versions = "*" 86 | version = "19.6.2" 87 | 88 | [package.dependencies] 89 | cryptography = ">=2.7" 90 | six = ">=1.11.0" 91 | txaio = ">=18.8.1" 92 | 93 | [package.extras] 94 | accelerate = ["wsaccel (>=0.6.2)"] 95 | all = ["zope.interface (>=3.6.0)", "Twisted (>=12.1.0)", "wsaccel (>=0.6.2)", "python-snappy (>=0.5)", "lz4 (>=0.7.0)", "msgpack (>=0.6.1)", "ujson (>=1.35)", "cbor2 (>=4.1.2)", "cbor (>=1.0.0)", "py-ubjson (>=0.8.4)", "flatbuffers (>=1.10)", "pyopenssl (>=16.2.0)", "service-identity (>=16.0.0)", "pynacl (>=1.0.1)", "pytrie (>=0.2)", "pyqrcode (>=1.1)", "cffi (>=1.11.5)", "argon2-cffi (>=18.1.0)", "passlib (>=1.7.1)", "cbor2 (>=4.1.1)", "zlmdb (>=18.12.1)", "twisted (>=18.9.0)", "autobahn (>=18.11.2)", "web3 (>=4.8.1)"] 96 | compress = ["python-snappy (>=0.5)", "lz4 (>=0.7.0)"] 97 | dev = ["pep8-naming (>=0.3.3)", "flake8 (>=2.5.1)", "pyflakes (>=1.0.0)", "mock (>=1.3.0)", "pytest (>=2.8.6,<3.3.0)", "twine (>=1.6.5)", "sphinx (>=1.2.3)", "pyenchant (>=1.6.6)", "sphinxcontrib-spelling (>=2.1.2)", "sphinx-rtd-theme (>=0.1.9)", "awscli", "qualname", "passlib", "wheel", "pytest-asyncio (<0.6)", "pytest-aiohttp"] 98 | encryption = ["pyopenssl (>=16.2.0)", "service-identity (>=16.0.0)", "pynacl (>=1.0.1)", "pytrie (>=0.2)", "pyqrcode (>=1.1)"] 99 | nvx = ["cffi (>=1.11.5)"] 100 | scram = ["cffi (>=1.11.5)", "argon2-cffi (>=18.1.0)", "passlib (>=1.7.1)"] 101 | serialization = ["msgpack (>=0.6.1)", "ujson (>=1.35)", "cbor2 (>=4.1.2)", "cbor (>=1.0.0)", "py-ubjson (>=0.8.4)", "flatbuffers (>=1.10)"] 102 | twisted = ["zope.interface (>=3.6.0)", "Twisted (>=12.1.0)"] 103 | xbr = ["cbor2 (>=4.1.1)", "zlmdb (>=18.12.1)", "twisted (>=18.9.0)", "autobahn (>=18.11.2)", "web3 (>=4.8.1)"] 104 | 105 | [[package]] 106 | category = "main" 107 | description = "Self-service finite-state machines for the programmer on the go." 108 | name = "automat" 109 | optional = false 110 | python-versions = "*" 111 | version = "0.7.0" 112 | 113 | [package.dependencies] 114 | attrs = ">=16.1.0" 115 | six = "*" 116 | 117 | [package.extras] 118 | visualize = ["graphviz (>0.5.1)", "Twisted (>=16.1.1)"] 119 | 120 | [[package]] 121 | category = "dev" 122 | description = "The uncompromising code formatter." 123 | name = "black" 124 | optional = false 125 | python-versions = ">=3.6" 126 | version = "19.3b0" 127 | 128 | [package.dependencies] 129 | appdirs = "*" 130 | attrs = ">=18.1.0" 131 | click = ">=6.5" 132 | toml = ">=0.9.4" 133 | 134 | [package.extras] 135 | d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] 136 | 137 | [[package]] 138 | category = "main" 139 | description = "Foreign Function Interface for Python calling C code." 140 | name = "cffi" 141 | optional = false 142 | python-versions = "*" 143 | version = "1.12.3" 144 | 145 | [package.dependencies] 146 | pycparser = "*" 147 | 148 | [[package]] 149 | category = "main" 150 | description = "Brings async, event-driven capabilities to Django. Django 1.11 and up only." 151 | name = "channels" 152 | optional = false 153 | python-versions = ">=3.5" 154 | version = "2.2.0" 155 | 156 | [package.dependencies] 157 | Django = ">=1.11" 158 | asgiref = ">=3.0,<4.0" 159 | daphne = ">=2.3,<3.0" 160 | 161 | [package.extras] 162 | tests = ["pytest (>=3.6.0,<3.7.0)", "pytest-django (>=3.1,<4.0)", "pytest-asyncio (>=0.8,<1.0)", "async-generator (>=1.8,<2.0)", "async-timeout (>=2.0,<3.0)", "coverage (>=4.4,<5.0)"] 163 | 164 | [[package]] 165 | category = "main" 166 | description = "Composable command line interface toolkit" 167 | name = "click" 168 | optional = false 169 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 170 | version = "7.0" 171 | 172 | [[package]] 173 | category = "dev" 174 | description = "Cross-platform colored terminal text." 175 | marker = "sys_platform == \"win32\"" 176 | name = "colorama" 177 | optional = false 178 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 179 | version = "0.4.1" 180 | 181 | [[package]] 182 | category = "main" 183 | description = "Symbolic constants in Python" 184 | name = "constantly" 185 | optional = false 186 | python-versions = "*" 187 | version = "15.1.0" 188 | 189 | [[package]] 190 | category = "main" 191 | description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." 192 | name = "cryptography" 193 | optional = false 194 | python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" 195 | version = "2.7" 196 | 197 | [package.dependencies] 198 | asn1crypto = ">=0.21.0" 199 | cffi = ">=1.8,<1.11.3 || >1.11.3" 200 | six = ">=1.4.1" 201 | 202 | [package.extras] 203 | docs = ["sphinx (>=1.6.5,<1.8.0 || >1.8.0)", "sphinx-rtd-theme"] 204 | docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] 205 | idna = ["idna (>=2.1)"] 206 | pep8test = ["flake8", "flake8-import-order", "pep8-naming"] 207 | test = ["pytest (>=3.6.0,<3.9.0 || >3.9.0,<3.9.1 || >3.9.1,<3.9.2 || >3.9.2)", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,<3.79.2 || >3.79.2)"] 208 | 209 | [[package]] 210 | category = "main" 211 | description = "Django ASGI (HTTP/WebSocket) server" 212 | name = "daphne" 213 | optional = false 214 | python-versions = "*" 215 | version = "2.3.0" 216 | 217 | [package.dependencies] 218 | asgiref = ">=3.0,<4.0" 219 | autobahn = ">=0.18" 220 | twisted = ">=18.7" 221 | 222 | [package.extras] 223 | tests = ["hypothesis (>=3.88,<4.0)", "pytest (>=3.10,<4.0)", "pytest-asyncio (>=0.8,<1.0)"] 224 | 225 | [[package]] 226 | category = "main" 227 | description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." 228 | name = "django" 229 | optional = false 230 | python-versions = ">=3.5" 231 | version = "2.2.10" 232 | 233 | [package.dependencies] 234 | pytz = "*" 235 | sqlparse = "*" 236 | 237 | [package.extras] 238 | argon2 = ["argon2-cffi (>=16.1.0)"] 239 | bcrypt = ["bcrypt"] 240 | 241 | [[package]] 242 | category = "main" 243 | description = "GraphQL-core-next is a Python port of GraphQL.js, the JavaScript reference implementation for GraphQL." 244 | name = "graphql-core-next" 245 | optional = false 246 | python-versions = ">=3.6" 247 | version = "1.0.5" 248 | 249 | [[package]] 250 | category = "main" 251 | description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" 252 | name = "h11" 253 | optional = false 254 | python-versions = "*" 255 | version = "0.8.1" 256 | 257 | [[package]] 258 | category = "main" 259 | description = "A collection of framework independent HTTP protocol utils." 260 | marker = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"pypy\"" 261 | name = "httptools" 262 | optional = false 263 | python-versions = "*" 264 | version = "0.0.13" 265 | 266 | [[package]] 267 | category = "main" 268 | description = "A featureful, immutable, and correct URL for Python." 269 | name = "hyperlink" 270 | optional = false 271 | python-versions = "*" 272 | version = "19.0.0" 273 | 274 | [package.dependencies] 275 | idna = ">=2.5" 276 | 277 | [[package]] 278 | category = "main" 279 | description = "Internationalized Domain Names in Applications (IDNA)" 280 | name = "idna" 281 | optional = false 282 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 283 | version = "2.8" 284 | 285 | [[package]] 286 | category = "main" 287 | description = "" 288 | name = "incremental" 289 | optional = false 290 | python-versions = "*" 291 | version = "17.5.0" 292 | 293 | [package.extras] 294 | scripts = ["click (>=6.0)", "twisted (>=16.4.0)"] 295 | 296 | [[package]] 297 | category = "dev" 298 | description = "A Python utility / library to sort Python imports." 299 | name = "isort" 300 | optional = false 301 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 302 | version = "4.3.20" 303 | 304 | [package.extras] 305 | pipfile = ["pipreqs", "requirementslib"] 306 | pyproject = ["toml"] 307 | requirements = ["pipreqs", "pip-api"] 308 | xdg_home = ["appdirs (>=1.4.0)"] 309 | 310 | [[package]] 311 | category = "dev" 312 | description = "A fast and thorough lazy object proxy." 313 | name = "lazy-object-proxy" 314 | optional = false 315 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 316 | version = "1.4.1" 317 | 318 | [[package]] 319 | category = "dev" 320 | description = "McCabe checker, plugin for flake8" 321 | name = "mccabe" 322 | optional = false 323 | python-versions = "*" 324 | version = "0.6.1" 325 | 326 | [[package]] 327 | category = "main" 328 | description = "C parser in Python" 329 | name = "pycparser" 330 | optional = false 331 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 332 | version = "2.19" 333 | 334 | [[package]] 335 | category = "main" 336 | description = "Hamcrest framework for matcher objects" 337 | name = "pyhamcrest" 338 | optional = false 339 | python-versions = "*" 340 | version = "1.9.0" 341 | 342 | [package.dependencies] 343 | setuptools = "*" 344 | six = "*" 345 | 346 | [[package]] 347 | category = "dev" 348 | description = "python code static checker" 349 | name = "pylint" 350 | optional = false 351 | python-versions = ">=3.4.*" 352 | version = "2.3.1" 353 | 354 | [package.dependencies] 355 | astroid = ">=2.2.0,<3" 356 | colorama = "*" 357 | isort = ">=4.2.5,<5" 358 | mccabe = ">=0.6,<0.7" 359 | 360 | [[package]] 361 | category = "main" 362 | description = "A streaming multipart parser for Python" 363 | name = "python-multipart" 364 | optional = false 365 | python-versions = "*" 366 | version = "0.0.5" 367 | 368 | [package.dependencies] 369 | six = ">=1.4.0" 370 | 371 | [[package]] 372 | category = "main" 373 | description = "World timezone definitions, modern and historical" 374 | name = "pytz" 375 | optional = false 376 | python-versions = "*" 377 | version = "2019.1" 378 | 379 | [[package]] 380 | category = "main" 381 | description = "Python 2 and 3 compatibility utilities" 382 | name = "six" 383 | optional = false 384 | python-versions = ">=2.6, !=3.0.*, !=3.1.*" 385 | version = "1.12.0" 386 | 387 | [[package]] 388 | category = "main" 389 | description = "Non-validating SQL parser" 390 | name = "sqlparse" 391 | optional = false 392 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 393 | version = "0.3.0" 394 | 395 | [[package]] 396 | category = "main" 397 | description = "The little ASGI library that shines." 398 | name = "starlette" 399 | optional = false 400 | python-versions = ">=3.6" 401 | version = "0.12.0" 402 | 403 | [package.extras] 404 | full = ["aiofiles", "graphene", "itsdangerous", "jinja2", "python-multipart", "pyyaml", "requests", "ujson"] 405 | 406 | [[package]] 407 | category = "dev" 408 | description = "Python Library for Tom's Obvious, Minimal Language" 409 | name = "toml" 410 | optional = false 411 | python-versions = "*" 412 | version = "0.10.0" 413 | 414 | [[package]] 415 | category = "main" 416 | description = "An asynchronous networking framework written in Python" 417 | name = "twisted" 418 | optional = false 419 | python-versions = "*" 420 | version = "19.10.0" 421 | 422 | [package.dependencies] 423 | Automat = ">=0.3.0" 424 | PyHamcrest = ">=1.9.0" 425 | attrs = ">=17.4.0" 426 | constantly = ">=15.1" 427 | hyperlink = ">=17.1.1" 428 | incremental = ">=16.10.1" 429 | "zope.interface" = ">=4.4.2" 430 | 431 | [package.extras] 432 | all_non_platform = ["pyopenssl (>=16.0.0)", "service_identity (>=18.1.0)", "idna (>=0.6,<2.3 || >2.3)", "pyasn1", "cryptography (>=2.5)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "soappy", "pyserial (>=3.0)", "h2 (>=3.0,<4.0)", "priority (>=1.1.0,<2.0)", "pywin32"] 433 | conch = ["pyasn1", "cryptography (>=2.5)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)"] 434 | dev = ["pyflakes (>=1.0.0)", "twisted-dev-tools (>=0.0.2)", "python-subunit", "sphinx (>=1.3.1)", "towncrier (>=17.4.0)"] 435 | http2 = ["h2 (>=3.0,<4.0)", "priority (>=1.1.0,<2.0)"] 436 | macos_platform = ["pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "pyopenssl (>=16.0.0)", "service_identity (>=18.1.0)", "idna (>=0.6,<2.3 || >2.3)", "pyasn1", "cryptography (>=2.5)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "soappy", "pyserial (>=3.0)", "h2 (>=3.0,<4.0)", "priority (>=1.1.0,<2.0)", "pywin32"] 437 | osx_platform = ["pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "pyopenssl (>=16.0.0)", "service_identity (>=18.1.0)", "idna (>=0.6,<2.3 || >2.3)", "pyasn1", "cryptography (>=2.5)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "soappy", "pyserial (>=3.0)", "h2 (>=3.0,<4.0)", "priority (>=1.1.0,<2.0)", "pywin32"] 438 | serial = ["pyserial (>=3.0)", "pywin32"] 439 | soap = ["soappy"] 440 | tls = ["pyopenssl (>=16.0.0)", "service_identity (>=18.1.0)", "idna (>=0.6,<2.3 || >2.3)"] 441 | windows_platform = ["pywin32", "pyopenssl (>=16.0.0)", "service_identity (>=18.1.0)", "idna (>=0.6,<2.3 || >2.3)", "pyasn1", "cryptography (>=2.5)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "soappy", "pyserial (>=3.0)", "h2 (>=3.0,<4.0)", "priority (>=1.1.0,<2.0)", "pywin32"] 442 | 443 | [[package]] 444 | category = "main" 445 | description = "Compatibility API between asyncio/Twisted/Trollius" 446 | name = "txaio" 447 | optional = false 448 | python-versions = "*" 449 | version = "18.8.1" 450 | 451 | [package.dependencies] 452 | six = "*" 453 | 454 | [package.extras] 455 | all = ["zope.interface (>=3.6)", "twisted (>=12.1.0)"] 456 | dev = ["wheel", "pytest (>=2.6.4)", "pytest-cov (>=1.8.1)", "pep8 (>=1.6.2)", "sphinx (>=1.2.3)", "pyenchant (>=1.6.6)", "sphinxcontrib-spelling (>=2.1.2)", "sphinx-rtd-theme (>=0.1.9)", "tox (>=2.1.1)", "mock (1.3.0)", "twine (>=1.6.5)"] 457 | twisted = ["zope.interface (>=3.6)", "twisted (>=12.1.0)"] 458 | 459 | [[package]] 460 | category = "dev" 461 | description = "a fork of Python 2 and 3 ast modules with type comment support" 462 | marker = "implementation_name == \"cpython\"" 463 | name = "typed-ast" 464 | optional = false 465 | python-versions = "*" 466 | version = "1.4.0" 467 | 468 | [[package]] 469 | category = "main" 470 | description = "Type Hints for Python" 471 | name = "typing" 472 | optional = false 473 | python-versions = "*" 474 | version = "3.6.6" 475 | 476 | [[package]] 477 | category = "main" 478 | description = "Backported and Experimental Type Hints for Python 3.5+" 479 | name = "typing-extensions" 480 | optional = false 481 | python-versions = "*" 482 | version = "3.7.2" 483 | 484 | [package.dependencies] 485 | typing = ">=3.6.2" 486 | 487 | [[package]] 488 | category = "main" 489 | description = "The lightning-fast ASGI server." 490 | name = "uvicorn" 491 | optional = false 492 | python-versions = "*" 493 | version = "0.8.0" 494 | 495 | [package.dependencies] 496 | click = ">=7.0.0,<8.0.0" 497 | h11 = ">=0.8.0,<0.9.0" 498 | httptools = "0.0.13" 499 | uvloop = ">=0.12.0,<0.13.0" 500 | websockets = ">=7.0.0,<8.0.0" 501 | 502 | [[package]] 503 | category = "main" 504 | description = "Fast implementation of asyncio event loop on top of libuv" 505 | marker = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"pypy\"" 506 | name = "uvloop" 507 | optional = false 508 | python-versions = "*" 509 | version = "0.12.2" 510 | 511 | [[package]] 512 | category = "main" 513 | description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" 514 | name = "websockets" 515 | optional = false 516 | python-versions = ">=3.4" 517 | version = "7.0" 518 | 519 | [[package]] 520 | category = "dev" 521 | description = "Module for decorators, wrappers and monkey patching." 522 | name = "wrapt" 523 | optional = false 524 | python-versions = "*" 525 | version = "1.11.2" 526 | 527 | [[package]] 528 | category = "main" 529 | description = "Interfaces for Python" 530 | name = "zope.interface" 531 | optional = false 532 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 533 | version = "4.6.0" 534 | 535 | [package.dependencies] 536 | setuptools = "*" 537 | 538 | [package.extras] 539 | docs = ["sphinx", "repoze.sphinx.autointerface"] 540 | test = ["zope.event"] 541 | testing = ["zope.event", "nose", "coverage"] 542 | 543 | [metadata] 544 | content-hash = "26f7415d3305540460d4a288b1abca8a405ecdda688dedcc91350d4500733fe8" 545 | python-versions = "^3.6" 546 | 547 | [metadata.files] 548 | appdirs = [ 549 | {file = "appdirs-1.4.3-py2.py3-none-any.whl", hash = "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"}, 550 | {file = "appdirs-1.4.3.tar.gz", hash = "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92"}, 551 | ] 552 | ariadne = [ 553 | {file = "ariadne-0.5.0-py3-none-any.whl", hash = "sha256:45695c31ca2344c6d7657d58eccd694bc91712efe6b4b40ea1b1123c953265f6"}, 554 | {file = "ariadne-0.5.0.tar.gz", hash = "sha256:ed9692ceecf67a746d341e2c909f9e18558c2804d47d8dd1fa819130de2ccbe1"}, 555 | ] 556 | asgiref = [ 557 | {file = "asgiref-3.1.2-py2.py3-none-any.whl", hash = "sha256:48afe222aefece5814ae90aae394964eada5a4604e67f9397f7858e8957e9fdf"}, 558 | {file = "asgiref-3.1.2.tar.gz", hash = "sha256:60c783a7994246b2e710aa2f0a2f7fcfacf156cffc7b50f7074bfd97c9046db3"}, 559 | ] 560 | asn1crypto = [ 561 | {file = "asn1crypto-0.24.0-py2.py3-none-any.whl", hash = "sha256:2f1adbb7546ed199e3c90ef23ec95c5cf3585bac7d11fb7eb562a3fe89c64e87"}, 562 | {file = "asn1crypto-0.24.0.tar.gz", hash = "sha256:9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49"}, 563 | ] 564 | astroid = [ 565 | {file = "astroid-2.2.5-py3-none-any.whl", hash = "sha256:b65db1bbaac9f9f4d190199bb8680af6f6f84fd3769a5ea883df8a91fe68b4c4"}, 566 | {file = "astroid-2.2.5.tar.gz", hash = "sha256:6560e1e1749f68c64a4b5dee4e091fce798d2f0d84ebe638cf0e0585a343acf4"}, 567 | ] 568 | async-timeout = [ 569 | {file = "async-timeout-3.0.1.tar.gz", hash = "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f"}, 570 | {file = "async_timeout-3.0.1-py3-none-any.whl", hash = "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3"}, 571 | ] 572 | attrs = [ 573 | {file = "attrs-19.1.0-py2.py3-none-any.whl", hash = "sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79"}, 574 | {file = "attrs-19.1.0.tar.gz", hash = "sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399"}, 575 | ] 576 | autobahn = [ 577 | {file = "autobahn-19.6.2-py2.py3-none-any.whl", hash = "sha256:b03dc7f3e21137650718c0a1ffbff16e2796711799281308cdc27dc14623d142"}, 578 | {file = "autobahn-19.6.2.tar.gz", hash = "sha256:48c2d737d33cfe1d37124db984577c5d4f44e116d05a9f8b6505721413ff9b22"}, 579 | ] 580 | automat = [ 581 | {file = "Automat-0.7.0-py2.py3-none-any.whl", hash = "sha256:fdccab66b68498af9ecfa1fa43693abe546014dd25cf28543cbe9d1334916a58"}, 582 | {file = "Automat-0.7.0.tar.gz", hash = "sha256:cbd78b83fa2d81fe2a4d23d258e1661dd7493c9a50ee2f1a5b2cac61c1793b0e"}, 583 | ] 584 | black = [ 585 | {file = "black-19.3b0-py36-none-any.whl", hash = "sha256:09a9dcb7c46ed496a9850b76e4e825d6049ecd38b611f1224857a79bd985a8cf"}, 586 | {file = "black-19.3b0.tar.gz", hash = "sha256:68950ffd4d9169716bcb8719a56c07a2f4485354fec061cdd5910aa07369731c"}, 587 | ] 588 | cffi = [ 589 | {file = "cffi-1.12.3-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:5662ad4e4e84f1eaa8efce5da695c5d2e229c563f9d5ce5b0113f71321bcf753"}, 590 | {file = "cffi-1.12.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:a8dccd61d52a8dae4a825cdbb7735da530179fea472903eb871a5513b5abbfdc"}, 591 | {file = "cffi-1.12.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4aa8ee7ba27c472d429b980c51e714a24f47ca296d53f4d7868075b175866f4b"}, 592 | {file = "cffi-1.12.3-cp27-cp27m-win32.whl", hash = "sha256:34c77afe85b6b9e967bd8154e3855e847b70ca42043db6ad17f26899a3df1b25"}, 593 | {file = "cffi-1.12.3-cp27-cp27m-win_amd64.whl", hash = "sha256:a5457d47dfff24882a21492e5815f891c0ca35fefae8aa742c6c263dac16ef1f"}, 594 | {file = "cffi-1.12.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:46de5fa00f7ac09f020729148ff632819649b3e05a007d286242c4882f7b1dc3"}, 595 | {file = "cffi-1.12.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:2444d0c61f03dcd26dbf7600cf64354376ee579acad77aef459e34efcb438c63"}, 596 | {file = "cffi-1.12.3-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:a2e85dc204556657661051ff4bab75a84e968669765c8a2cd425918699c3d0e8"}, 597 | {file = "cffi-1.12.3-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:55cad9a6df1e2a1d62063f79d0881a414a906a6962bc160ac968cc03ed3efcfb"}, 598 | {file = "cffi-1.12.3-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:d2c5cfa536227f57f97c92ac30c8109688ace8fa4ac086d19d0af47d134e2909"}, 599 | {file = "cffi-1.12.3-cp34-cp34m-win32.whl", hash = "sha256:ed851c75d1e0e043cbf5ca9a8e1b13c4c90f3fbd863dacb01c0808e2b5204201"}, 600 | {file = "cffi-1.12.3-cp34-cp34m-win_amd64.whl", hash = "sha256:d42b5796e20aacc9d15e66befb7a345454eef794fdb0737d1af593447c6c8f45"}, 601 | {file = "cffi-1.12.3-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:046ef9a22f5d3eed06334d01b1e836977eeef500d9b78e9ef693f9380ad0b83d"}, 602 | {file = "cffi-1.12.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:e1ff2748c84d97b065cc95429814cdba39bcbd77c9c85c89344b317dc0d9cbff"}, 603 | {file = "cffi-1.12.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:4d0004eb4351e35ed950c14c11e734182591465a33e960a4ab5e8d4f04d72647"}, 604 | {file = "cffi-1.12.3-cp35-cp35m-win32.whl", hash = "sha256:4e3d3f31a1e202b0f5a35ba3bc4eb41e2fc2b11c1eff38b362de710bcffb5016"}, 605 | {file = "cffi-1.12.3-cp35-cp35m-win_amd64.whl", hash = "sha256:066bc4c7895c91812eff46f4b1c285220947d4aa46fa0a2651ff85f2afae9c90"}, 606 | {file = "cffi-1.12.3-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:73e1ffefe05e4ccd7bcea61af76f36077b914f92b76f95ccf00b0c1b9186f3f9"}, 607 | {file = "cffi-1.12.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:b012a5edb48288f77a63dba0840c92d0504aa215612da4541b7b42d849bc83a3"}, 608 | {file = "cffi-1.12.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:59b4dc008f98fc6ee2bb4fd7fc786a8d70000d058c2bbe2698275bc53a8d3fa7"}, 609 | {file = "cffi-1.12.3-cp36-cp36m-win32.whl", hash = "sha256:300832850b8f7967e278870c5d51e3819b9aad8f0a2c8dbe39ab11f119237f45"}, 610 | {file = "cffi-1.12.3-cp36-cp36m-win_amd64.whl", hash = "sha256:066c7ff148ae33040c01058662d6752fd73fbc8e64787229ea8498c7d7f4041b"}, 611 | {file = "cffi-1.12.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a1f0fd46eba2d71ce1589f7e50a9e2ffaeb739fb2c11e8192aa2b45d5f6cc41f"}, 612 | {file = "cffi-1.12.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:50bec6d35e6b1aaeb17f7c4e2b9374ebf95a8975d57863546fa83e8d31bdb8c4"}, 613 | {file = "cffi-1.12.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ae61af521ed676cf16ae94f30fe202781a38d7178b6b4ab622e4eec8cefaff42"}, 614 | {file = "cffi-1.12.3-cp37-cp37m-win32.whl", hash = "sha256:dee54f5d30d775f525894d67b1495625dd9322945e7fee00731952e0368ff42d"}, 615 | {file = "cffi-1.12.3-cp37-cp37m-win_amd64.whl", hash = "sha256:e070535507bd6aa07124258171be2ee8dfc19119c28ca94c9dfb7efd23564512"}, 616 | {file = "cffi-1.12.3.tar.gz", hash = "sha256:041c81822e9f84b1d9c401182e174996f0bae9991f33725d059b771744290774"}, 617 | ] 618 | channels = [ 619 | {file = "channels-2.2.0-py2.py3-none-any.whl", hash = "sha256:9191a85800673b790d1d74666fb7676f430600b71b662581e97dd69c9aedd29a"}, 620 | {file = "channels-2.2.0.tar.gz", hash = "sha256:af7cdba9efb3f55b939917d1b15defb5d40259936013e60660e5e9aff98db4c5"}, 621 | ] 622 | click = [ 623 | {file = "Click-7.0-py2.py3-none-any.whl", hash = "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13"}, 624 | {file = "Click-7.0.tar.gz", hash = "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"}, 625 | ] 626 | colorama = [ 627 | {file = "colorama-0.4.1-py2.py3-none-any.whl", hash = "sha256:f8ac84de7840f5b9c4e3347b3c1eaa50f7e49c2b07596221daec5edaabbd7c48"}, 628 | {file = "colorama-0.4.1.tar.gz", hash = "sha256:05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d"}, 629 | ] 630 | constantly = [ 631 | {file = "constantly-15.1.0-py2.py3-none-any.whl", hash = "sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d"}, 632 | {file = "constantly-15.1.0.tar.gz", hash = "sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"}, 633 | ] 634 | cryptography = [ 635 | {file = "cryptography-2.7-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:f57b76e46a58b63d1c6375017f4564a28f19a5ca912691fd2e4261b3414b618d"}, 636 | {file = "cryptography-2.7-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:cfee9164954c186b191b91d4193989ca994703b2fff406f71cf454a2d3c7327e"}, 637 | {file = "cryptography-2.7-cp27-cp27m-win32.whl", hash = "sha256:b0db0cecf396033abb4a93c95d1602f268b3a68bb0a9cc06a7cff587bb9a7292"}, 638 | {file = "cryptography-2.7-cp27-cp27m-win_amd64.whl", hash = "sha256:41a0be220dd1ed9e998f5891948306eb8c812b512dc398e5a01846d855050799"}, 639 | {file = "cryptography-2.7-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ae536da50c7ad1e002c3eee101871d93abdc90d9c5f651818450a0d3af718609"}, 640 | {file = "cryptography-2.7-cp34-abi3-macosx_10_6_intel.whl", hash = "sha256:24b61e5fcb506424d3ec4e18bca995833839bf13c59fc43e530e488f28d46b8c"}, 641 | {file = "cryptography-2.7-cp34-abi3-manylinux1_x86_64.whl", hash = "sha256:96d8473848e984184b6728e2c9d391482008646276c3ff084a1bd89e15ff53a1"}, 642 | {file = "cryptography-2.7-cp34-cp34m-win32.whl", hash = "sha256:25dd1581a183e9e7a806fe0543f485103232f940fcfc301db65e630512cce643"}, 643 | {file = "cryptography-2.7-cp34-cp34m-win_amd64.whl", hash = "sha256:5751d8a11b956fbfa314f6553d186b94aa70fdb03d8a4d4f1c82dcacf0cbe28a"}, 644 | {file = "cryptography-2.7-cp35-cp35m-win32.whl", hash = "sha256:7b97ae6ef5cba2e3bb14256625423413d5ce8d1abb91d4f29b6d1a081da765f8"}, 645 | {file = "cryptography-2.7-cp35-cp35m-win_amd64.whl", hash = "sha256:3452bba7c21c69f2df772762be0066c7ed5dc65df494a1d53a58b683a83e1216"}, 646 | {file = "cryptography-2.7-cp36-cp36m-win32.whl", hash = "sha256:72e24c521fa2106f19623a3851e9f89ddfdeb9ac63871c7643790f872a305dfc"}, 647 | {file = "cryptography-2.7-cp36-cp36m-win_amd64.whl", hash = "sha256:5f61c7d749048fa6e3322258b4263463bfccefecb0dd731b6561cb617a1d9bb9"}, 648 | {file = "cryptography-2.7-cp37-cp37m-win32.whl", hash = "sha256:961e886d8a3590fd2c723cf07be14e2a91cf53c25f02435c04d39e90780e3b53"}, 649 | {file = "cryptography-2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f27d93f0139a3c056172ebb5d4f9056e770fdf0206c2f422ff2ebbad142e09ed"}, 650 | {file = "cryptography-2.7.tar.gz", hash = "sha256:e6347742ac8f35ded4a46ff835c60e68c22a536a8ae5c4422966d06946b6d4c6"}, 651 | ] 652 | daphne = [ 653 | {file = "daphne-2.3.0-py2.py3-none-any.whl", hash = "sha256:3cae286a995ae5b127d7de84916f0480cb5be19f81125b6a150b8326250dadd5"}, 654 | {file = "daphne-2.3.0.tar.gz", hash = "sha256:2329b7a74b5559f7ea012879c10ba945c3a53df7d8d2b5932a904e3b4c9abcc2"}, 655 | ] 656 | django = [ 657 | {file = "Django-2.2.10-py3-none-any.whl", hash = "sha256:9a4635813e2d498a3c01b10c701fe4a515d76dd290aaa792ccb65ca4ccb6b038"}, 658 | {file = "Django-2.2.10.tar.gz", hash = "sha256:1226168be1b1c7efd0e66ee79b0e0b58b2caa7ed87717909cd8a57bb13a7079a"}, 659 | ] 660 | graphql-core-next = [ 661 | {file = "GraphQL-core-next-1.0.5.tar.gz", hash = "sha256:c663ccc36d9a5ece606b5b4f5509835f0ec8d6e6b941992ced67384edcbfd045"}, 662 | {file = "GraphQL_core_next-1.0.5-py3-none-any.whl", hash = "sha256:5a6cdf23a3b24fa738a903b9fcdaa1db2768a6552f8d1fb8fb79d9add16d090d"}, 663 | ] 664 | h11 = [ 665 | {file = "h11-0.8.1-py2.py3-none-any.whl", hash = "sha256:f2b1ca39bfed357d1f19ac732913d5f9faa54a5062eca7d2ec3a916cfb7ae4c7"}, 666 | {file = "h11-0.8.1.tar.gz", hash = "sha256:acca6a44cb52a32ab442b1779adf0875c443c689e9e028f8d831a3769f9c5208"}, 667 | ] 668 | httptools = [ 669 | {file = "httptools-0.0.13.tar.gz", hash = "sha256:e00cbd7ba01ff748e494248183abc6e153f49181169d8a3d41bb49132ca01dfc"}, 670 | ] 671 | hyperlink = [ 672 | {file = "hyperlink-19.0.0-py2.py3-none-any.whl", hash = "sha256:ab4a308feb039b04f855a020a6eda3b18ca5a68e6d8f8c899cbe9e653721d04f"}, 673 | {file = "hyperlink-19.0.0.tar.gz", hash = "sha256:4288e34705da077fada1111a24a0aa08bb1e76699c9ce49876af722441845654"}, 674 | ] 675 | idna = [ 676 | {file = "idna-2.8-py2.py3-none-any.whl", hash = "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"}, 677 | {file = "idna-2.8.tar.gz", hash = "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407"}, 678 | ] 679 | incremental = [ 680 | {file = "incremental-17.5.0-py2.py3-none-any.whl", hash = "sha256:717e12246dddf231a349175f48d74d93e2897244939173b01974ab6661406b9f"}, 681 | {file = "incremental-17.5.0.tar.gz", hash = "sha256:7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3"}, 682 | ] 683 | isort = [ 684 | {file = "isort-4.3.20-py2.py3-none-any.whl", hash = "sha256:f57abacd059dc3bd666258d1efb0377510a89777fda3e3274e3c01f7c03ae22d"}, 685 | {file = "isort-4.3.20.tar.gz", hash = "sha256:c40744b6bc5162bbb39c1257fe298b7a393861d50978b565f3ccd9cb9de0182a"}, 686 | ] 687 | lazy-object-proxy = [ 688 | {file = "lazy-object-proxy-1.4.1.tar.gz", hash = "sha256:4ba73f6089cd9b9478bc0a4fa807b47dbdb8fad1d8f31a0f0a5dbf26a4527a71"}, 689 | {file = "lazy_object_proxy-1.4.1-cp27-cp27m-macosx_10_13_x86_64.whl", hash = "sha256:3b11be575475db2e8a6e11215f5aa95b9ec14de658628776e10d96fa0b4dac13"}, 690 | {file = "lazy_object_proxy-1.4.1-cp27-cp27m-win32.whl", hash = "sha256:4f53eadd9932055eac465bd3ca1bd610e4d7141e1278012bd1f28646aebc1d0e"}, 691 | {file = "lazy_object_proxy-1.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:a262c7dfb046f00e12a2bdd1bafaed2408114a89ac414b0af8755c696eb3fc16"}, 692 | {file = "lazy_object_proxy-1.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:acce4e3267610c4fdb6632b3886fe3f2f7dd641158a843cf6b6a68e4ce81477b"}, 693 | {file = "lazy_object_proxy-1.4.1-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:23f63c0821cc96a23332e45dfaa83266feff8adc72b9bcaef86c202af765244f"}, 694 | {file = "lazy_object_proxy-1.4.1-cp34-cp34m-win32.whl", hash = "sha256:be089bb6b83fac7f29d357b2dc4cf2b8eb8d98fe9d9ff89f9ea6012970a853c7"}, 695 | {file = "lazy_object_proxy-1.4.1-cp34-cp34m-win_amd64.whl", hash = "sha256:7c7f1ec07b227bdc561299fa2328e85000f90179a2f44ea30579d38e037cb3d4"}, 696 | {file = "lazy_object_proxy-1.4.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:64483bd7154580158ea90de5b8e5e6fc29a16a9b4db24f10193f0c1ae3f9d1ea"}, 697 | {file = "lazy_object_proxy-1.4.1-cp35-cp35m-win32.whl", hash = "sha256:e408f1eacc0a68fed0c08da45f31d0ebb38079f043328dce69ff133b95c29dc1"}, 698 | {file = "lazy_object_proxy-1.4.1-cp35-cp35m-win_amd64.whl", hash = "sha256:7c8b1ba1e15c10b13cad4171cfa77f5bb5ec2580abc5a353907780805ebe158e"}, 699 | {file = "lazy_object_proxy-1.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:c10d29019927301d524a22ced72706380de7cfc50f767217485a912b4c8bd82a"}, 700 | {file = "lazy_object_proxy-1.4.1-cp36-cp36m-win32.whl", hash = "sha256:3f447aff8bc61ca8b42b73304f6a44fa0d915487de144652816f950a3f1ab821"}, 701 | {file = "lazy_object_proxy-1.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:dd6e2b598849b3d7aee2295ac765a578879830fb8966f70be8cd472e6069932e"}, 702 | {file = "lazy_object_proxy-1.4.1-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:6f72d42b0d04bfee2397aa1862262654b56922c20a9bb66bb76b6f0e5e4f9229"}, 703 | {file = "lazy_object_proxy-1.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:bfab710d859c779f273cc48fb86af38d6e9210f38287df0069a63e40b45a2f5c"}, 704 | {file = "lazy_object_proxy-1.4.1-cp37-cp37m-win32.whl", hash = "sha256:8559b94b823f85342e10d3d9ca4ba5478168e1ac5658a8a2f18c991ba9c52c20"}, 705 | {file = "lazy_object_proxy-1.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:159a745e61422217881c4de71f9eafd9d703b93af95618635849fe469a283661"}, 706 | ] 707 | mccabe = [ 708 | {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, 709 | {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, 710 | ] 711 | pycparser = [ 712 | {file = "pycparser-2.19.tar.gz", hash = "sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3"}, 713 | ] 714 | pyhamcrest = [ 715 | {file = "PyHamcrest-1.9.0-py2.6.egg", hash = "sha256:f30e9a310bcc1808de817a92e95169ffd16b60cbc5a016a49c8d0e8ababfae79"}, 716 | {file = "PyHamcrest-1.9.0-py2.py3-none-any.whl", hash = "sha256:6b672c02fdf7470df9674ab82263841ce8333fb143f32f021f6cb26f0e512420"}, 717 | {file = "PyHamcrest-1.9.0-py3.2.egg", hash = "sha256:bac0bea7358666ce52e3c6c85139632ed89f115e9af52d44b3c36e0bf8cf16a9"}, 718 | {file = "PyHamcrest-1.9.0-py3.4.egg", hash = "sha256:7a4bdade0ed98c699d728191a058a60a44d2f9c213c51e2dd1e6fb42f2c6128a"}, 719 | {file = "PyHamcrest-1.9.0.tar.gz", hash = "sha256:8ffaa0a53da57e89de14ced7185ac746227a8894dbd5a3c718bf05ddbd1d56cd"}, 720 | ] 721 | pylint = [ 722 | {file = "pylint-2.3.1-py3-none-any.whl", hash = "sha256:5d77031694a5fb97ea95e828c8d10fc770a1df6eb3906067aaed42201a8a6a09"}, 723 | {file = "pylint-2.3.1.tar.gz", hash = "sha256:723e3db49555abaf9bf79dc474c6b9e2935ad82230b10c1138a71ea41ac0fff1"}, 724 | ] 725 | python-multipart = [ 726 | {file = "python-multipart-0.0.5.tar.gz", hash = "sha256:f7bb5f611fc600d15fa47b3974c8aa16e93724513b49b5f95c81e6624c83fa43"}, 727 | ] 728 | pytz = [ 729 | {file = "pytz-2019.1-py2.py3-none-any.whl", hash = "sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda"}, 730 | {file = "pytz-2019.1.tar.gz", hash = "sha256:d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141"}, 731 | ] 732 | six = [ 733 | {file = "six-1.12.0-py2.py3-none-any.whl", hash = "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c"}, 734 | {file = "six-1.12.0.tar.gz", hash = "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"}, 735 | ] 736 | sqlparse = [ 737 | {file = "sqlparse-0.3.0-py2.py3-none-any.whl", hash = "sha256:40afe6b8d4b1117e7dff5504d7a8ce07d9a1b15aeeade8a2d10f130a834f8177"}, 738 | {file = "sqlparse-0.3.0.tar.gz", hash = "sha256:7c3dca29c022744e95b547e867cee89f4fce4373f3549ccd8797d8eb52cdb873"}, 739 | ] 740 | starlette = [ 741 | {file = "starlette-0.12.0.tar.gz", hash = "sha256:d313433ef5cc38e0a276b59688ca2b11b8f031c78808c1afdf9d55cb86f34590"}, 742 | ] 743 | toml = [ 744 | {file = "toml-0.10.0-py2.7.egg", hash = "sha256:f1db651f9657708513243e61e6cc67d101a39bad662eaa9b5546f789338e07a3"}, 745 | {file = "toml-0.10.0-py2.py3-none-any.whl", hash = "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e"}, 746 | {file = "toml-0.10.0.tar.gz", hash = "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c"}, 747 | ] 748 | twisted = [ 749 | {file = "Twisted-19.10.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:257dbc78e72bc69c2970035fc74df54b04573d5ddd380251a8a23f74d619db03"}, 750 | {file = "Twisted-19.10.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:a1de7598ce977943b3edbcc0a7d2112f134cc1b98b2fd7e348ee9e0bef092e50"}, 751 | {file = "Twisted-19.10.0-cp27-cp27m-win32.whl", hash = "sha256:ef1396d1680d6a1ae6dff293d778755c8e10d471f286aff678877b2cee235d42"}, 752 | {file = "Twisted-19.10.0-cp27-cp27m-win_amd64.whl", hash = "sha256:8b2f7f4dded5ad02931bed38042e55329d1e4919b63078f5a29f05502a163f1d"}, 753 | {file = "Twisted-19.10.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:6338e5b987e95c94360acb14e78b41097be9b45d44d15a68060db9c3bf89e102"}, 754 | {file = "Twisted-19.10.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:776c65270b57ac074d5b7a471142f434b0ac5a8b39d9c974769c855c32abfd91"}, 755 | {file = "Twisted-19.10.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:f7cc56a45c983e4e48601fbeec879b62c740cb848c75164f69a48ac0c6e8a21c"}, 756 | {file = "Twisted-19.10.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:3f651c52ad78cc5a643f61e3b786a6b5c9b4ee68eced975c04fdf6b02026f470"}, 757 | {file = "Twisted-19.10.0-cp35-cp35m-win32.whl", hash = "sha256:58b581ae4eee5a831aac9d03edc331d662fa028f601015bb3df47f8704bfe876"}, 758 | {file = "Twisted-19.10.0-cp35-cp35m-win_amd64.whl", hash = "sha256:1f0919a0363b4fbed5def5315383db36fd581464bca80290764f8c4465e91c04"}, 759 | {file = "Twisted-19.10.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0f39698c2aac318032ed4fe95e28ee2bd7d72327c2f6927139811ad403770885"}, 760 | {file = "Twisted-19.10.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:f28355e61ce0b5c1ce47784522022322cc5059c8ed80638e0caae8c7301e1705"}, 761 | {file = "Twisted-19.10.0-cp36-cp36m-win32.whl", hash = "sha256:d145c418a46f8a7021030a3246b9e5111f64531278e5252f2073f23c1661c8be"}, 762 | {file = "Twisted-19.10.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d9037ff5e07909b1d31f81db71a3bbc8227ba1ed20c87332bdb2eb48e55f326e"}, 763 | {file = "Twisted-19.10.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:97f8a76632bf051a27179337fe937df315920a08e9bd146126e0126629db3721"}, 764 | {file = "Twisted-19.10.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:611ef7696d406605962d9a7b040d357f3e91df20cf75c0b06e350947f541538b"}, 765 | {file = "Twisted-19.10.0-cp37-cp37m-win32.whl", hash = "sha256:d53e1f883bc429b14fd2999d355352974f9d7b4ae7554154bbfe3f90aecede5f"}, 766 | {file = "Twisted-19.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f1fe9139fdcf7721d308e36c51cf975474678a8241a9799af02a7bb1c531b722"}, 767 | {file = "Twisted-19.10.0.tar.bz2", hash = "sha256:7394ba7f272ae722a74f3d969dcf599bc4ef093bc392038748a490f1724a515d"}, 768 | ] 769 | txaio = [ 770 | {file = "txaio-18.8.1-py2.py3-none-any.whl", hash = "sha256:b6b235d432cc58ffe111b43e337db71a5caa5d3eaa88f0eacf60b431c7626ef5"}, 771 | {file = "txaio-18.8.1.tar.gz", hash = "sha256:67e360ac73b12c52058219bb5f8b3ed4105d2636707a36a7cdafb56fe06db7fe"}, 772 | ] 773 | typed-ast = [ 774 | {file = "typed_ast-1.4.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:262c247a82d005e43b5b7f69aff746370538e176131c32dda9cb0f324d27141e"}, 775 | {file = "typed_ast-1.4.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:71211d26ffd12d63a83e079ff258ac9d56a1376a25bc80b1cdcdf601b855b90b"}, 776 | {file = "typed_ast-1.4.0-cp35-cp35m-win32.whl", hash = "sha256:630968c5cdee51a11c05a30453f8cd65e0cc1d2ad0d9192819df9978984529f4"}, 777 | {file = "typed_ast-1.4.0-cp35-cp35m-win_amd64.whl", hash = "sha256:ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12"}, 778 | {file = "typed_ast-1.4.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4e0b70c6fc4d010f8107726af5fd37921b666f5b31d9331f0bd24ad9a088e631"}, 779 | {file = "typed_ast-1.4.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:bc6c7d3fa1325a0c6613512a093bc2a2a15aeec350451cbdf9e1d4bffe3e3233"}, 780 | {file = "typed_ast-1.4.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:cc34a6f5b426748a507dd5d1de4c1978f2eb5626d51326e43280941206c209e1"}, 781 | {file = "typed_ast-1.4.0-cp36-cp36m-win32.whl", hash = "sha256:d896919306dd0aa22d0132f62a1b78d11aaf4c9fc5b3410d3c666b818191630a"}, 782 | {file = "typed_ast-1.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:354c16e5babd09f5cb0ee000d54cfa38401d8b8891eefa878ac772f827181a3c"}, 783 | {file = "typed_ast-1.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95bd11af7eafc16e829af2d3df510cecfd4387f6453355188342c3e79a2ec87a"}, 784 | {file = "typed_ast-1.4.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:18511a0b3e7922276346bcb47e2ef9f38fb90fd31cb9223eed42c85d1312344e"}, 785 | {file = "typed_ast-1.4.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d7c45933b1bdfaf9f36c579671fec15d25b06c8398f113dab64c18ed1adda01d"}, 786 | {file = "typed_ast-1.4.0-cp37-cp37m-win32.whl", hash = "sha256:d755f03c1e4a51e9b24d899561fec4ccaf51f210d52abdf8c07ee2849b212a36"}, 787 | {file = "typed_ast-1.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2b907eb046d049bcd9892e3076c7a6456c93a25bebfe554e931620c90e6a25b0"}, 788 | {file = "typed_ast-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fdc1c9bbf79510b76408840e009ed65958feba92a88833cdceecff93ae8fff66"}, 789 | {file = "typed_ast-1.4.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:7954560051331d003b4e2b3eb822d9dd2e376fa4f6d98fee32f452f52dd6ebb2"}, 790 | {file = "typed_ast-1.4.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:48e5b1e71f25cfdef98b013263a88d7145879fbb2d5185f2a0c79fa7ebbeae47"}, 791 | {file = "typed_ast-1.4.0-cp38-cp38-win32.whl", hash = "sha256:1170afa46a3799e18b4c977777ce137bb53c7485379d9706af8a59f2ea1aa161"}, 792 | {file = "typed_ast-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:838997f4310012cf2e1ad3803bce2f3402e9ffb71ded61b5ee22617b3a7f6b6e"}, 793 | {file = "typed_ast-1.4.0.tar.gz", hash = "sha256:66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34"}, 794 | ] 795 | typing = [ 796 | {file = "typing-3.6.6-py2-none-any.whl", hash = "sha256:a4c8473ce11a65999c8f59cb093e70686b6c84c98df58c1dae9b3b196089858a"}, 797 | {file = "typing-3.6.6-py3-none-any.whl", hash = "sha256:57dcf675a99b74d64dacf6fba08fb17cf7e3d5fdff53d4a30ea2a5e7e52543d4"}, 798 | {file = "typing-3.6.6.tar.gz", hash = "sha256:4027c5f6127a6267a435201981ba156de91ad0d1d98e9ddc2aa173453453492d"}, 799 | ] 800 | typing-extensions = [ 801 | {file = "typing_extensions-3.7.2-py2-none-any.whl", hash = "sha256:07b2c978670896022a43c4b915df8958bec4a6b84add7f2c87b2b728bda3ba64"}, 802 | {file = "typing_extensions-3.7.2-py3-none-any.whl", hash = "sha256:f3f0e67e1d42de47b5c67c32c9b26641642e9170fe7e292991793705cd5fef7c"}, 803 | {file = "typing_extensions-3.7.2.tar.gz", hash = "sha256:fb2cd053238d33a8ec939190f30cfd736c00653a85a2919415cecf7dc3d9da71"}, 804 | ] 805 | uvicorn = [ 806 | {file = "uvicorn-0.8.0.tar.gz", hash = "sha256:3b95412939969e592f0e151da7b661c8078893e79f7504afb7a65b18748871ab"}, 807 | ] 808 | uvloop = [ 809 | {file = "uvloop-0.12.2-cp35-cp35m-macosx_10_11_x86_64.whl", hash = "sha256:ac1dca3d8f3ef52806059e81042ee397ac939e5a86c8a3cea55d6b087db66115"}, 810 | {file = "uvloop-0.12.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8c200457e6847f28d8bb91c5e5039d301716f5f2fce25646f5fb3fd65eda4a26"}, 811 | {file = "uvloop-0.12.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:fefc3b2b947c99737c348887db2c32e539160dcbeb7af9aa6b53db7a283538fe"}, 812 | {file = "uvloop-0.12.2-cp36-cp36m-macosx_10_11_x86_64.whl", hash = "sha256:958906b9ca39eb158414fbb7d6b8ef1b7aee4db5c8e8e5d00fcbb69a1ce9dca7"}, 813 | {file = "uvloop-0.12.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:67867aafd6e0bc2c30a079603a85d83b94f23c5593b3cc08ec7e58ac18bf48e5"}, 814 | {file = "uvloop-0.12.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2f31de1742c059c96cb76b91c5275b22b22b965c886ee1fced093fa27dde9e64"}, 815 | {file = "uvloop-0.12.2-cp37-cp37m-macosx_10_11_x86_64.whl", hash = "sha256:b284c22d8938866318e3b9d178142b8be316c52d16fcfe1560685a686718a021"}, 816 | {file = "uvloop-0.12.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:0fcd894f6fc3226a962ee7ad895c4f52e3f5c3c55098e21efb17c071849a0573"}, 817 | {file = "uvloop-0.12.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:459e4649fcd5ff719523de33964aa284898e55df62761e7773d088823ccbd3e0"}, 818 | {file = "uvloop-0.12.2.tar.gz", hash = "sha256:c48692bf4587ce281d641087658eca275a5ad3b63c78297bbded96570ae9ce8f"}, 819 | ] 820 | websockets = [ 821 | {file = "websockets-7.0-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:8e447e05ec88b1b408a4c9cde85aa6f4b04f06aa874b9f0b8e8319faf51b1fee"}, 822 | {file = "websockets-7.0-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:5eda665f6789edb9b57b57a159b9c55482cbe5b046d7db458948370554b16439"}, 823 | {file = "websockets-7.0-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:5edb2524d4032be4564c65dc4f9d01e79fe8fad5f966e5b552f4e5164fef0885"}, 824 | {file = "websockets-7.0-cp34-cp34m-win32.whl", hash = "sha256:e98d0cec437097f09c7834a11c69d79fe6241729b23f656cfc227e93294fc242"}, 825 | {file = "websockets-7.0-cp34-cp34m-win_amd64.whl", hash = "sha256:90ea6b3e7787620bb295a4ae050d2811c807d65b1486749414f78cfd6fb61489"}, 826 | {file = "websockets-7.0-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:55d86102282a636e195dad68aaaf85b81d0bef449d7e2ef2ff79ac450bb25d53"}, 827 | {file = "websockets-7.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:e1df1a58ed2468c7b7ce9a2f9752a32ad08eac2bcd56318625c3647c2cd2da6f"}, 828 | {file = "websockets-7.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:10d89d4326045bf5e15e83e9867c85d686b612822e4d8f149cf4840aab5f46e0"}, 829 | {file = "websockets-7.0-cp35-cp35m-win32.whl", hash = "sha256:564d2675682bd497b59907d2205031acbf7d3fadf8c763b689b9ede20300b215"}, 830 | {file = "websockets-7.0-cp35-cp35m-win_amd64.whl", hash = "sha256:d40f081187f7b54d7a99d8a5c782eaa4edc335a057aa54c85059272ed826dc09"}, 831 | {file = "websockets-7.0-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:4bf4c8097440eff22bc78ec76fe2a865a6e658b6977a504679aaf08f02c121da"}, 832 | {file = "websockets-7.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:51642ea3a00772d1e48fb0c492f0d3ae3b6474f34d20eca005a83f8c9c06c561"}, 833 | {file = "websockets-7.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:79691794288bc51e2a3b8de2bc0272ca8355d0b8503077ea57c0716e840ebaef"}, 834 | {file = "websockets-7.0-cp36-cp36m-win32.whl", hash = "sha256:5d13bf5197a92149dc0badcc2b699267ff65a867029f465accfca8abab95f412"}, 835 | {file = "websockets-7.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7fcc8681e9981b9b511cdee7c580d5b005f3bb86b65bde2188e04a29f1d63317"}, 836 | {file = "websockets-7.0-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:fc30cdf2e949a2225b012a7911d1d031df3d23e99b7eda7dfc982dc4a860dae9"}, 837 | {file = "websockets-7.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f8d59627702d2ff27cb495ca1abdea8bd8d581de425c56e93bff6517134e0a9b"}, 838 | {file = "websockets-7.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:232fac8a1978fc1dead4b1c2fa27c7756750fb393eb4ac52f6bc87ba7242b2fa"}, 839 | {file = "websockets-7.0-cp37-cp37m-win32.whl", hash = "sha256:04b42a1b57096ffa5627d6a78ea1ff7fad3bc2c0331ffc17bc32a4024da7fea0"}, 840 | {file = "websockets-7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:9e13239952694b8b831088431d15f771beace10edfcf9ef230cefea14f18508f"}, 841 | {file = "websockets-7.0.tar.gz", hash = "sha256:08e3c3e0535befa4f0c4443824496c03ecc25062debbcf895874f8a0b4c97c9f"}, 842 | ] 843 | wrapt = [ 844 | {file = "wrapt-1.11.2.tar.gz", hash = "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1"}, 845 | ] 846 | "zope.interface" = [ 847 | {file = "zope.interface-4.6.0-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:a15e75d284178afe529a536b0e8b28b7e107ef39626a7809b4ee64ff3abc9127"}, 848 | {file = "zope.interface-4.6.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:bbcef00d09a30948756c5968863316c949d9cedbc7aabac5e8f0ffbdb632e5f1"}, 849 | {file = "zope.interface-4.6.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9e998ba87df77a85c7bed53240a7257afe51a07ee6bc3445a0bf841886da0b97"}, 850 | {file = "zope.interface-4.6.0-cp27-cp27m-win32.whl", hash = "sha256:20a12ab46a7e72b89ce0671e7d7a6c3c1ca2c2766ac98112f78c5bddaa6e4375"}, 851 | {file = "zope.interface-4.6.0-cp27-cp27m-win_amd64.whl", hash = "sha256:d788a3999014ddf416f2dc454efa4a5dbeda657c6aba031cf363741273804c6b"}, 852 | {file = "zope.interface-4.6.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7e5c9a5012b2b33e87980cee7d1c82412b2ebabcb5862d53413ba1a2cfde23aa"}, 853 | {file = "zope.interface-4.6.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bad44274b151d46619a7567010f7cde23a908c6faa84b97598fd2f474a0c6891"}, 854 | {file = "zope.interface-4.6.0-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:7040547e5b882349c0a2cc9b50674b1745db551f330746af434aad4f09fba2cc"}, 855 | {file = "zope.interface-4.6.0-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:81295629128f929e73be4ccfdd943a0906e5fe3cdb0d43ff1e5144d16fbb52b1"}, 856 | {file = "zope.interface-4.6.0-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:298f82c0ab1b182bd1f34f347ea97dde0fffb9ecf850ecf7f8904b8442a07487"}, 857 | {file = "zope.interface-4.6.0-cp34-cp34m-win32.whl", hash = "sha256:7e099fde2cce8b29434684f82977db4e24f0efa8b0508179fce1602d103296a2"}, 858 | {file = "zope.interface-4.6.0-cp34-cp34m-win_amd64.whl", hash = "sha256:f99451f3a579e73b5dd58b1b08d1179791d49084371d9a47baad3b22417f0317"}, 859 | {file = "zope.interface-4.6.0-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:3b877de633a0f6d81b600624ff9137312d8b1d0f517064dfc39999352ab659f0"}, 860 | {file = "zope.interface-4.6.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:b639f72b95389620c1f881d94739c614d385406ab1d6926a9ffe1c8abbea23fe"}, 861 | {file = "zope.interface-4.6.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:11ebddf765bff3bbe8dbce10c86884d87f90ed66ee410a7e6c392086e2c63d02"}, 862 | {file = "zope.interface-4.6.0-cp35-cp35m-win32.whl", hash = "sha256:1157b1ec2a1f5bf45668421e3955c60c610e31913cc695b407a574efdbae1f7b"}, 863 | {file = "zope.interface-4.6.0-cp35-cp35m-win_amd64.whl", hash = "sha256:a6a6ff82f5f9b9702478035d8f6fb6903885653bff7ec3a1e011edc9b1a7168d"}, 864 | {file = "zope.interface-4.6.0-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:4265681e77f5ac5bac0905812b828c9fe1ce80c6f3e3f8574acfb5643aeabc5b"}, 865 | {file = "zope.interface-4.6.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:086707e0f413ff8800d9c4bc26e174f7ee4c9c8b0302fbad68d083071822316c"}, 866 | {file = "zope.interface-4.6.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5f4d42baed3a14c290a078e2696c5f565501abde1b2f3f1a1c0a94fbf6fbcc39"}, 867 | {file = "zope.interface-4.6.0-cp36-cp36m-win32.whl", hash = "sha256:a0c39e2535a7e9c195af956610dba5a1073071d2d85e9d2e5d789463f63e52ab"}, 868 | {file = "zope.interface-4.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968d5c5702da15c5bf8e4a6e4b67a4d92164e334e9c0b6acf080106678230b98"}, 869 | {file = "zope.interface-4.6.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:14b242d53f6f35c2d07aa2c0e13ccb710392bcd203e1b82a1828d216f6f6b11f"}, 870 | {file = "zope.interface-4.6.0-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:2f6175722da6f23dbfc76c26c241b67b020e1e83ec7fe93c9e5d3dd18667ada2"}, 871 | {file = "zope.interface-4.6.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:eed88ae03e1ef3a75a0e96a55a99d7937ed03e53d0cffc2451c208db445a2966"}, 872 | {file = "zope.interface-4.6.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:95cc574b0b83b85be9917d37cd2fad0ce5a0d21b024e1a5804d044aabea636fc"}, 873 | {file = "zope.interface-4.6.0-cp37-cp37m-win32.whl", hash = "sha256:62dd71dbed8cc6a18379700701d959307823b3b2451bdc018594c48956ace745"}, 874 | {file = "zope.interface-4.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:550695c4e7313555549aa1cdb978dc9413d61307531f123558e438871a883d63"}, 875 | {file = "zope.interface-4.6.0.tar.gz", hash = "sha256:1b3d0dcabc7c90b470e59e38a9acaa361be43b3a6ea644c0063951964717f0e5"}, 876 | ] 877 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "graphql-workshop" 3 | version = "0.0.0" 4 | license = "BSD-3-Clause" 5 | authors = [ 6 | "Mirumee Software " 7 | ] 8 | description = "A GraphQL workshop" 9 | 10 | [tool.poetry.dependencies] 11 | python = "^3.6" 12 | ariadne = "^0.5" 13 | django = "^2.2" 14 | uvicorn = "^0.8" 15 | channels = "^2.2" 16 | 17 | [tool.poetry.dev-dependencies] 18 | pylint = "^2.3" 19 | black = "^19.3b0" 20 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | ariadne==0.5.0 \ 2 | --hash=sha256:45695c31ca2344c6d7657d58eccd694bc91712efe6b4b40ea1b1123c953265f6 \ 3 | --hash=sha256:ed9692ceecf67a746d341e2c909f9e18558c2804d47d8dd1fa819130de2ccbe1 4 | asgiref==3.1.2 \ 5 | --hash=sha256:48afe222aefece5814ae90aae394964eada5a4604e67f9397f7858e8957e9fdf \ 6 | --hash=sha256:60c783a7994246b2e710aa2f0a2f7fcfacf156cffc7b50f7074bfd97c9046db3 7 | asn1crypto==0.24.0 \ 8 | --hash=sha256:2f1adbb7546ed199e3c90ef23ec95c5cf3585bac7d11fb7eb562a3fe89c64e87 \ 9 | --hash=sha256:9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49 10 | async-timeout==3.0.1 \ 11 | --hash=sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f \ 12 | --hash=sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3 13 | attrs==19.1.0 \ 14 | --hash=sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79 \ 15 | --hash=sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399 16 | autobahn==19.6.2 \ 17 | --hash=sha256:b03dc7f3e21137650718c0a1ffbff16e2796711799281308cdc27dc14623d142 \ 18 | --hash=sha256:48c2d737d33cfe1d37124db984577c5d4f44e116d05a9f8b6505721413ff9b22 19 | automat==0.7.0 \ 20 | --hash=sha256:fdccab66b68498af9ecfa1fa43693abe546014dd25cf28543cbe9d1334916a58 \ 21 | --hash=sha256:cbd78b83fa2d81fe2a4d23d258e1661dd7493c9a50ee2f1a5b2cac61c1793b0e 22 | cffi==1.12.3 \ 23 | --hash=sha256:5662ad4e4e84f1eaa8efce5da695c5d2e229c563f9d5ce5b0113f71321bcf753 \ 24 | --hash=sha256:a8dccd61d52a8dae4a825cdbb7735da530179fea472903eb871a5513b5abbfdc \ 25 | --hash=sha256:4aa8ee7ba27c472d429b980c51e714a24f47ca296d53f4d7868075b175866f4b \ 26 | --hash=sha256:34c77afe85b6b9e967bd8154e3855e847b70ca42043db6ad17f26899a3df1b25 \ 27 | --hash=sha256:a5457d47dfff24882a21492e5815f891c0ca35fefae8aa742c6c263dac16ef1f \ 28 | --hash=sha256:46de5fa00f7ac09f020729148ff632819649b3e05a007d286242c4882f7b1dc3 \ 29 | --hash=sha256:2444d0c61f03dcd26dbf7600cf64354376ee579acad77aef459e34efcb438c63 \ 30 | --hash=sha256:a2e85dc204556657661051ff4bab75a84e968669765c8a2cd425918699c3d0e8 \ 31 | --hash=sha256:55cad9a6df1e2a1d62063f79d0881a414a906a6962bc160ac968cc03ed3efcfb \ 32 | --hash=sha256:d2c5cfa536227f57f97c92ac30c8109688ace8fa4ac086d19d0af47d134e2909 \ 33 | --hash=sha256:ed851c75d1e0e043cbf5ca9a8e1b13c4c90f3fbd863dacb01c0808e2b5204201 \ 34 | --hash=sha256:d42b5796e20aacc9d15e66befb7a345454eef794fdb0737d1af593447c6c8f45 \ 35 | --hash=sha256:046ef9a22f5d3eed06334d01b1e836977eeef500d9b78e9ef693f9380ad0b83d \ 36 | --hash=sha256:e1ff2748c84d97b065cc95429814cdba39bcbd77c9c85c89344b317dc0d9cbff \ 37 | --hash=sha256:4d0004eb4351e35ed950c14c11e734182591465a33e960a4ab5e8d4f04d72647 \ 38 | --hash=sha256:4e3d3f31a1e202b0f5a35ba3bc4eb41e2fc2b11c1eff38b362de710bcffb5016 \ 39 | --hash=sha256:066bc4c7895c91812eff46f4b1c285220947d4aa46fa0a2651ff85f2afae9c90 \ 40 | --hash=sha256:73e1ffefe05e4ccd7bcea61af76f36077b914f92b76f95ccf00b0c1b9186f3f9 \ 41 | --hash=sha256:b012a5edb48288f77a63dba0840c92d0504aa215612da4541b7b42d849bc83a3 \ 42 | --hash=sha256:59b4dc008f98fc6ee2bb4fd7fc786a8d70000d058c2bbe2698275bc53a8d3fa7 \ 43 | --hash=sha256:300832850b8f7967e278870c5d51e3819b9aad8f0a2c8dbe39ab11f119237f45 \ 44 | --hash=sha256:066c7ff148ae33040c01058662d6752fd73fbc8e64787229ea8498c7d7f4041b \ 45 | --hash=sha256:a1f0fd46eba2d71ce1589f7e50a9e2ffaeb739fb2c11e8192aa2b45d5f6cc41f \ 46 | --hash=sha256:50bec6d35e6b1aaeb17f7c4e2b9374ebf95a8975d57863546fa83e8d31bdb8c4 \ 47 | --hash=sha256:ae61af521ed676cf16ae94f30fe202781a38d7178b6b4ab622e4eec8cefaff42 \ 48 | --hash=sha256:dee54f5d30d775f525894d67b1495625dd9322945e7fee00731952e0368ff42d \ 49 | --hash=sha256:e070535507bd6aa07124258171be2ee8dfc19119c28ca94c9dfb7efd23564512 \ 50 | --hash=sha256:041c81822e9f84b1d9c401182e174996f0bae9991f33725d059b771744290774 51 | channels==2.2.0 \ 52 | --hash=sha256:9191a85800673b790d1d74666fb7676f430600b71b662581e97dd69c9aedd29a \ 53 | --hash=sha256:af7cdba9efb3f55b939917d1b15defb5d40259936013e60660e5e9aff98db4c5 54 | click==7.0 \ 55 | --hash=sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13 \ 56 | --hash=sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7 57 | constantly==15.1.0 \ 58 | --hash=sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d \ 59 | --hash=sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35 60 | cryptography==2.7 \ 61 | --hash=sha256:f57b76e46a58b63d1c6375017f4564a28f19a5ca912691fd2e4261b3414b618d \ 62 | --hash=sha256:cfee9164954c186b191b91d4193989ca994703b2fff406f71cf454a2d3c7327e \ 63 | --hash=sha256:b0db0cecf396033abb4a93c95d1602f268b3a68bb0a9cc06a7cff587bb9a7292 \ 64 | --hash=sha256:41a0be220dd1ed9e998f5891948306eb8c812b512dc398e5a01846d855050799 \ 65 | --hash=sha256:ae536da50c7ad1e002c3eee101871d93abdc90d9c5f651818450a0d3af718609 \ 66 | --hash=sha256:24b61e5fcb506424d3ec4e18bca995833839bf13c59fc43e530e488f28d46b8c \ 67 | --hash=sha256:96d8473848e984184b6728e2c9d391482008646276c3ff084a1bd89e15ff53a1 \ 68 | --hash=sha256:25dd1581a183e9e7a806fe0543f485103232f940fcfc301db65e630512cce643 \ 69 | --hash=sha256:5751d8a11b956fbfa314f6553d186b94aa70fdb03d8a4d4f1c82dcacf0cbe28a \ 70 | --hash=sha256:7b97ae6ef5cba2e3bb14256625423413d5ce8d1abb91d4f29b6d1a081da765f8 \ 71 | --hash=sha256:3452bba7c21c69f2df772762be0066c7ed5dc65df494a1d53a58b683a83e1216 \ 72 | --hash=sha256:72e24c521fa2106f19623a3851e9f89ddfdeb9ac63871c7643790f872a305dfc \ 73 | --hash=sha256:5f61c7d749048fa6e3322258b4263463bfccefecb0dd731b6561cb617a1d9bb9 \ 74 | --hash=sha256:961e886d8a3590fd2c723cf07be14e2a91cf53c25f02435c04d39e90780e3b53 \ 75 | --hash=sha256:f27d93f0139a3c056172ebb5d4f9056e770fdf0206c2f422ff2ebbad142e09ed \ 76 | --hash=sha256:e6347742ac8f35ded4a46ff835c60e68c22a536a8ae5c4422966d06946b6d4c6 77 | daphne==2.3.0 \ 78 | --hash=sha256:3cae286a995ae5b127d7de84916f0480cb5be19f81125b6a150b8326250dadd5 \ 79 | --hash=sha256:2329b7a74b5559f7ea012879c10ba945c3a53df7d8d2b5932a904e3b4c9abcc2 80 | django==2.2.10 \ 81 | --hash=sha256:9a4635813e2d498a3c01b10c701fe4a515d76dd290aaa792ccb65ca4ccb6b038 \ 82 | --hash=sha256:1226168be1b1c7efd0e66ee79b0e0b58b2caa7ed87717909cd8a57bb13a7079a 83 | graphql-core-next==1.0.5 \ 84 | --hash=sha256:c663ccc36d9a5ece606b5b4f5509835f0ec8d6e6b941992ced67384edcbfd045 \ 85 | --hash=sha256:5a6cdf23a3b24fa738a903b9fcdaa1db2768a6552f8d1fb8fb79d9add16d090d 86 | h11==0.8.1 \ 87 | --hash=sha256:f2b1ca39bfed357d1f19ac732913d5f9faa54a5062eca7d2ec3a916cfb7ae4c7 \ 88 | --hash=sha256:acca6a44cb52a32ab442b1779adf0875c443c689e9e028f8d831a3769f9c5208 89 | httptools==0.0.13; sys_platform != "win32" and sys_platform != "cygwin" and platform_python_implementation != "pypy" \ 90 | --hash=sha256:e00cbd7ba01ff748e494248183abc6e153f49181169d8a3d41bb49132ca01dfc 91 | hyperlink==19.0.0 \ 92 | --hash=sha256:ab4a308feb039b04f855a020a6eda3b18ca5a68e6d8f8c899cbe9e653721d04f \ 93 | --hash=sha256:4288e34705da077fada1111a24a0aa08bb1e76699c9ce49876af722441845654 94 | idna==2.8 \ 95 | --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c \ 96 | --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 97 | incremental==17.5.0 \ 98 | --hash=sha256:717e12246dddf231a349175f48d74d93e2897244939173b01974ab6661406b9f \ 99 | --hash=sha256:7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3 100 | pycparser==2.19 \ 101 | --hash=sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3 102 | pyhamcrest==1.9.0 \ 103 | --hash=sha256:f30e9a310bcc1808de817a92e95169ffd16b60cbc5a016a49c8d0e8ababfae79 \ 104 | --hash=sha256:6b672c02fdf7470df9674ab82263841ce8333fb143f32f021f6cb26f0e512420 \ 105 | --hash=sha256:bac0bea7358666ce52e3c6c85139632ed89f115e9af52d44b3c36e0bf8cf16a9 \ 106 | --hash=sha256:7a4bdade0ed98c699d728191a058a60a44d2f9c213c51e2dd1e6fb42f2c6128a \ 107 | --hash=sha256:8ffaa0a53da57e89de14ced7185ac746227a8894dbd5a3c718bf05ddbd1d56cd 108 | python-multipart==0.0.5 \ 109 | --hash=sha256:f7bb5f611fc600d15fa47b3974c8aa16e93724513b49b5f95c81e6624c83fa43 110 | pytz==2019.1 \ 111 | --hash=sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda \ 112 | --hash=sha256:d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141 113 | six==1.12.0 \ 114 | --hash=sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c \ 115 | --hash=sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73 116 | sqlparse==0.3.0 \ 117 | --hash=sha256:40afe6b8d4b1117e7dff5504d7a8ce07d9a1b15aeeade8a2d10f130a834f8177 \ 118 | --hash=sha256:7c3dca29c022744e95b547e867cee89f4fce4373f3549ccd8797d8eb52cdb873 119 | starlette==0.12.0 \ 120 | --hash=sha256:d313433ef5cc38e0a276b59688ca2b11b8f031c78808c1afdf9d55cb86f34590 121 | twisted==19.10.0 \ 122 | --hash=sha256:257dbc78e72bc69c2970035fc74df54b04573d5ddd380251a8a23f74d619db03 \ 123 | --hash=sha256:a1de7598ce977943b3edbcc0a7d2112f134cc1b98b2fd7e348ee9e0bef092e50 \ 124 | --hash=sha256:ef1396d1680d6a1ae6dff293d778755c8e10d471f286aff678877b2cee235d42 \ 125 | --hash=sha256:8b2f7f4dded5ad02931bed38042e55329d1e4919b63078f5a29f05502a163f1d \ 126 | --hash=sha256:6338e5b987e95c94360acb14e78b41097be9b45d44d15a68060db9c3bf89e102 \ 127 | --hash=sha256:776c65270b57ac074d5b7a471142f434b0ac5a8b39d9c974769c855c32abfd91 \ 128 | --hash=sha256:f7cc56a45c983e4e48601fbeec879b62c740cb848c75164f69a48ac0c6e8a21c \ 129 | --hash=sha256:3f651c52ad78cc5a643f61e3b786a6b5c9b4ee68eced975c04fdf6b02026f470 \ 130 | --hash=sha256:58b581ae4eee5a831aac9d03edc331d662fa028f601015bb3df47f8704bfe876 \ 131 | --hash=sha256:1f0919a0363b4fbed5def5315383db36fd581464bca80290764f8c4465e91c04 \ 132 | --hash=sha256:0f39698c2aac318032ed4fe95e28ee2bd7d72327c2f6927139811ad403770885 \ 133 | --hash=sha256:f28355e61ce0b5c1ce47784522022322cc5059c8ed80638e0caae8c7301e1705 \ 134 | --hash=sha256:d145c418a46f8a7021030a3246b9e5111f64531278e5252f2073f23c1661c8be \ 135 | --hash=sha256:d9037ff5e07909b1d31f81db71a3bbc8227ba1ed20c87332bdb2eb48e55f326e \ 136 | --hash=sha256:97f8a76632bf051a27179337fe937df315920a08e9bd146126e0126629db3721 \ 137 | --hash=sha256:611ef7696d406605962d9a7b040d357f3e91df20cf75c0b06e350947f541538b \ 138 | --hash=sha256:d53e1f883bc429b14fd2999d355352974f9d7b4ae7554154bbfe3f90aecede5f \ 139 | --hash=sha256:f1fe9139fdcf7721d308e36c51cf975474678a8241a9799af02a7bb1c531b722 \ 140 | --hash=sha256:7394ba7f272ae722a74f3d969dcf599bc4ef093bc392038748a490f1724a515d 141 | txaio==18.8.1 \ 142 | --hash=sha256:b6b235d432cc58ffe111b43e337db71a5caa5d3eaa88f0eacf60b431c7626ef5 \ 143 | --hash=sha256:67e360ac73b12c52058219bb5f8b3ed4105d2636707a36a7cdafb56fe06db7fe 144 | typing==3.6.6 \ 145 | --hash=sha256:a4c8473ce11a65999c8f59cb093e70686b6c84c98df58c1dae9b3b196089858a \ 146 | --hash=sha256:57dcf675a99b74d64dacf6fba08fb17cf7e3d5fdff53d4a30ea2a5e7e52543d4 \ 147 | --hash=sha256:4027c5f6127a6267a435201981ba156de91ad0d1d98e9ddc2aa173453453492d 148 | typing-extensions==3.7.2 \ 149 | --hash=sha256:07b2c978670896022a43c4b915df8958bec4a6b84add7f2c87b2b728bda3ba64 \ 150 | --hash=sha256:f3f0e67e1d42de47b5c67c32c9b26641642e9170fe7e292991793705cd5fef7c \ 151 | --hash=sha256:fb2cd053238d33a8ec939190f30cfd736c00653a85a2919415cecf7dc3d9da71 152 | uvicorn==0.8.0 \ 153 | --hash=sha256:3b95412939969e592f0e151da7b661c8078893e79f7504afb7a65b18748871ab 154 | uvloop==0.12.2; sys_platform != "win32" and sys_platform != "cygwin" and platform_python_implementation != "pypy" \ 155 | --hash=sha256:ac1dca3d8f3ef52806059e81042ee397ac939e5a86c8a3cea55d6b087db66115 \ 156 | --hash=sha256:8c200457e6847f28d8bb91c5e5039d301716f5f2fce25646f5fb3fd65eda4a26 \ 157 | --hash=sha256:fefc3b2b947c99737c348887db2c32e539160dcbeb7af9aa6b53db7a283538fe \ 158 | --hash=sha256:958906b9ca39eb158414fbb7d6b8ef1b7aee4db5c8e8e5d00fcbb69a1ce9dca7 \ 159 | --hash=sha256:67867aafd6e0bc2c30a079603a85d83b94f23c5593b3cc08ec7e58ac18bf48e5 \ 160 | --hash=sha256:2f31de1742c059c96cb76b91c5275b22b22b965c886ee1fced093fa27dde9e64 \ 161 | --hash=sha256:b284c22d8938866318e3b9d178142b8be316c52d16fcfe1560685a686718a021 \ 162 | --hash=sha256:0fcd894f6fc3226a962ee7ad895c4f52e3f5c3c55098e21efb17c071849a0573 \ 163 | --hash=sha256:459e4649fcd5ff719523de33964aa284898e55df62761e7773d088823ccbd3e0 \ 164 | --hash=sha256:c48692bf4587ce281d641087658eca275a5ad3b63c78297bbded96570ae9ce8f 165 | websockets==7.0 \ 166 | --hash=sha256:8e447e05ec88b1b408a4c9cde85aa6f4b04f06aa874b9f0b8e8319faf51b1fee \ 167 | --hash=sha256:5eda665f6789edb9b57b57a159b9c55482cbe5b046d7db458948370554b16439 \ 168 | --hash=sha256:5edb2524d4032be4564c65dc4f9d01e79fe8fad5f966e5b552f4e5164fef0885 \ 169 | --hash=sha256:e98d0cec437097f09c7834a11c69d79fe6241729b23f656cfc227e93294fc242 \ 170 | --hash=sha256:90ea6b3e7787620bb295a4ae050d2811c807d65b1486749414f78cfd6fb61489 \ 171 | --hash=sha256:55d86102282a636e195dad68aaaf85b81d0bef449d7e2ef2ff79ac450bb25d53 \ 172 | --hash=sha256:e1df1a58ed2468c7b7ce9a2f9752a32ad08eac2bcd56318625c3647c2cd2da6f \ 173 | --hash=sha256:10d89d4326045bf5e15e83e9867c85d686b612822e4d8f149cf4840aab5f46e0 \ 174 | --hash=sha256:564d2675682bd497b59907d2205031acbf7d3fadf8c763b689b9ede20300b215 \ 175 | --hash=sha256:d40f081187f7b54d7a99d8a5c782eaa4edc335a057aa54c85059272ed826dc09 \ 176 | --hash=sha256:4bf4c8097440eff22bc78ec76fe2a865a6e658b6977a504679aaf08f02c121da \ 177 | --hash=sha256:51642ea3a00772d1e48fb0c492f0d3ae3b6474f34d20eca005a83f8c9c06c561 \ 178 | --hash=sha256:79691794288bc51e2a3b8de2bc0272ca8355d0b8503077ea57c0716e840ebaef \ 179 | --hash=sha256:5d13bf5197a92149dc0badcc2b699267ff65a867029f465accfca8abab95f412 \ 180 | --hash=sha256:7fcc8681e9981b9b511cdee7c580d5b005f3bb86b65bde2188e04a29f1d63317 \ 181 | --hash=sha256:fc30cdf2e949a2225b012a7911d1d031df3d23e99b7eda7dfc982dc4a860dae9 \ 182 | --hash=sha256:f8d59627702d2ff27cb495ca1abdea8bd8d581de425c56e93bff6517134e0a9b \ 183 | --hash=sha256:232fac8a1978fc1dead4b1c2fa27c7756750fb393eb4ac52f6bc87ba7242b2fa \ 184 | --hash=sha256:04b42a1b57096ffa5627d6a78ea1ff7fad3bc2c0331ffc17bc32a4024da7fea0 \ 185 | --hash=sha256:9e13239952694b8b831088431d15f771beace10edfcf9ef230cefea14f18508f \ 186 | --hash=sha256:08e3c3e0535befa4f0c4443824496c03ecc25062debbcf895874f8a0b4c97c9f 187 | zope.interface==4.6.0 \ 188 | --hash=sha256:a15e75d284178afe529a536b0e8b28b7e107ef39626a7809b4ee64ff3abc9127 \ 189 | --hash=sha256:bbcef00d09a30948756c5968863316c949d9cedbc7aabac5e8f0ffbdb632e5f1 \ 190 | --hash=sha256:9e998ba87df77a85c7bed53240a7257afe51a07ee6bc3445a0bf841886da0b97 \ 191 | --hash=sha256:20a12ab46a7e72b89ce0671e7d7a6c3c1ca2c2766ac98112f78c5bddaa6e4375 \ 192 | --hash=sha256:d788a3999014ddf416f2dc454efa4a5dbeda657c6aba031cf363741273804c6b \ 193 | --hash=sha256:7e5c9a5012b2b33e87980cee7d1c82412b2ebabcb5862d53413ba1a2cfde23aa \ 194 | --hash=sha256:bad44274b151d46619a7567010f7cde23a908c6faa84b97598fd2f474a0c6891 \ 195 | --hash=sha256:7040547e5b882349c0a2cc9b50674b1745db551f330746af434aad4f09fba2cc \ 196 | --hash=sha256:81295629128f929e73be4ccfdd943a0906e5fe3cdb0d43ff1e5144d16fbb52b1 \ 197 | --hash=sha256:298f82c0ab1b182bd1f34f347ea97dde0fffb9ecf850ecf7f8904b8442a07487 \ 198 | --hash=sha256:7e099fde2cce8b29434684f82977db4e24f0efa8b0508179fce1602d103296a2 \ 199 | --hash=sha256:f99451f3a579e73b5dd58b1b08d1179791d49084371d9a47baad3b22417f0317 \ 200 | --hash=sha256:3b877de633a0f6d81b600624ff9137312d8b1d0f517064dfc39999352ab659f0 \ 201 | --hash=sha256:b639f72b95389620c1f881d94739c614d385406ab1d6926a9ffe1c8abbea23fe \ 202 | --hash=sha256:11ebddf765bff3bbe8dbce10c86884d87f90ed66ee410a7e6c392086e2c63d02 \ 203 | --hash=sha256:1157b1ec2a1f5bf45668421e3955c60c610e31913cc695b407a574efdbae1f7b \ 204 | --hash=sha256:a6a6ff82f5f9b9702478035d8f6fb6903885653bff7ec3a1e011edc9b1a7168d \ 205 | --hash=sha256:4265681e77f5ac5bac0905812b828c9fe1ce80c6f3e3f8574acfb5643aeabc5b \ 206 | --hash=sha256:086707e0f413ff8800d9c4bc26e174f7ee4c9c8b0302fbad68d083071822316c \ 207 | --hash=sha256:5f4d42baed3a14c290a078e2696c5f565501abde1b2f3f1a1c0a94fbf6fbcc39 \ 208 | --hash=sha256:a0c39e2535a7e9c195af956610dba5a1073071d2d85e9d2e5d789463f63e52ab \ 209 | --hash=sha256:968d5c5702da15c5bf8e4a6e4b67a4d92164e334e9c0b6acf080106678230b98 \ 210 | --hash=sha256:14b242d53f6f35c2d07aa2c0e13ccb710392bcd203e1b82a1828d216f6f6b11f \ 211 | --hash=sha256:2f6175722da6f23dbfc76c26c241b67b020e1e83ec7fe93c9e5d3dd18667ada2 \ 212 | --hash=sha256:eed88ae03e1ef3a75a0e96a55a99d7937ed03e53d0cffc2451c208db445a2966 \ 213 | --hash=sha256:95cc574b0b83b85be9917d37cd2fad0ce5a0d21b024e1a5804d044aabea636fc \ 214 | --hash=sha256:62dd71dbed8cc6a18379700701d959307823b3b2451bdc018594c48956ace745 \ 215 | --hash=sha256:550695c4e7313555549aa1cdb978dc9413d61307531f123558e438871a883d63 \ 216 | --hash=sha256:1b3d0dcabc7c90b470e59e38a9acaa361be43b3a6ea644c0063951964717f0e5 217 | --------------------------------------------------------------------------------