plain 0.4.0__tar.gz → 0.5.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.4.0 → plain-0.5.0}/PKG-INFO +1 -1
- {plain-0.4.0 → plain-0.5.0}/plain/debug.py +4 -2
- {plain-0.4.0 → plain-0.5.0}/plain/forms/forms.py +2 -1
- {plain-0.4.0 → plain-0.5.0}/plain/preflight/__init__.py +0 -1
- {plain-0.4.0 → plain-0.5.0}/plain/signing.py +4 -22
- {plain-0.4.0 → plain-0.5.0}/pyproject.toml +1 -1
- plain-0.4.0/plain/preflight/compatibility/django_4_0.py +0 -20
- plain-0.4.0/plain/utils/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/LICENSE +0 -0
- {plain-0.4.0 → plain-0.5.0}/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/__main__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/assets/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/assets/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/assets/compile.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/assets/finders.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/assets/fingerprints.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/assets/urls.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/assets/views.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/cli/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/cli/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/cli/cli.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/cli/formatting.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/cli/packages.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/cli/print.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/cli/startup.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/csrf/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/csrf/middleware.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/csrf/views.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/exceptions.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/forms/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/forms/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/forms/boundfield.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/forms/exceptions.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/forms/fields.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/http/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/http/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/http/cookie.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/http/multipartparser.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/http/request.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/http/response.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/internal/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/internal/files/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/internal/files/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/internal/files/base.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/internal/files/locks.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/internal/files/move.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/internal/files/temp.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/internal/files/uploadedfile.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/internal/files/uploadhandler.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/internal/files/utils.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/internal/handlers/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/internal/handlers/base.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/internal/handlers/exception.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/internal/handlers/wsgi.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/json.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/logs/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/logs/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/logs/configure.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/logs/loggers.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/logs/utils.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/middleware/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/middleware/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/middleware/clickjacking.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/middleware/common.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/middleware/gzip.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/middleware/security.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/packages/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/packages/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/packages/config.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/packages/registry.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/paginator.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/preflight/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/preflight/files.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/preflight/messages.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/preflight/registry.py +0 -0
- {plain-0.4.0/plain/preflight/compatibility → plain-0.5.0/plain/preflight/security}/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/preflight/security/base.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/preflight/security/csrf.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/preflight/urls.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/runtime/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/runtime/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/runtime/global_settings.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/runtime/user_settings.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/signals/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/signals/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/signals/dispatch/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/signals/dispatch/dispatcher.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/signals/dispatch/license.txt +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/templates/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/templates/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/templates/core.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/templates/jinja/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/templates/jinja/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/templates/jinja/defaults.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/templates/jinja/extensions.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/templates/jinja/filters.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/templates/jinja/globals.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/test/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/test/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/test/client.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/urls/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/urls/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/urls/base.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/urls/conf.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/urls/converters.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/urls/exceptions.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/urls/resolvers.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/README.md +0 -0
- {plain-0.4.0/plain/preflight/security → plain-0.5.0/plain/utils}/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/_os.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/cache.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/connection.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/crypto.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/datastructures.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/dateformat.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/dateparse.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/dates.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/deconstruct.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/decorators.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/deprecation.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/duration.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/email.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/encoding.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/functional.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/hashable.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/html.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/http.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/inspect.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/ipv6.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/itercompat.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/module_loading.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/regex_helper.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/safestring.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/termcolors.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/text.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/timesince.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/timezone.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/utils/tree.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/validators.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/views/README.md +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/views/__init__.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/views/base.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/views/csrf.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/views/errors.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/views/exceptions.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/views/forms.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/views/objects.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/views/redirect.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/views/templates.py +0 -0
- {plain-0.4.0 → plain-0.5.0}/plain/wsgi.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
from pprint import pformat
|
2
2
|
|
3
|
-
from markupsafe import escape
|
3
|
+
from markupsafe import Markup, escape
|
4
4
|
|
5
5
|
from plain.http import Response
|
6
6
|
from plain.views.exceptions import ResponseException
|
@@ -18,6 +18,8 @@ def dd(obj):
|
|
18
18
|
|
19
19
|
response = Response()
|
20
20
|
response.status_code = 500
|
21
|
-
response.content =
|
21
|
+
response.content = (
|
22
|
+
Markup("<pre><code>") + escape(dump_str) + Markup("</code></pre>")
|
23
|
+
)
|
22
24
|
response.content_type = "text/html"
|
23
25
|
raise ResponseException(response)
|
@@ -203,7 +203,8 @@ class BaseForm:
|
|
203
203
|
self._errors[field].extend(error_list)
|
204
204
|
|
205
205
|
# The field had an error, so removed it from the final data
|
206
|
-
|
206
|
+
# (we use getattr here so errors can be added to uncleaned forms)
|
207
|
+
if field in getattr(self, "cleaned_data", {}):
|
207
208
|
del self.cleaned_data[field]
|
208
209
|
|
209
210
|
def full_clean(self):
|
@@ -14,7 +14,6 @@ from .messages import (
|
|
14
14
|
from .registry import register, run_checks
|
15
15
|
|
16
16
|
# Import these to force registration of checks
|
17
|
-
import plain.preflight.compatibility.django_4_0 # NOQA isort:skip
|
18
17
|
import plain.preflight.files # NOQA isort:skip
|
19
18
|
import plain.preflight.security.base # NOQA isort:skip
|
20
19
|
import plain.preflight.security.csrf # NOQA isort:skip
|
@@ -37,12 +37,10 @@ import base64
|
|
37
37
|
import datetime
|
38
38
|
import json
|
39
39
|
import time
|
40
|
-
import warnings
|
41
40
|
import zlib
|
42
41
|
|
43
42
|
from plain.runtime import settings
|
44
43
|
from plain.utils.crypto import constant_time_compare, salted_hmac
|
45
|
-
from plain.utils.deprecation import RemovedInDjango51Warning
|
46
44
|
from plain.utils.encoding import force_bytes
|
47
45
|
from plain.utils.module_loading import import_string
|
48
46
|
from plain.utils.regex_helper import _lazy_re_compile
|
@@ -177,17 +175,13 @@ def loads(
|
|
177
175
|
|
178
176
|
|
179
177
|
class Signer:
|
180
|
-
# RemovedInDjango51Warning: When the deprecation ends, replace with:
|
181
|
-
# def __init__(
|
182
|
-
# self, *, key=None, sep=":", salt=None, algorithm=None, fallback_keys=None
|
183
|
-
# ):
|
184
178
|
def __init__(
|
185
179
|
self,
|
186
|
-
|
180
|
+
*,
|
187
181
|
key=None,
|
188
182
|
sep=":",
|
189
183
|
salt=None,
|
190
|
-
algorithm=
|
184
|
+
algorithm="sha256",
|
191
185
|
fallback_keys=None,
|
192
186
|
):
|
193
187
|
self.key = key or settings.SECRET_KEY
|
@@ -198,20 +192,8 @@ class Signer:
|
|
198
192
|
)
|
199
193
|
self.sep = sep
|
200
194
|
self.salt = salt or f"{self.__class__.__module__}.{self.__class__.__name__}"
|
201
|
-
self.algorithm = algorithm
|
202
|
-
|
203
|
-
if args:
|
204
|
-
warnings.warn(
|
205
|
-
f"Passing positional arguments to {self.__class__.__name__} is "
|
206
|
-
f"deprecated.",
|
207
|
-
RemovedInDjango51Warning,
|
208
|
-
stacklevel=2,
|
209
|
-
)
|
210
|
-
for arg, attr in zip(
|
211
|
-
args, ["key", "sep", "salt", "algorithm", "fallback_keys"]
|
212
|
-
):
|
213
|
-
if arg or attr == "sep":
|
214
|
-
setattr(self, attr, arg)
|
195
|
+
self.algorithm = algorithm
|
196
|
+
|
215
197
|
if _SEP_UNSAFE.match(self.sep):
|
216
198
|
raise ValueError(
|
217
199
|
"Unsafe Signer separator: %r (cannot be empty or consist of "
|
@@ -1,20 +0,0 @@
|
|
1
|
-
from plain.runtime import settings
|
2
|
-
|
3
|
-
from .. import Error, register
|
4
|
-
|
5
|
-
|
6
|
-
@register
|
7
|
-
def check_csrf_trusted_origins(package_configs, **kwargs):
|
8
|
-
errors = []
|
9
|
-
for origin in settings.CSRF_TRUSTED_ORIGINS:
|
10
|
-
if "://" not in origin:
|
11
|
-
errors.append(
|
12
|
-
Error(
|
13
|
-
"As of Plain 4.0, the values in the CSRF_TRUSTED_ORIGINS "
|
14
|
-
"setting must start with a scheme (usually http:// or "
|
15
|
-
"https://) but found %s. See the release notes for details."
|
16
|
-
% origin,
|
17
|
-
id="4_0.E001",
|
18
|
-
)
|
19
|
-
)
|
20
|
-
return errors
|
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
|
{plain-0.4.0/plain/preflight/compatibility → plain-0.5.0/plain/preflight/security}/__init__.py
RENAMED
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
|