├── 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 |
4 |
5 |
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 |
6 |
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 |
4 |
5 |
12 |
13 |
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 |
--------------------------------------------------------------------------------