Switch from django compressor to whitenoise
This commit is contained in:
parent
a5c478dc90
commit
ee381b546c
9 changed files with 83 additions and 182 deletions
|
@ -1,37 +0,0 @@
|
||||||
import itertools
|
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
|
|
||||||
class DummyArticleWithCode:
|
|
||||||
has_code = True
|
|
||||||
|
|
||||||
|
|
||||||
class DummyArticleNoCode:
|
|
||||||
has_code = False
|
|
||||||
|
|
||||||
|
|
||||||
class DummyNonAuthenticatedUser:
|
|
||||||
is_authenticated = False
|
|
||||||
|
|
||||||
|
|
||||||
class DummyAuthenticatedUser:
|
|
||||||
is_authenticated = True
|
|
||||||
|
|
||||||
|
|
||||||
def offline_context():
|
|
||||||
article_possibilities = [None, DummyArticleWithCode(), DummyArticleNoCode()]
|
|
||||||
user_possibilities = [DummyAuthenticatedUser(), DummyNonAuthenticatedUser()]
|
|
||||||
goatcounter_possibilities = [None, settings.GOATCOUNTER_DOMAIN]
|
|
||||||
all_possibilities = [
|
|
||||||
article_possibilities,
|
|
||||||
user_possibilities,
|
|
||||||
goatcounter_possibilities,
|
|
||||||
]
|
|
||||||
for _tuple in itertools.product(*all_possibilities):
|
|
||||||
yield {
|
|
||||||
"STATIC_URL": settings.STATIC_URL,
|
|
||||||
"article": _tuple[0],
|
|
||||||
"user": _tuple[1],
|
|
||||||
"goatcounter_domain": _tuple[2],
|
|
||||||
}
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% load static compress %}
|
{% load static %}
|
||||||
{% spaceless %}
|
{% spaceless %}
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
@ -14,17 +14,15 @@
|
||||||
{% include "articles/snippets/analytics_head.html" %}
|
{% include "articles/snippets/analytics_head.html" %}
|
||||||
{% include "articles/snippets/page_metadata.html" %}
|
{% include "articles/snippets/page_metadata.html" %}
|
||||||
|
|
||||||
{% compress css inline %}
|
<link rel="stylesheet" href="{% static "vendor/newcss.css" %}" type="text/css">
|
||||||
<link rel="stylesheet" href="{% static "vendor/newcss.css" %}" type="text/css">
|
<link rel="stylesheet" href="{% static "public.css" %}" type="text/css">
|
||||||
<link rel="stylesheet" href="{% static "public.css" %}" type="text/css">
|
<link rel="stylesheet" href="{% static "admonitions.css" %}" type="text/css">
|
||||||
<link rel="stylesheet" href="{% static "admonitions.css" %}" type="text/css">
|
{% if article and article.has_code %}
|
||||||
{% if article and article.has_code %}
|
<link rel="stylesheet" href="{% static "vendor/codehilite.css" %}" type="text/css">
|
||||||
<link rel="stylesheet" href="{% static "vendor/codehilite.css" %}" type="text/css">
|
{% endif %}
|
||||||
{% endif %}
|
{% if user.is_authenticated %}
|
||||||
{% if user.is_authenticated %}
|
<link rel="stylesheet" href="{% static "authenticated.css" %}">
|
||||||
<link rel="stylesheet" href="{% static "authenticated.css" %}">
|
{% endif %}
|
||||||
{% endif %}
|
|
||||||
{% endcompress %}
|
|
||||||
|
|
||||||
{% block append_css %}
|
{% block append_css %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -61,11 +59,9 @@
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
{% include "articles/snippets/analytics.html" %}
|
{% include "articles/snippets/analytics.html" %}
|
||||||
{% compress js inline %}
|
{% if user.is_authenticated %}
|
||||||
{% if user.is_authenticated %}
|
<script src="{% static 'edit-keymap.js' %}" async defer></script>
|
||||||
<script src="{% static 'edit-keymap.js' %}" async defer></script>
|
{% endif %}
|
||||||
{% endif %}
|
|
||||||
{% endcompress %}
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,15 +1,13 @@
|
||||||
{% load static compress %}
|
{% load static %}
|
||||||
|
|
||||||
{% if not user.is_authenticated and goatcounter_domain is not None %}
|
{% if not user.is_authenticated and goatcounter_domain is not None %}
|
||||||
{% compress js inline %}
|
<script>
|
||||||
<script>
|
window.goatcounter = {
|
||||||
window.goatcounter = {
|
endpoint: 'https://{{ goatcounter_domain }}/count',
|
||||||
endpoint: 'https://{{ goatcounter_domain }}/count',
|
allow_local: true,
|
||||||
allow_local: true,
|
}
|
||||||
}
|
</script>
|
||||||
</script>
|
<script async defer src="{% static "vendor/goatcounter.js" %}"></script>
|
||||||
<script async defer src="{% static "vendor/goatcounter.js" %}"></script>
|
|
||||||
{% endcompress %}
|
|
||||||
<noscript>
|
<noscript>
|
||||||
<img src="https://{{ goatcounter_domain }}/count?p={{ request.get_full_path }}"
|
<img src="https://{{ goatcounter_domain }}/count?p={{ request.get_full_path }}"
|
||||||
alt="GoatCounter tracking pixel">
|
alt="GoatCounter tracking pixel">
|
||||||
|
|
|
@ -42,8 +42,8 @@ EMAIL_BACKEND = "anymail.backends.mailgun.EmailBackend"
|
||||||
|
|
||||||
|
|
||||||
# SECURITY WARNING: don't run with debug turned on in production!
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
DEBUG = os.getenv("DEBUG", "true").lower() == "true"
|
# DEBUG = os.getenv("DEBUG", "true").lower() == "true"
|
||||||
|
DEBUG = False
|
||||||
ALLOWED_HOSTS = ["localhost"] # Required for healthcheck
|
ALLOWED_HOSTS = ["localhost"] # Required for healthcheck
|
||||||
if DEBUG:
|
if DEBUG:
|
||||||
ALLOWED_HOSTS.extend(["127.0.0.1"])
|
ALLOWED_HOSTS.extend(["127.0.0.1"])
|
||||||
|
@ -60,6 +60,7 @@ CSRF_COOKIE_SECURE = not DEBUG
|
||||||
# Application definition
|
# Application definition
|
||||||
|
|
||||||
INSTALLED_APPS = [
|
INSTALLED_APPS = [
|
||||||
|
"whitenoise.runserver_nostatic",
|
||||||
"django.contrib.admin",
|
"django.contrib.admin",
|
||||||
"django.contrib.auth",
|
"django.contrib.auth",
|
||||||
"django.contrib.contenttypes",
|
"django.contrib.contenttypes",
|
||||||
|
@ -70,12 +71,12 @@ INSTALLED_APPS = [
|
||||||
"attachments",
|
"attachments",
|
||||||
"anymail",
|
"anymail",
|
||||||
"django_cleanup.apps.CleanupConfig",
|
"django_cleanup.apps.CleanupConfig",
|
||||||
"compressor",
|
|
||||||
"debug_toolbar",
|
"debug_toolbar",
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
"django.middleware.security.SecurityMiddleware",
|
"django.middleware.security.SecurityMiddleware",
|
||||||
|
"whitenoise.middleware.WhiteNoiseMiddleware",
|
||||||
"debug_toolbar.middleware.DebugToolbarMiddleware",
|
"debug_toolbar.middleware.DebugToolbarMiddleware",
|
||||||
"django.contrib.sessions.middleware.SessionMiddleware",
|
"django.contrib.sessions.middleware.SessionMiddleware",
|
||||||
"django.middleware.common.CommonMiddleware",
|
"django.middleware.common.CommonMiddleware",
|
||||||
|
@ -181,13 +182,7 @@ USE_TZ = True
|
||||||
|
|
||||||
STATIC_URL = "/static/"
|
STATIC_URL = "/static/"
|
||||||
STATIC_ROOT = BASE_DIR / "staticfiles"
|
STATIC_ROOT = BASE_DIR / "staticfiles"
|
||||||
STATICFILES_STORAGE = "django.contrib.staticfiles.storage.StaticFilesStorage"
|
STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
|
||||||
|
|
||||||
STATICFILES_FINDERS = [
|
|
||||||
"django.contrib.staticfiles.finders.FileSystemFinder",
|
|
||||||
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
|
|
||||||
"compressor.finders.CompressorFinder",
|
|
||||||
]
|
|
||||||
|
|
||||||
MEDIA_URL = "/media/"
|
MEDIA_URL = "/media/"
|
||||||
MEDIA_ROOT = BASE_DIR / "media"
|
MEDIA_ROOT = BASE_DIR / "media"
|
||||||
|
@ -214,19 +209,3 @@ SHORTPIXEL_RESIZE_HEIGHT = int(os.getenv("SHORTPIXEL_RESIZE_HEIGHT", 10000))
|
||||||
GOATCOUNTER_DOMAIN = os.getenv("GOATCOUNTER_DOMAIN")
|
GOATCOUNTER_DOMAIN = os.getenv("GOATCOUNTER_DOMAIN")
|
||||||
|
|
||||||
LOGIN_URL = "admin:login"
|
LOGIN_URL = "admin:login"
|
||||||
|
|
||||||
# COMPRESS_ENABLED = True # Enable this if you want to force compression during dev
|
|
||||||
COMPRESS_FILTERS = {
|
|
||||||
"css": [
|
|
||||||
"compressor.filters.css_default.CssAbsoluteFilter",
|
|
||||||
"compressor.filters.cssmin.rCSSMinFilter",
|
|
||||||
],
|
|
||||||
"js": [
|
|
||||||
"compressor.filters.jsmin.CalmjsFilter",
|
|
||||||
],
|
|
||||||
}
|
|
||||||
if DEBUG:
|
|
||||||
COMPRESS_DEBUG_TOGGLE = "nocompress"
|
|
||||||
|
|
||||||
COMPRESS_OFFLINE = True
|
|
||||||
COMPRESS_OFFLINE_CONTEXT = "articles.compressor.offline_context"
|
|
||||||
|
|
|
@ -23,11 +23,6 @@ server {
|
||||||
gzip_http_version 1.1;
|
gzip_http_version 1.1;
|
||||||
gzip_vary on;
|
gzip_vary on;
|
||||||
|
|
||||||
location /static/ {
|
|
||||||
alias /app/static/;
|
|
||||||
expires 30d;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /media/ {
|
location /media/ {
|
||||||
alias /app/media/;
|
alias /app/media/;
|
||||||
expires 30d;
|
expires 30d;
|
||||||
|
|
|
@ -23,11 +23,6 @@ server {
|
||||||
gzip_http_version 1.1;
|
gzip_http_version 1.1;
|
||||||
gzip_vary on;
|
gzip_vary on;
|
||||||
|
|
||||||
location /static/ {
|
|
||||||
alias /app/static/;
|
|
||||||
expires 30d;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /media/ {
|
location /media/ {
|
||||||
alias /app/media/;
|
alias /app/media/;
|
||||||
expires 30d;
|
expires 30d;
|
||||||
|
|
|
@ -2,5 +2,4 @@
|
||||||
set -eux
|
set -eux
|
||||||
python manage.py migrate --noinput
|
python manage.py migrate --noinput
|
||||||
python manage.py collectstatic --noinput --clear
|
python manage.py collectstatic --noinput --clear
|
||||||
python manage.py compress
|
|
||||||
gunicorn blog.wsgi -b 0.0.0.0:8000 --log-file -
|
gunicorn blog.wsgi -b 0.0.0.0:8000 --log-file -
|
||||||
|
|
134
poetry.lock
generated
134
poetry.lock
generated
|
@ -55,16 +55,13 @@ html5lib = ["html5lib"]
|
||||||
lxml = ["lxml"]
|
lxml = ["lxml"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "calmjs.parse"
|
name = "brotli"
|
||||||
version = "1.2.5"
|
version = "1.0.9"
|
||||||
description = "Various parsers for ECMA standards."
|
description = "Python bindings for the Brotli compression library"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
|
|
||||||
[package.dependencies]
|
|
||||||
ply = ">=3.6"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "certifi"
|
name = "certifi"
|
||||||
version = "2020.12.5"
|
version = "2020.12.5"
|
||||||
|
@ -158,17 +155,6 @@ six = "*"
|
||||||
amazon_ses = ["boto3"]
|
amazon_ses = ["boto3"]
|
||||||
sparkpost = ["sparkpost"]
|
sparkpost = ["sparkpost"]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "django-appconf"
|
|
||||||
version = "1.0.4"
|
|
||||||
description = "A helper class for handling configuration defaults of packaged apps gracefully."
|
|
||||||
category = "main"
|
|
||||||
optional = false
|
|
||||||
python-versions = "*"
|
|
||||||
|
|
||||||
[package.dependencies]
|
|
||||||
django = "*"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "django-cleanup"
|
name = "django-cleanup"
|
||||||
version = "5.1.0"
|
version = "5.1.0"
|
||||||
|
@ -177,20 +163,6 @@ category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "django-compressor"
|
|
||||||
version = "2.4"
|
|
||||||
description = "Compresses linked and inline JavaScript or CSS into single cached files."
|
|
||||||
category = "main"
|
|
||||||
optional = false
|
|
||||||
python-versions = "*"
|
|
||||||
|
|
||||||
[package.dependencies]
|
|
||||||
django-appconf = ">=1.0.3"
|
|
||||||
rcssmin = "1.0.6"
|
|
||||||
rjsmin = "1.1.0"
|
|
||||||
six = ">=1.12.0"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "django-debug-toolbar"
|
name = "django-debug-toolbar"
|
||||||
version = "3.2"
|
version = "3.2"
|
||||||
|
@ -350,14 +322,6 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||||
[package.extras]
|
[package.extras]
|
||||||
dev = ["pre-commit", "tox"]
|
dev = ["pre-commit", "tox"]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ply"
|
|
||||||
version = "3.11"
|
|
||||||
description = "Python Lex & Yacc"
|
|
||||||
category = "main"
|
|
||||||
optional = false
|
|
||||||
python-versions = "*"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pre-commit"
|
name = "pre-commit"
|
||||||
version = "2.11.1"
|
version = "2.11.1"
|
||||||
|
@ -559,14 +523,6 @@ urllib3 = ">=1.21.1,<1.27"
|
||||||
security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"]
|
security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"]
|
||||||
socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
|
socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rjsmin"
|
|
||||||
version = "1.1.0"
|
|
||||||
description = "Javascript Minifier"
|
|
||||||
category = "main"
|
|
||||||
optional = false
|
|
||||||
python-versions = "*"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "six"
|
name = "six"
|
||||||
version = "1.15.0"
|
version = "1.15.0"
|
||||||
|
@ -644,6 +600,20 @@ six = ">=1.9.0,<2"
|
||||||
docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=19.9.0rc1)"]
|
docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=19.9.0rc1)"]
|
||||||
testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)", "xonsh (>=0.9.16)"]
|
testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)", "xonsh (>=0.9.16)"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "whitenoise"
|
||||||
|
version = "5.2.0"
|
||||||
|
description = "Radically simplified static file serving for WSGI applications"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.5, <4"
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
Brotli = {version = "*", optional = true, markers = "extra == \"brotli\""}
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
brotli = ["brotli"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wrapt"
|
name = "wrapt"
|
||||||
version = "1.12.1"
|
version = "1.12.1"
|
||||||
|
@ -667,7 +637,7 @@ multidict = ">=4.0"
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "1.1"
|
lock-version = "1.1"
|
||||||
python-versions = "^3.8"
|
python-versions = "^3.8"
|
||||||
content-hash = "cfa9f7694a048b9ed5f2bba17f2f9c3dd200ba13ad5b1cf6f320890787fd236c"
|
content-hash = "75428f7191094bbd90f5bb60010d46a7bb1d904cbea3abadfe7c97af6db1b1a3"
|
||||||
|
|
||||||
[metadata.files]
|
[metadata.files]
|
||||||
appdirs = [
|
appdirs = [
|
||||||
|
@ -691,10 +661,39 @@ beautifulsoup4 = [
|
||||||
{file = "beautifulsoup4-4.9.3-py3-none-any.whl", hash = "sha256:fff47e031e34ec82bf17e00da8f592fe7de69aeea38be00523c04623c04fb666"},
|
{file = "beautifulsoup4-4.9.3-py3-none-any.whl", hash = "sha256:fff47e031e34ec82bf17e00da8f592fe7de69aeea38be00523c04623c04fb666"},
|
||||||
{file = "beautifulsoup4-4.9.3.tar.gz", hash = "sha256:84729e322ad1d5b4d25f805bfa05b902dd96450f43842c4e99067d5e1369eb25"},
|
{file = "beautifulsoup4-4.9.3.tar.gz", hash = "sha256:84729e322ad1d5b4d25f805bfa05b902dd96450f43842c4e99067d5e1369eb25"},
|
||||||
]
|
]
|
||||||
"calmjs.parse" = [
|
brotli = [
|
||||||
{file = "calmjs.parse-1.2.5-py2-none-any.whl", hash = "sha256:dd2c576169e683f0a06b5e8908d7b9d134e756ae75763c21b721d9937b0b422a"},
|
{file = "Brotli-1.0.9-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:268fe94547ba25b58ebc724680609c8ee3e5a843202e9a381f6f9c5e8bdb5c70"},
|
||||||
{file = "calmjs.parse-1.2.5-py3-none-any.whl", hash = "sha256:163ae575c478944c3a54c8e26d5cca794a977c5bf160f6aaa3731b51ae88ab99"},
|
{file = "Brotli-1.0.9-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:c2415d9d082152460f2bd4e382a1e85aed233abc92db5a3880da2257dc7daf7b"},
|
||||||
{file = "calmjs.parse-1.2.5.zip", hash = "sha256:693d18bcfdb14f2a33f64288680adc138275d39de5980fb46f5b882df6e1dbde"},
|
{file = "Brotli-1.0.9-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5913a1177fc36e30fcf6dc868ce23b0453952c78c04c266d3149b3d39e1410d6"},
|
||||||
|
{file = "Brotli-1.0.9-cp27-cp27m-win32.whl", hash = "sha256:afde17ae04d90fbe53afb628f7f2d4ca022797aa093e809de5c3cf276f61bbfa"},
|
||||||
|
{file = "Brotli-1.0.9-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7cb81373984cc0e4682f31bc3d6be9026006d96eecd07ea49aafb06897746452"},
|
||||||
|
{file = "Brotli-1.0.9-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:db844eb158a87ccab83e868a762ea8024ae27337fc7ddcbfcddd157f841fdfe7"},
|
||||||
|
{file = "Brotli-1.0.9-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:c83aa123d56f2e060644427a882a36b3c12db93727ad7a7b9efd7d7f3e9cc2c4"},
|
||||||
|
{file = "Brotli-1.0.9-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:6b2ae9f5f67f89aade1fab0f7fd8f2832501311c363a21579d02defa844d9296"},
|
||||||
|
{file = "Brotli-1.0.9-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:68715970f16b6e92c574c30747c95cf8cf62804569647386ff032195dc89a430"},
|
||||||
|
{file = "Brotli-1.0.9-cp35-cp35m-win32.whl", hash = "sha256:defed7ea5f218a9f2336301e6fd379f55c655bea65ba2476346340a0ce6f74a1"},
|
||||||
|
{file = "Brotli-1.0.9-cp35-cp35m-win_amd64.whl", hash = "sha256:88c63a1b55f352b02c6ffd24b15ead9fc0e8bf781dbe070213039324922a2eea"},
|
||||||
|
{file = "Brotli-1.0.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:503fa6af7da9f4b5780bb7e4cbe0c639b010f12be85d02c99452825dd0feef3f"},
|
||||||
|
{file = "Brotli-1.0.9-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:40d15c79f42e0a2c72892bf407979febd9cf91f36f495ffb333d1d04cebb34e4"},
|
||||||
|
{file = "Brotli-1.0.9-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:93130612b837103e15ac3f9cbacb4613f9e348b58b3aad53721d92e57f96d46a"},
|
||||||
|
{file = "Brotli-1.0.9-cp36-cp36m-win32.whl", hash = "sha256:61a7ee1f13ab913897dac7da44a73c6d44d48a4adff42a5701e3239791c96e14"},
|
||||||
|
{file = "Brotli-1.0.9-cp36-cp36m-win_amd64.whl", hash = "sha256:1c48472a6ba3b113452355b9af0a60da5c2ae60477f8feda8346f8fd48e3e87c"},
|
||||||
|
{file = "Brotli-1.0.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b78a24b5fd13c03ee2b7b86290ed20efdc95da75a3557cc06811764d5ad1126"},
|
||||||
|
{file = "Brotli-1.0.9-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:9d12cf2851759b8de8ca5fde36a59c08210a97ffca0eb94c532ce7b17c6a3d1d"},
|
||||||
|
{file = "Brotli-1.0.9-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6c772d6c0a79ac0f414a9f8947cc407e119b8598de7621f39cacadae3cf57d12"},
|
||||||
|
{file = "Brotli-1.0.9-cp37-cp37m-win32.whl", hash = "sha256:f909bbbc433048b499cb9db9e713b5d8d949e8c109a2a548502fb9aa8630f0b1"},
|
||||||
|
{file = "Brotli-1.0.9-cp37-cp37m-win_amd64.whl", hash = "sha256:97f715cf371b16ac88b8c19da00029804e20e25f30d80203417255d239f228b5"},
|
||||||
|
{file = "Brotli-1.0.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:160c78292e98d21e73a4cc7f76a234390e516afcd982fa17e1422f7c6a9ce9c8"},
|
||||||
|
{file = "Brotli-1.0.9-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b663f1e02de5d0573610756398e44c130add0eb9a3fc912a09665332942a2efb"},
|
||||||
|
{file = "Brotli-1.0.9-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5b6ef7d9f9c38292df3690fe3e302b5b530999fa90014853dcd0d6902fb59f26"},
|
||||||
|
{file = "Brotli-1.0.9-cp38-cp38-win32.whl", hash = "sha256:35a3edbe18e876e596553c4007a087f8bcfd538f19bc116917b3c7522fca0429"},
|
||||||
|
{file = "Brotli-1.0.9-cp38-cp38-win_amd64.whl", hash = "sha256:269a5743a393c65db46a7bb982644c67ecba4b8d91b392403ad8a861ba6f495f"},
|
||||||
|
{file = "Brotli-1.0.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5cb1e18167792d7d21e21365d7650b72d5081ed476123ff7b8cac7f45189c0c7"},
|
||||||
|
{file = "Brotli-1.0.9-cp39-cp39-manylinux1_i686.whl", hash = "sha256:16d528a45c2e1909c2798f27f7bf0a3feec1dc9e50948e738b961618e38b6a7b"},
|
||||||
|
{file = "Brotli-1.0.9-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:56d027eace784738457437df7331965473f2c0da2c70e1a1f6fdbae5402e0389"},
|
||||||
|
{file = "Brotli-1.0.9-cp39-cp39-win32.whl", hash = "sha256:cfc391f4429ee0a9370aa93d812a52e1fee0f37a81861f4fdd1f4fb28e8547c3"},
|
||||||
|
{file = "Brotli-1.0.9-cp39-cp39-win_amd64.whl", hash = "sha256:854c33dad5ba0fbd6ab69185fec8dab89e13cda6b7d191ba111987df74f38761"},
|
||||||
|
{file = "Brotli-1.0.9.zip", hash = "sha256:4d1b810aa0ed773f81dceda2cc7b403d01057458730e309856356d4ef4188438"},
|
||||||
]
|
]
|
||||||
certifi = [
|
certifi = [
|
||||||
{file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"},
|
{file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"},
|
||||||
|
@ -782,18 +781,10 @@ django-anymail = [
|
||||||
{file = "django-anymail-7.2.1.tar.gz", hash = "sha256:7fadf9781573b30af5bb6ca2f39b345c4ca2547723ce677c3025292d0a309a96"},
|
{file = "django-anymail-7.2.1.tar.gz", hash = "sha256:7fadf9781573b30af5bb6ca2f39b345c4ca2547723ce677c3025292d0a309a96"},
|
||||||
{file = "django_anymail-7.2.1-py2.py3-none-any.whl", hash = "sha256:dc5d835049a5dbf738a0f4bd793c4655cd53ba455e2ead275845bc158d48cc63"},
|
{file = "django_anymail-7.2.1-py2.py3-none-any.whl", hash = "sha256:dc5d835049a5dbf738a0f4bd793c4655cd53ba455e2ead275845bc158d48cc63"},
|
||||||
]
|
]
|
||||||
django-appconf = [
|
|
||||||
{file = "django-appconf-1.0.4.tar.gz", hash = "sha256:be58deb54a43d77d2e1621fe59f787681376d3cd0b8bd8e4758ef6c3a6453380"},
|
|
||||||
{file = "django_appconf-1.0.4-py2.py3-none-any.whl", hash = "sha256:1b1d0e1069c843ebe8ae5aa48ec52403b1440402b320c3e3a206a0907e97bb06"},
|
|
||||||
]
|
|
||||||
django-cleanup = [
|
django-cleanup = [
|
||||||
{file = "django-cleanup-5.1.0.tar.gz", hash = "sha256:8976aec12a22913afb3d1fcb541b1aedde2f5ec243e4260c5ff78bb6aa75a089"},
|
{file = "django-cleanup-5.1.0.tar.gz", hash = "sha256:8976aec12a22913afb3d1fcb541b1aedde2f5ec243e4260c5ff78bb6aa75a089"},
|
||||||
{file = "django_cleanup-5.1.0-py2.py3-none-any.whl", hash = "sha256:71e098c7d9ac3f3da40b95cff9c0bc51218d40ef419261232f46ba3141c50acc"},
|
{file = "django_cleanup-5.1.0-py2.py3-none-any.whl", hash = "sha256:71e098c7d9ac3f3da40b95cff9c0bc51218d40ef419261232f46ba3141c50acc"},
|
||||||
]
|
]
|
||||||
django-compressor = [
|
|
||||||
{file = "django_compressor-2.4-py2.py3-none-any.whl", hash = "sha256:57ac0a696d061e5fc6fbc55381d2050f353b973fb97eee5593f39247bc0f30af"},
|
|
||||||
{file = "django_compressor-2.4.tar.gz", hash = "sha256:d2ed1c6137ddaac5536233ec0a819e14009553fee0a869bea65d03e5285ba74f"},
|
|
||||||
]
|
|
||||||
django-debug-toolbar = [
|
django-debug-toolbar = [
|
||||||
{file = "django-debug-toolbar-3.2.tar.gz", hash = "sha256:84e2607d900dbd571df0a2acf380b47c088efb787dce9805aefeb407341961d2"},
|
{file = "django-debug-toolbar-3.2.tar.gz", hash = "sha256:84e2607d900dbd571df0a2acf380b47c088efb787dce9805aefeb407341961d2"},
|
||||||
{file = "django_debug_toolbar-3.2-py3-none-any.whl", hash = "sha256:9e5a25d0c965f7e686f6a8ba23613ca9ca30184daa26487706d4829f5cfb697a"},
|
{file = "django_debug_toolbar-3.2-py3-none-any.whl", hash = "sha256:9e5a25d0c965f7e686f6a8ba23613ca9ca30184daa26487706d4829f5cfb697a"},
|
||||||
|
@ -954,10 +945,6 @@ pluggy = [
|
||||||
{file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
|
{file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
|
||||||
{file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
|
{file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
|
||||||
]
|
]
|
||||||
ply = [
|
|
||||||
{file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"},
|
|
||||||
{file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"},
|
|
||||||
]
|
|
||||||
pre-commit = [
|
pre-commit = [
|
||||||
{file = "pre_commit-2.11.1-py2.py3-none-any.whl", hash = "sha256:94c82f1bf5899d56edb1d926732f4e75a7df29a0c8c092559c77420c9d62428b"},
|
{file = "pre_commit-2.11.1-py2.py3-none-any.whl", hash = "sha256:94c82f1bf5899d56edb1d926732f4e75a7df29a0c8c092559c77420c9d62428b"},
|
||||||
{file = "pre_commit-2.11.1.tar.gz", hash = "sha256:de55c5c72ce80d79106e48beb1b54104d16495ce7f95b0c7b13d4784193a00af"},
|
{file = "pre_commit-2.11.1.tar.gz", hash = "sha256:de55c5c72ce80d79106e48beb1b54104d16495ce7f95b0c7b13d4784193a00af"},
|
||||||
|
@ -1045,21 +1032,6 @@ requests = [
|
||||||
{file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"},
|
{file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"},
|
||||||
{file = "requests-2.25.1.tar.gz", hash = "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"},
|
{file = "requests-2.25.1.tar.gz", hash = "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"},
|
||||||
]
|
]
|
||||||
rjsmin = [
|
|
||||||
{file = "rjsmin-1.1.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:799890bd07a048892d8d3deb9042dbc20b7f5d0eb7da91e9483c561033b23ce2"},
|
|
||||||
{file = "rjsmin-1.1.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:211c2fe8298951663bbc02acdffbf714f6793df54bfc50e1c6c9e71b3f2559a3"},
|
|
||||||
{file = "rjsmin-1.1.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:585e75a84d9199b68056fd4a083d9a61e2a92dfd10ff6d4ce5bdb04bc3bdbfaf"},
|
|
||||||
{file = "rjsmin-1.1.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e487a7783ac4339e79ec610b98228eb9ac72178973e3dee16eba0e3feef25924"},
|
|
||||||
{file = "rjsmin-1.1.0-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:0ab825839125eaca57cc59581d72e596e58a7a56fbc0839996b7528f0343a0a8"},
|
|
||||||
{file = "rjsmin-1.1.0-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:6044ca86e917cd5bb2f95e6679a4192cef812122f28ee08c677513de019629b3"},
|
|
||||||
{file = "rjsmin-1.1.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:ecd29f1b3e66a4c0753105baec262b331bcbceefc22fbe6f7e8bcd2067bcb4d7"},
|
|
||||||
{file = "rjsmin-1.1.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:975b69754d6a76be47c0bead12367a1ca9220d08e5393f80bab0230d4625d1f4"},
|
|
||||||
{file = "rjsmin-1.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:466fe70cc5647c7c51b3260c7e2e323a98b2b173564247f9c89e977720a0645f"},
|
|
||||||
{file = "rjsmin-1.1.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:e3908b21ebb584ce74a6ac233bdb5f29485752c9d3be5e50c5484ed74169232c"},
|
|
||||||
{file = "rjsmin-1.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:714329db774a90947e0e2086cdddb80d5e8c4ac1c70c9f92436378dedb8ae345"},
|
|
||||||
{file = "rjsmin-1.1.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:dd0f4819df4243ffe4c964995794c79ca43943b5b756de84be92b445a652fb86"},
|
|
||||||
{file = "rjsmin-1.1.0.tar.gz", hash = "sha256:b15dc75c71f65d9493a8c7fa233fdcec823e3f1b88ad84a843ffef49b338ac32"},
|
|
||||||
]
|
|
||||||
six = [
|
six = [
|
||||||
{file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"},
|
{file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"},
|
||||||
{file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"},
|
{file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"},
|
||||||
|
@ -1088,6 +1060,10 @@ virtualenv = [
|
||||||
{file = "virtualenv-20.4.3-py2.py3-none-any.whl", hash = "sha256:83f95875d382c7abafe06bd2a4cdd1b363e1bb77e02f155ebe8ac082a916b37c"},
|
{file = "virtualenv-20.4.3-py2.py3-none-any.whl", hash = "sha256:83f95875d382c7abafe06bd2a4cdd1b363e1bb77e02f155ebe8ac082a916b37c"},
|
||||||
{file = "virtualenv-20.4.3.tar.gz", hash = "sha256:49ec4eb4c224c6f7dd81bb6d0a28a09ecae5894f4e593c89b0db0885f565a107"},
|
{file = "virtualenv-20.4.3.tar.gz", hash = "sha256:49ec4eb4c224c6f7dd81bb6d0a28a09ecae5894f4e593c89b0db0885f565a107"},
|
||||||
]
|
]
|
||||||
|
whitenoise = [
|
||||||
|
{file = "whitenoise-5.2.0-py2.py3-none-any.whl", hash = "sha256:05d00198c777028d72d8b0bbd234db605ef6d60e9410125124002518a48e515d"},
|
||||||
|
{file = "whitenoise-5.2.0.tar.gz", hash = "sha256:05ce0be39ad85740a78750c86a93485c40f08ad8c62a6006de0233765996e5c7"},
|
||||||
|
]
|
||||||
wrapt = [
|
wrapt = [
|
||||||
{file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"},
|
{file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"},
|
||||||
]
|
]
|
||||||
|
|
|
@ -36,10 +36,10 @@ django-cleanup = "^5.0"
|
||||||
requests = "^2.24"
|
requests = "^2.24"
|
||||||
html2text = "^2020.1.16"
|
html2text = "^2020.1.16"
|
||||||
readtime = "^1.1.1"
|
readtime = "^1.1.1"
|
||||||
django-compressor = "^2.4"
|
|
||||||
"calmjs.parse" = "^1.2.5"
|
|
||||||
pylibmc = "^1.6.1"
|
pylibmc = "^1.6.1"
|
||||||
django-debug-toolbar = "^3.2"
|
django-debug-toolbar = "^3.2"
|
||||||
|
whitenoise = {extras = ["brotli"], version = "^5.2.0"}
|
||||||
|
rcssmin = "^1.0.6"
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
pre-commit = "^2.7"
|
pre-commit = "^2.7"
|
||||||
|
|
Reference in a new issue