plain 0.2.4__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {plain-0.2.4 → plain-0.3.0}/PKG-INFO +1 -1
- {plain-0.2.4 → plain-0.3.0}/plain/assets/views.py +8 -4
- {plain-0.2.4 → plain-0.3.0}/plain/test/client.py +6 -28
- {plain-0.2.4 → plain-0.3.0}/pyproject.toml +1 -1
- {plain-0.2.4 → plain-0.3.0}/LICENSE +0 -0
- {plain-0.2.4 → plain-0.3.0}/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/__main__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/assets/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/assets/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/assets/compile.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/assets/finders.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/assets/fingerprints.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/assets/urls.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/cli/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/cli/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/cli/cli.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/cli/formatting.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/cli/packages.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/cli/print.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/cli/startup.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/csrf/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/csrf/middleware.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/csrf/views.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/debug.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/exceptions.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/forms/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/forms/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/forms/boundfield.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/forms/exceptions.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/forms/fields.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/forms/forms.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/http/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/http/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/http/cookie.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/http/multipartparser.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/http/request.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/http/response.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/files/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/files/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/files/base.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/files/locks.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/files/move.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/files/temp.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/files/uploadedfile.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/files/uploadhandler.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/files/utils.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/handlers/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/handlers/base.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/handlers/exception.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/handlers/wsgi.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/legacy/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/legacy/__main__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/legacy/management/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/legacy/management/base.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/legacy/management/color.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/legacy/management/sql.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/internal/legacy/management/utils.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/json.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/logs/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/logs/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/logs/configure.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/logs/loggers.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/logs/utils.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/middleware/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/middleware/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/middleware/clickjacking.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/middleware/common.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/middleware/gzip.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/middleware/security.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/packages/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/packages/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/packages/config.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/packages/registry.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/paginator.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/preflight/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/preflight/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/preflight/compatibility/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/preflight/compatibility/django_4_0.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/preflight/files.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/preflight/messages.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/preflight/registry.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/preflight/security/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/preflight/security/base.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/preflight/security/csrf.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/preflight/urls.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/runtime/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/runtime/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/runtime/global_settings.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/runtime/user_settings.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/signals/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/signals/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/signals/dispatch/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/signals/dispatch/dispatcher.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/signals/dispatch/license.txt +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/signing.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/templates/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/templates/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/templates/core.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/templates/jinja/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/templates/jinja/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/templates/jinja/defaults.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/templates/jinja/extensions.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/templates/jinja/filters.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/templates/jinja/globals.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/test/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/test/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/urls/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/urls/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/urls/base.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/urls/conf.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/urls/converters.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/urls/exceptions.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/urls/resolvers.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/_os.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/cache.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/connection.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/crypto.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/datastructures.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/dateformat.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/dateparse.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/dates.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/deconstruct.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/decorators.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/deprecation.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/duration.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/email.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/encoding.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/functional.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/hashable.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/html.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/http.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/inspect.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/ipv6.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/itercompat.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/module_loading.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/regex_helper.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/safestring.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/termcolors.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/text.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/timesince.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/timezone.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/utils/tree.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/validators.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/views/README.md +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/views/__init__.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/views/base.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/views/csrf.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/views/errors.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/views/exceptions.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/views/forms.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/views/objects.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/views/redirect.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/views/templates.py +0 -0
- {plain-0.2.4 → plain-0.3.0}/plain/wsgi.py +0 -0
@@ -128,10 +128,8 @@ class AssetView(View):
|
|
128
128
|
headers["Vary"] = vary + ", Accept-Encoding"
|
129
129
|
|
130
130
|
# If the file is compressed, tell the browser
|
131
|
-
if
|
132
|
-
headers.setdefault("Content-Encoding",
|
133
|
-
elif path.endswith(".br"):
|
134
|
-
headers.setdefault("Content-Encoding", "br")
|
131
|
+
if encoding := mimetypes.guess_type(path)[1]:
|
132
|
+
headers.setdefault("Content-Encoding", encoding)
|
135
133
|
|
136
134
|
is_immutable = self.is_immutable(path)
|
137
135
|
|
@@ -151,6 +149,12 @@ class AssetView(View):
|
|
151
149
|
if etag := self.get_etag(path):
|
152
150
|
headers.setdefault("ETag", etag)
|
153
151
|
|
152
|
+
if "Content-Disposition" in headers:
|
153
|
+
# This header messes up Safari...
|
154
|
+
# https://github.com/evansd/whitenoise/commit/93657cf88e14b919cb726864814617a6a639e507
|
155
|
+
# At some point, should probably look at not using FileResponse at all?
|
156
|
+
del headers["Content-Disposition"]
|
157
|
+
|
154
158
|
return headers
|
155
159
|
|
156
160
|
def is_immutable(self, path):
|
@@ -2,7 +2,6 @@ import json
|
|
2
2
|
import mimetypes
|
3
3
|
import os
|
4
4
|
import sys
|
5
|
-
from copy import copy
|
6
5
|
from functools import partial
|
7
6
|
from http import HTTPStatus
|
8
7
|
from http.cookies import SimpleCookie
|
@@ -196,19 +195,6 @@ class ClientHandler(BaseHandler):
|
|
196
195
|
return response
|
197
196
|
|
198
197
|
|
199
|
-
def store_rendered_templates(store, signal, sender, template, context, **kwargs):
|
200
|
-
"""
|
201
|
-
Store templates and contexts that are rendered.
|
202
|
-
|
203
|
-
The context is copied so that it is an accurate representation at the time
|
204
|
-
of rendering.
|
205
|
-
"""
|
206
|
-
store.setdefault("templates", []).append(template)
|
207
|
-
if "context" not in store:
|
208
|
-
store["context"] = ContextList()
|
209
|
-
store["context"].append(copy(context))
|
210
|
-
|
211
|
-
|
212
198
|
def encode_multipart(boundary, data):
|
213
199
|
"""
|
214
200
|
Encode multipart POST data from a dictionary of form values.
|
@@ -683,12 +669,6 @@ class Client(ClientMixin, RequestFactory):
|
|
683
669
|
"""
|
684
670
|
environ = self._base_environ(**request)
|
685
671
|
|
686
|
-
# Curry a data dictionary into an instance of the template renderer
|
687
|
-
# callback function.
|
688
|
-
data = {}
|
689
|
-
partial(store_rendered_templates, data)
|
690
|
-
"template-render-%s" % id(request)
|
691
|
-
# signals.template_rendered.connect(on_template_render, dispatch_uid=signal_uid)
|
692
672
|
# Capture exceptions created by the handler.
|
693
673
|
exception_uid = "request-exception-%s" % id(request)
|
694
674
|
got_request_exception.connect(self.store_exc_info, dispatch_uid=exception_uid)
|
@@ -702,20 +682,18 @@ class Client(ClientMixin, RequestFactory):
|
|
702
682
|
# Save the client and request that stimulated the response.
|
703
683
|
response.client = self
|
704
684
|
response.request = request
|
705
|
-
# Add any rendered template detail to the response.
|
706
|
-
response.templates = data.get("templates", [])
|
707
|
-
response.context = data.get("context")
|
708
685
|
response.json = partial(self._parse_json, response)
|
686
|
+
|
687
|
+
# If the request had a user attached, make it available on the response.
|
688
|
+
if hasattr(response.wsgi_request, "user"):
|
689
|
+
response.user = response.wsgi_request.user
|
690
|
+
|
709
691
|
# Attach the ResolverMatch instance to the response.
|
710
692
|
urlconf = getattr(response.wsgi_request, "urlconf", None)
|
711
693
|
response.resolver_match = SimpleLazyObject(
|
712
694
|
lambda: resolve(request["PATH_INFO"], urlconf=urlconf),
|
713
695
|
)
|
714
|
-
|
715
|
-
# __getattr__ flattening in ContextList, but has some edge case
|
716
|
-
# backwards compatibility implications.
|
717
|
-
if response.context and len(response.context) == 1:
|
718
|
-
response.context = response.context[0]
|
696
|
+
|
719
697
|
# Update persistent cookie data.
|
720
698
|
if response.cookies:
|
721
699
|
self.cookies.update(response.cookies)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|