├── www ├── __init__.py ├── apps.py ├── views.py └── templates │ └── www │ └── index.html ├── magical_creatures ├── __init__.py ├── asgi.py ├── wsgi.py ├── urls.py └── settings.py ├── .idea ├── .gitignore ├── inspectionProfiles │ ├── profiles_settings.xml │ └── Project_Default.xml ├── modules.xml ├── misc.xml └── magical-creatures.iml ├── unicorn ├── components │ └── sightings.py └── templates │ └── unicorn │ └── sightings.html ├── README.md ├── pyproject.toml ├── manage.py ├── LICENSE ├── requirements.txt ├── .gitignore └── poetry.lock /www/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /magical_creatures/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /www/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class WwwConfig(AppConfig): 5 | name = 'www' 6 | -------------------------------------------------------------------------------- /www/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | 4 | def index(request): 5 | return render(request, "www/index.html", {}) 6 | -------------------------------------------------------------------------------- /unicorn/components/sightings.py: -------------------------------------------------------------------------------- 1 | from django_unicorn.components import UnicornView 2 | 3 | 4 | class SightingsView(UnicornView): 5 | count = 0 6 | -------------------------------------------------------------------------------- /unicorn/templates/unicorn/sightings.html: -------------------------------------------------------------------------------- 1 |
2 | unicorns 3 | 4 |
5 | {{ count|upper }} unicorns 6 |
7 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /www/templates/www/index.html: -------------------------------------------------------------------------------- 1 | {% load unicorn %} 2 | 3 | 4 | 5 | Unicorn Screencasts 6 | {% unicorn_scripts %} 7 | 8 | 9 | {% csrf_token %} 10 | 11 | {% unicorn "sightings" %} 12 | 13 | 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # magical-creatures 2 | 3 | An example Django site created with [Unicorn](https://www.django-unicorn.com). Follow along with the [screencasts](https://www.django-unicorn.com/screencasts) while this is being built. 4 | 5 | ## Screencasts 6 | 7 | 1. https://www.django-unicorn.com/screencasts/installation 8 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | -------------------------------------------------------------------------------- /.idea/magical-creatures.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "magical_creatures" 3 | version = "0.1.0" 4 | description = "" 5 | authors = ["Adam Hill "] 6 | 7 | [tool.poetry.dependencies] 8 | python = "^3.6" 9 | Django = "^3.1.4" 10 | django-unicorn = "<1.0.0" 11 | 12 | [tool.poetry.dev-dependencies] 13 | 14 | [build-system] 15 | requires = ["poetry-core>=1.0.0"] 16 | build-backend = "poetry.core.masonry.api" 17 | -------------------------------------------------------------------------------- /magical_creatures/asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for magical_creatures project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'magical_creatures.settings') 15 | 16 | application = get_asgi_application() 17 | -------------------------------------------------------------------------------- /magical_creatures/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for magical_creatures 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/3.1/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', 'magical_creatures.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 14 | -------------------------------------------------------------------------------- /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 | """Run administrative tasks.""" 9 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'magical_creatures.settings') 10 | try: 11 | from django.core.management import execute_from_command_line 12 | except ImportError as exc: 13 | raise ImportError( 14 | "Couldn't import Django. Are you sure it's installed and " 15 | "available on your PYTHONPATH environment variable? Did you " 16 | "forget to activate a virtual environment?" 17 | ) from exc 18 | execute_from_command_line(sys.argv) 19 | 20 | 21 | if __name__ == '__main__': 22 | main() 23 | -------------------------------------------------------------------------------- /magical_creatures/urls.py: -------------------------------------------------------------------------------- 1 | """magical_creatures URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/3.1/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, include 18 | 19 | from www.views import index 20 | 21 | urlpatterns = [ 22 | path("admin/", admin.site.urls), 23 | path("", index), 24 | path("unicorn/", include("django_unicorn.urls")), 25 | ] 26 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Adam Hill 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. -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | asgiref @ file:///C:/Users/Lenovo/AppData/Local/pypoetry/Cache/artifacts/9c/90/26/d9fa1dfd567d8ba46faa44b741eb6442f3b97eb9f10a40bc1ad7a7f10e/asgiref-3.3.1-py3-none-any.whl 2 | beautifulsoup4 @ file:///C:/Users/Lenovo/AppData/Local/pypoetry/Cache/artifacts/eb/47/47/287c1b8a386f9437d562f9221ae959756bc5bbfcd541c38c17968dfe8a/beautifulsoup4-4.9.3-py3-none-any.whl 3 | cachetools @ file:///C:/Users/Lenovo/AppData/Local/pypoetry/Cache/artifacts/62/00/1f/ae1f1cd9eeaccf6a67978ad4c30e7bf615a5b9a4301e0857116e93c966/cachetools-4.2.0-py3-none-any.whl 4 | Django @ file:///C:/Users/Lenovo/AppData/Local/pypoetry/Cache/artifacts/ba/bf/03/8ccf81ef35756f700d9fea51f565add2b97402eb4a2445122d728e348e/Django-3.1.4-py3-none-any.whl 5 | django-unicorn @ file:///C:/Users/Lenovo/AppData/Local/pypoetry/Cache/artifacts/d8/7c/cc/8ce545956cda7b6d380849f232d20f521e4767f4c392b102816877fe39/django_unicorn-0.13.0-py3-none-any.whl 6 | magical-creatures==0.1.0 7 | orjson @ file:///C:/Users/Lenovo/AppData/Local/pypoetry/Cache/artifacts/62/db/7a/4f4a656c682724688aaf88ce547d85cf32ac6f33d694d0129b679bc39b/orjson-3.4.6-cp39-none-win_amd64.whl 8 | pytz @ file:///C:/Users/Lenovo/AppData/Local/pypoetry/Cache/artifacts/c6/bb/04/21098a684ef4022fe42ab07dfca47a49a953c3fb8599e8c0645c717a82/pytz-2020.4-py2.py3-none-any.whl 9 | shortuuid @ file:///C:/Users/Lenovo/AppData/Local/pypoetry/Cache/artifacts/80/85/8d/5bdb9fbab8b4fc7bd9599a4982cac0ae2498f4c863d13869d4e1e7b722/shortuuid-1.0.1-py3-none-any.whl 10 | soupsieve @ file:///C:/Users/Lenovo/AppData/Local/pypoetry/Cache/artifacts/36/91/dd/14358bbb9ccf9cfe4cd257f66474ba85420f9626c528ccce00e5ac2dc5/soupsieve-2.1-py3-none-any.whl 11 | sqlparse @ file:///C:/Users/Lenovo/AppData/Local/pypoetry/Cache/artifacts/bc/af/02/8aa71b17fd39b26b858293918c5c6412f83768a0bfd0a4626f660aa5f8/sqlparse-0.4.1-py3-none-any.whl 12 | wrapt==1.12.1 13 | -------------------------------------------------------------------------------- /.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 | share/python-wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | MANIFEST 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .nox/ 43 | .coverage 44 | .coverage.* 45 | .cache 46 | nosetests.xml 47 | coverage.xml 48 | *.cover 49 | *.py,cover 50 | .hypothesis/ 51 | .pytest_cache/ 52 | cover/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | .pybuilder/ 76 | target/ 77 | 78 | # Jupyter Notebook 79 | .ipynb_checkpoints 80 | 81 | # IPython 82 | profile_default/ 83 | ipython_config.py 84 | 85 | # pyenv 86 | # For a library or package, you might want to ignore these files since the code is 87 | # intended to run in multiple environments; otherwise, check them in: 88 | # .python-version 89 | 90 | # pipenv 91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 94 | # install all needed dependencies. 95 | #Pipfile.lock 96 | 97 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 98 | __pypackages__/ 99 | 100 | # Celery stuff 101 | celerybeat-schedule 102 | celerybeat.pid 103 | 104 | # SageMath parsed files 105 | *.sage.py 106 | 107 | # Environments 108 | .env 109 | .venv 110 | env/ 111 | venv/ 112 | ENV/ 113 | env.bak/ 114 | venv.bak/ 115 | 116 | # Spyder project settings 117 | .spyderproject 118 | .spyproject 119 | 120 | # Rope project settings 121 | .ropeproject 122 | 123 | # mkdocs documentation 124 | /site 125 | 126 | # mypy 127 | .mypy_cache/ 128 | .dmypy.json 129 | dmypy.json 130 | 131 | # Pyre type checker 132 | .pyre/ 133 | 134 | # pytype static type analyzer 135 | .pytype/ 136 | 137 | # Cython debug symbols 138 | cython_debug/ 139 | -------------------------------------------------------------------------------- /magical_creatures/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for magical_creatures project. 3 | 4 | Generated by 'django-admin startproject' using Django 3.1.3. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.1/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/3.1/ref/settings/ 11 | """ 12 | 13 | from pathlib import Path 14 | 15 | # Build paths inside the project like this: BASE_DIR / 'subdir'. 16 | BASE_DIR = Path(__file__).resolve().parent.parent 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = "+5(9!%*#f2oac110-8e!iz=6gp3dzuh1e0fjs-xj3kyp^4hnvn" 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 | "www", 41 | "django_unicorn", 42 | "unicorn", 43 | ] 44 | 45 | MIDDLEWARE = [ 46 | "django.middleware.security.SecurityMiddleware", 47 | "django.contrib.sessions.middleware.SessionMiddleware", 48 | "django.middleware.common.CommonMiddleware", 49 | "django.middleware.csrf.CsrfViewMiddleware", 50 | "django.contrib.auth.middleware.AuthenticationMiddleware", 51 | "django.contrib.messages.middleware.MessageMiddleware", 52 | "django.middleware.clickjacking.XFrameOptionsMiddleware", 53 | ] 54 | 55 | ROOT_URLCONF = "magical_creatures.urls" 56 | 57 | TEMPLATES = [ 58 | { 59 | "BACKEND": "django.template.backends.django.DjangoTemplates", 60 | "DIRS": [], 61 | "APP_DIRS": True, 62 | "OPTIONS": { 63 | "context_processors": [ 64 | "django.template.context_processors.debug", 65 | "django.template.context_processors.request", 66 | "django.contrib.auth.context_processors.auth", 67 | "django.contrib.messages.context_processors.messages", 68 | ], 69 | }, 70 | }, 71 | ] 72 | 73 | WSGI_APPLICATION = "magical_creatures.wsgi.application" 74 | 75 | 76 | # Database 77 | # https://docs.djangoproject.com/en/3.1/ref/settings/#databases 78 | 79 | DATABASES = { 80 | "default": { 81 | "ENGINE": "django.db.backends.sqlite3", 82 | "NAME": BASE_DIR / "db.sqlite3", 83 | } 84 | } 85 | 86 | 87 | # Password validation 88 | # https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators 89 | 90 | AUTH_PASSWORD_VALIDATORS = [ 91 | { 92 | "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", 93 | }, 94 | { 95 | "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", 96 | }, 97 | { 98 | "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", 99 | }, 100 | { 101 | "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", 102 | }, 103 | ] 104 | 105 | 106 | # Internationalization 107 | # https://docs.djangoproject.com/en/3.1/topics/i18n/ 108 | 109 | LANGUAGE_CODE = "en-us" 110 | 111 | TIME_ZONE = "UTC" 112 | 113 | USE_I18N = True 114 | 115 | USE_L10N = True 116 | 117 | USE_TZ = True 118 | 119 | 120 | # Static files (CSS, JavaScript, Images) 121 | # https://docs.djangoproject.com/en/3.1/howto/static-files/ 122 | 123 | STATIC_URL = "/static/" 124 | 125 | UNICORN = { 126 | "MINIFIED": True, 127 | } 128 | 129 | if DEBUG: 130 | import mimetypes 131 | mimetypes.add_type("application/javascript", ".js", True) 132 | -------------------------------------------------------------------------------- /poetry.lock: -------------------------------------------------------------------------------- 1 | [[package]] 2 | name = "asgiref" 3 | version = "3.3.4" 4 | description = "ASGI specs, helper code, and adapters" 5 | category = "main" 6 | optional = false 7 | python-versions = ">=3.6" 8 | 9 | [package.dependencies] 10 | typing-extensions = {version = "*", markers = "python_version < \"3.8\""} 11 | 12 | [package.extras] 13 | tests = ["pytest", "pytest-asyncio", "mypy (>=0.800)"] 14 | 15 | [[package]] 16 | name = "beautifulsoup4" 17 | version = "4.9.3" 18 | description = "Screen-scraping library" 19 | category = "main" 20 | optional = false 21 | python-versions = "*" 22 | 23 | [package.dependencies] 24 | soupsieve = {version = ">1.2", markers = "python_version >= \"3.0\""} 25 | 26 | [package.extras] 27 | html5lib = ["html5lib"] 28 | lxml = ["lxml"] 29 | 30 | [[package]] 31 | name = "cachetools" 32 | version = "4.2.2" 33 | description = "Extensible memoizing collections and decorators" 34 | category = "main" 35 | optional = false 36 | python-versions = "~=3.5" 37 | 38 | [[package]] 39 | name = "dataclasses" 40 | version = "0.8" 41 | description = "A backport of the dataclasses module for Python 3.6" 42 | category = "main" 43 | optional = false 44 | python-versions = ">=3.6, <3.7" 45 | 46 | [[package]] 47 | name = "decorator" 48 | version = "4.4.2" 49 | description = "Decorators for Humans" 50 | category = "main" 51 | optional = false 52 | python-versions = ">=2.6, !=3.0.*, !=3.1.*" 53 | 54 | [[package]] 55 | name = "django" 56 | version = "3.2.3" 57 | description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." 58 | category = "main" 59 | optional = false 60 | python-versions = ">=3.6" 61 | 62 | [package.dependencies] 63 | asgiref = ">=3.3.2,<4" 64 | pytz = "*" 65 | sqlparse = ">=0.2.2" 66 | 67 | [package.extras] 68 | argon2 = ["argon2-cffi (>=19.1.0)"] 69 | bcrypt = ["bcrypt"] 70 | 71 | [[package]] 72 | name = "django-unicorn" 73 | version = "0.27.2" 74 | description = "A magical full-stack framework for Django." 75 | category = "main" 76 | optional = false 77 | python-versions = ">=3.6,<4.0" 78 | 79 | [package.dependencies] 80 | beautifulsoup4 = ">=4.8.0" 81 | cachetools = ">=4.1.1,<5.0.0" 82 | dataclasses = {version = ">=0.8.0,<0.9.0", markers = "python_version < \"3.7\""} 83 | decorator = ">=4.4.2,<5.0.0" 84 | django = ">=2.2" 85 | orjson = ">=3.2.1,<4.0.0" 86 | shortuuid = ">=1.0.1,<2.0.0" 87 | 88 | [[package]] 89 | name = "orjson" 90 | version = "3.5.2" 91 | description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" 92 | category = "main" 93 | optional = false 94 | python-versions = ">=3.6" 95 | 96 | [[package]] 97 | name = "pytz" 98 | version = "2021.1" 99 | description = "World timezone definitions, modern and historical" 100 | category = "main" 101 | optional = false 102 | python-versions = "*" 103 | 104 | [[package]] 105 | name = "shortuuid" 106 | version = "1.0.1" 107 | description = "A generator library for concise, unambiguous and URL-safe UUIDs." 108 | category = "main" 109 | optional = false 110 | python-versions = ">=3.5" 111 | 112 | [[package]] 113 | name = "soupsieve" 114 | version = "2.2.1" 115 | description = "A modern CSS selector implementation for Beautiful Soup." 116 | category = "main" 117 | optional = false 118 | python-versions = ">=3.6" 119 | 120 | [[package]] 121 | name = "sqlparse" 122 | version = "0.4.1" 123 | description = "A non-validating SQL parser." 124 | category = "main" 125 | optional = false 126 | python-versions = ">=3.5" 127 | 128 | [[package]] 129 | name = "typing-extensions" 130 | version = "3.10.0.0" 131 | description = "Backported and Experimental Type Hints for Python 3.5+" 132 | category = "main" 133 | optional = false 134 | python-versions = "*" 135 | 136 | [metadata] 137 | lock-version = "1.1" 138 | python-versions = "^3.6" 139 | content-hash = "453d5fbab40c001848c56778a4fd31ddfe3df032ea0558aaa6f4100ac5d9e004" 140 | 141 | [metadata.files] 142 | asgiref = [ 143 | {file = "asgiref-3.3.4-py3-none-any.whl", hash = "sha256:92906c611ce6c967347bbfea733f13d6313901d54dcca88195eaeb52b2a8e8ee"}, 144 | {file = "asgiref-3.3.4.tar.gz", hash = "sha256:d1216dfbdfb63826470995d31caed36225dcaf34f182e0fa257a4dd9e86f1b78"}, 145 | ] 146 | beautifulsoup4 = [ 147 | {file = "beautifulsoup4-4.9.3-py2-none-any.whl", hash = "sha256:4c98143716ef1cb40bf7f39a8e3eec8f8b009509e74904ba3a7b315431577e35"}, 148 | {file = "beautifulsoup4-4.9.3-py3-none-any.whl", hash = "sha256:fff47e031e34ec82bf17e00da8f592fe7de69aeea38be00523c04623c04fb666"}, 149 | {file = "beautifulsoup4-4.9.3.tar.gz", hash = "sha256:84729e322ad1d5b4d25f805bfa05b902dd96450f43842c4e99067d5e1369eb25"}, 150 | ] 151 | cachetools = [ 152 | {file = "cachetools-4.2.2-py3-none-any.whl", hash = "sha256:2cc0b89715337ab6dbba85b5b50effe2b0c74e035d83ee8ed637cf52f12ae001"}, 153 | {file = "cachetools-4.2.2.tar.gz", hash = "sha256:61b5ed1e22a0924aed1d23b478f37e8d52549ff8a961de2909c69bf950020cff"}, 154 | ] 155 | dataclasses = [ 156 | {file = "dataclasses-0.8-py3-none-any.whl", hash = "sha256:0201d89fa866f68c8ebd9d08ee6ff50c0b255f8ec63a71c16fda7af82bb887bf"}, 157 | {file = "dataclasses-0.8.tar.gz", hash = "sha256:8479067f342acf957dc82ec415d355ab5edb7e7646b90dc6e2fd1d96ad084c97"}, 158 | ] 159 | decorator = [ 160 | {file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"}, 161 | {file = "decorator-4.4.2.tar.gz", hash = "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"}, 162 | ] 163 | django = [ 164 | {file = "Django-3.2.3-py3-none-any.whl", hash = "sha256:7e0a1393d18c16b503663752a8b6790880c5084412618990ce8a81cc908b4962"}, 165 | {file = "Django-3.2.3.tar.gz", hash = "sha256:13ac78dbfd189532cad8f383a27e58e18b3d33f80009ceb476d7fcbfc5dcebd8"}, 166 | ] 167 | django-unicorn = [ 168 | {file = "django-unicorn-0.27.2.tar.gz", hash = "sha256:0b0ba4a1dcb689e0968f2688194f92692542b93ad6f2f73a450f22efd0d22965"}, 169 | {file = "django_unicorn-0.27.2-py3-none-any.whl", hash = "sha256:fd33ab6cf80490ca11daa8f232df717cabb413eaba20bf3ad393f634562da6b0"}, 170 | ] 171 | orjson = [ 172 | {file = "orjson-3.5.2-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:2ba4165883fbef0985bce60bddbf91bc5cea77cc22b1c12fe7a716c6323ab1e7"}, 173 | {file = "orjson-3.5.2-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:cee746d186ba9efa47b9d52a649ee0617456a9a4d7a2cbd3ec06330bb9cb372a"}, 174 | {file = "orjson-3.5.2-cp36-cp36m-macosx_10_7_x86_64.whl", hash = "sha256:8591a25a31a89cf2a33e30eb516ab028bad2c72fed04e323917114aaedc07c7d"}, 175 | {file = "orjson-3.5.2-cp36-cp36m-macosx_10_9_universal2.whl", hash = "sha256:38cb8cdbf43eafc6dcbfb10a9e63c80727bb916aee0f75caf5f90e5355b266e1"}, 176 | {file = "orjson-3.5.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:96b403796fc7e44bae843a2a83923925fe048f3a67c10a298fdfc0ff46163c14"}, 177 | {file = "orjson-3.5.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:5b66a62d4c0c44441b23fafcd3d0892296d9793361b14bcc5a5645c88b6a4a71"}, 178 | {file = "orjson-3.5.2-cp36-none-win_amd64.whl", hash = "sha256:609e93919268fadb871aafb7f550c3fe8d3e8c1305cadcc1610b414113b7034e"}, 179 | {file = "orjson-3.5.2-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:200bd4491052d13696456a92d23f086b68b526c2464248733964e8165ac60888"}, 180 | {file = "orjson-3.5.2-cp37-cp37m-macosx_10_9_universal2.whl", hash = "sha256:cc614bf6bfe0181e51dd98a9c53669f08d4d8641efbf1a287113da3059773dea"}, 181 | {file = "orjson-3.5.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:43576bed3be300e9c02629a8d5fb3340fe6474765e6eee9610067def4b3ac19c"}, 182 | {file = "orjson-3.5.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:acd735718b531b78858a7e932c58424c5a3e39e04d61bba3d95ce8a8498ea9e9"}, 183 | {file = "orjson-3.5.2-cp37-none-win_amd64.whl", hash = "sha256:7503145ffd1ae90d487860b97e2867ec61c2c8f001209bb12700ba7833df8ddf"}, 184 | {file = "orjson-3.5.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:9c37cf3dbc9c81abed04ba4854454e9f0d8ac7c05fb6c4f36545733e90be6af2"}, 185 | {file = "orjson-3.5.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e6ef00ddc637b7d13926aaccdabac363efdfd348c132410eb054c27e2eae6a7"}, 186 | {file = "orjson-3.5.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:9d0834ca40c6e467fa1f1db3f83a8c3562c03eb2b7067ad09de5019592edb88f"}, 187 | {file = "orjson-3.5.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:d4a2ddc6342a8280dafaa69827b387b95856ef0a6c5812fe91f5bd21ddd2ef36"}, 188 | {file = "orjson-3.5.2-cp38-none-win_amd64.whl", hash = "sha256:f54f8bcf24812a524e8904a80a365f7a287d82fc6ebdee528149616070abe5ab"}, 189 | {file = "orjson-3.5.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:8b429471398ea37d848fb53bca6a8c42fb776c278f4fcb6a1d651b8f1fb64947"}, 190 | {file = "orjson-3.5.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13fd458110fbe019c2a67ee539678189444f73bc09b27983c9b42663c63e0445"}, 191 | {file = "orjson-3.5.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:8bf1145a06e1245f0c8a8c32df6ffe52d214eb4eb88c3fb32e4ed14e3dc38e0e"}, 192 | {file = "orjson-3.5.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:7e3434010e3f0680e92bb0a6094e4d5c939d0c4258c76397c6bd5263c7d62e86"}, 193 | {file = "orjson-3.5.2-cp39-none-win_amd64.whl", hash = "sha256:df9730cc8cd22b3f54aa55317257f3279e6300157fc0f4ed4424586cd7eb012d"}, 194 | {file = "orjson-3.5.2.tar.gz", hash = "sha256:f385253a6ddac37ea422ec2c0d35772b4f5bf0dc0803ce44543bf7e530423ef8"}, 195 | ] 196 | pytz = [ 197 | {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, 198 | {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, 199 | ] 200 | shortuuid = [ 201 | {file = "shortuuid-1.0.1-py3-none-any.whl", hash = "sha256:492c7402ff91beb1342a5898bd61ea953985bf24a41cd9f247409aa2e03c8f77"}, 202 | {file = "shortuuid-1.0.1.tar.gz", hash = "sha256:3c11d2007b915c43bee3e10625f068d8a349e04f0d81f08f5fa08507427ebf1f"}, 203 | ] 204 | soupsieve = [ 205 | {file = "soupsieve-2.2.1-py3-none-any.whl", hash = "sha256:c2c1c2d44f158cdbddab7824a9af8c4f83c76b1e23e049479aa432feb6c4c23b"}, 206 | {file = "soupsieve-2.2.1.tar.gz", hash = "sha256:052774848f448cf19c7e959adf5566904d525f33a3f8b6ba6f6f8f26ec7de0cc"}, 207 | ] 208 | sqlparse = [ 209 | {file = "sqlparse-0.4.1-py3-none-any.whl", hash = "sha256:017cde379adbd6a1f15a61873f43e8274179378e95ef3fede90b5aa64d304ed0"}, 210 | {file = "sqlparse-0.4.1.tar.gz", hash = "sha256:0f91fd2e829c44362cbcfab3e9ae12e22badaa8a29ad5ff599f9ec109f0454e8"}, 211 | ] 212 | typing-extensions = [ 213 | {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"}, 214 | {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"}, 215 | {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"}, 216 | ] 217 | --------------------------------------------------------------------------------