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.
Files changed (151) hide show
  1. {plain-0.4.0 → plain-0.5.0}/PKG-INFO +1 -1
  2. {plain-0.4.0 → plain-0.5.0}/plain/debug.py +4 -2
  3. {plain-0.4.0 → plain-0.5.0}/plain/forms/forms.py +2 -1
  4. {plain-0.4.0 → plain-0.5.0}/plain/preflight/__init__.py +0 -1
  5. {plain-0.4.0 → plain-0.5.0}/plain/signing.py +4 -22
  6. {plain-0.4.0 → plain-0.5.0}/pyproject.toml +1 -1
  7. plain-0.4.0/plain/preflight/compatibility/django_4_0.py +0 -20
  8. plain-0.4.0/plain/utils/__init__.py +0 -0
  9. {plain-0.4.0 → plain-0.5.0}/LICENSE +0 -0
  10. {plain-0.4.0 → plain-0.5.0}/README.md +0 -0
  11. {plain-0.4.0 → plain-0.5.0}/plain/README.md +0 -0
  12. {plain-0.4.0 → plain-0.5.0}/plain/__main__.py +0 -0
  13. {plain-0.4.0 → plain-0.5.0}/plain/assets/README.md +0 -0
  14. {plain-0.4.0 → plain-0.5.0}/plain/assets/__init__.py +0 -0
  15. {plain-0.4.0 → plain-0.5.0}/plain/assets/compile.py +0 -0
  16. {plain-0.4.0 → plain-0.5.0}/plain/assets/finders.py +0 -0
  17. {plain-0.4.0 → plain-0.5.0}/plain/assets/fingerprints.py +0 -0
  18. {plain-0.4.0 → plain-0.5.0}/plain/assets/urls.py +0 -0
  19. {plain-0.4.0 → plain-0.5.0}/plain/assets/views.py +0 -0
  20. {plain-0.4.0 → plain-0.5.0}/plain/cli/README.md +0 -0
  21. {plain-0.4.0 → plain-0.5.0}/plain/cli/__init__.py +0 -0
  22. {plain-0.4.0 → plain-0.5.0}/plain/cli/cli.py +0 -0
  23. {plain-0.4.0 → plain-0.5.0}/plain/cli/formatting.py +0 -0
  24. {plain-0.4.0 → plain-0.5.0}/plain/cli/packages.py +0 -0
  25. {plain-0.4.0 → plain-0.5.0}/plain/cli/print.py +0 -0
  26. {plain-0.4.0 → plain-0.5.0}/plain/cli/startup.py +0 -0
  27. {plain-0.4.0 → plain-0.5.0}/plain/csrf/README.md +0 -0
  28. {plain-0.4.0 → plain-0.5.0}/plain/csrf/middleware.py +0 -0
  29. {plain-0.4.0 → plain-0.5.0}/plain/csrf/views.py +0 -0
  30. {plain-0.4.0 → plain-0.5.0}/plain/exceptions.py +0 -0
  31. {plain-0.4.0 → plain-0.5.0}/plain/forms/README.md +0 -0
  32. {plain-0.4.0 → plain-0.5.0}/plain/forms/__init__.py +0 -0
  33. {plain-0.4.0 → plain-0.5.0}/plain/forms/boundfield.py +0 -0
  34. {plain-0.4.0 → plain-0.5.0}/plain/forms/exceptions.py +0 -0
  35. {plain-0.4.0 → plain-0.5.0}/plain/forms/fields.py +0 -0
  36. {plain-0.4.0 → plain-0.5.0}/plain/http/README.md +0 -0
  37. {plain-0.4.0 → plain-0.5.0}/plain/http/__init__.py +0 -0
  38. {plain-0.4.0 → plain-0.5.0}/plain/http/cookie.py +0 -0
  39. {plain-0.4.0 → plain-0.5.0}/plain/http/multipartparser.py +0 -0
  40. {plain-0.4.0 → plain-0.5.0}/plain/http/request.py +0 -0
  41. {plain-0.4.0 → plain-0.5.0}/plain/http/response.py +0 -0
  42. {plain-0.4.0 → plain-0.5.0}/plain/internal/__init__.py +0 -0
  43. {plain-0.4.0 → plain-0.5.0}/plain/internal/files/README.md +0 -0
  44. {plain-0.4.0 → plain-0.5.0}/plain/internal/files/__init__.py +0 -0
  45. {plain-0.4.0 → plain-0.5.0}/plain/internal/files/base.py +0 -0
  46. {plain-0.4.0 → plain-0.5.0}/plain/internal/files/locks.py +0 -0
  47. {plain-0.4.0 → plain-0.5.0}/plain/internal/files/move.py +0 -0
  48. {plain-0.4.0 → plain-0.5.0}/plain/internal/files/temp.py +0 -0
  49. {plain-0.4.0 → plain-0.5.0}/plain/internal/files/uploadedfile.py +0 -0
  50. {plain-0.4.0 → plain-0.5.0}/plain/internal/files/uploadhandler.py +0 -0
  51. {plain-0.4.0 → plain-0.5.0}/plain/internal/files/utils.py +0 -0
  52. {plain-0.4.0 → plain-0.5.0}/plain/internal/handlers/__init__.py +0 -0
  53. {plain-0.4.0 → plain-0.5.0}/plain/internal/handlers/base.py +0 -0
  54. {plain-0.4.0 → plain-0.5.0}/plain/internal/handlers/exception.py +0 -0
  55. {plain-0.4.0 → plain-0.5.0}/plain/internal/handlers/wsgi.py +0 -0
  56. {plain-0.4.0 → plain-0.5.0}/plain/json.py +0 -0
  57. {plain-0.4.0 → plain-0.5.0}/plain/logs/README.md +0 -0
  58. {plain-0.4.0 → plain-0.5.0}/plain/logs/__init__.py +0 -0
  59. {plain-0.4.0 → plain-0.5.0}/plain/logs/configure.py +0 -0
  60. {plain-0.4.0 → plain-0.5.0}/plain/logs/loggers.py +0 -0
  61. {plain-0.4.0 → plain-0.5.0}/plain/logs/utils.py +0 -0
  62. {plain-0.4.0 → plain-0.5.0}/plain/middleware/README.md +0 -0
  63. {plain-0.4.0 → plain-0.5.0}/plain/middleware/__init__.py +0 -0
  64. {plain-0.4.0 → plain-0.5.0}/plain/middleware/clickjacking.py +0 -0
  65. {plain-0.4.0 → plain-0.5.0}/plain/middleware/common.py +0 -0
  66. {plain-0.4.0 → plain-0.5.0}/plain/middleware/gzip.py +0 -0
  67. {plain-0.4.0 → plain-0.5.0}/plain/middleware/security.py +0 -0
  68. {plain-0.4.0 → plain-0.5.0}/plain/packages/README.md +0 -0
  69. {plain-0.4.0 → plain-0.5.0}/plain/packages/__init__.py +0 -0
  70. {plain-0.4.0 → plain-0.5.0}/plain/packages/config.py +0 -0
  71. {plain-0.4.0 → plain-0.5.0}/plain/packages/registry.py +0 -0
  72. {plain-0.4.0 → plain-0.5.0}/plain/paginator.py +0 -0
  73. {plain-0.4.0 → plain-0.5.0}/plain/preflight/README.md +0 -0
  74. {plain-0.4.0 → plain-0.5.0}/plain/preflight/files.py +0 -0
  75. {plain-0.4.0 → plain-0.5.0}/plain/preflight/messages.py +0 -0
  76. {plain-0.4.0 → plain-0.5.0}/plain/preflight/registry.py +0 -0
  77. {plain-0.4.0/plain/preflight/compatibility → plain-0.5.0/plain/preflight/security}/__init__.py +0 -0
  78. {plain-0.4.0 → plain-0.5.0}/plain/preflight/security/base.py +0 -0
  79. {plain-0.4.0 → plain-0.5.0}/plain/preflight/security/csrf.py +0 -0
  80. {plain-0.4.0 → plain-0.5.0}/plain/preflight/urls.py +0 -0
  81. {plain-0.4.0 → plain-0.5.0}/plain/runtime/README.md +0 -0
  82. {plain-0.4.0 → plain-0.5.0}/plain/runtime/__init__.py +0 -0
  83. {plain-0.4.0 → plain-0.5.0}/plain/runtime/global_settings.py +0 -0
  84. {plain-0.4.0 → plain-0.5.0}/plain/runtime/user_settings.py +0 -0
  85. {plain-0.4.0 → plain-0.5.0}/plain/signals/README.md +0 -0
  86. {plain-0.4.0 → plain-0.5.0}/plain/signals/__init__.py +0 -0
  87. {plain-0.4.0 → plain-0.5.0}/plain/signals/dispatch/__init__.py +0 -0
  88. {plain-0.4.0 → plain-0.5.0}/plain/signals/dispatch/dispatcher.py +0 -0
  89. {plain-0.4.0 → plain-0.5.0}/plain/signals/dispatch/license.txt +0 -0
  90. {plain-0.4.0 → plain-0.5.0}/plain/templates/README.md +0 -0
  91. {plain-0.4.0 → plain-0.5.0}/plain/templates/__init__.py +0 -0
  92. {plain-0.4.0 → plain-0.5.0}/plain/templates/core.py +0 -0
  93. {plain-0.4.0 → plain-0.5.0}/plain/templates/jinja/README.md +0 -0
  94. {plain-0.4.0 → plain-0.5.0}/plain/templates/jinja/__init__.py +0 -0
  95. {plain-0.4.0 → plain-0.5.0}/plain/templates/jinja/defaults.py +0 -0
  96. {plain-0.4.0 → plain-0.5.0}/plain/templates/jinja/extensions.py +0 -0
  97. {plain-0.4.0 → plain-0.5.0}/plain/templates/jinja/filters.py +0 -0
  98. {plain-0.4.0 → plain-0.5.0}/plain/templates/jinja/globals.py +0 -0
  99. {plain-0.4.0 → plain-0.5.0}/plain/test/README.md +0 -0
  100. {plain-0.4.0 → plain-0.5.0}/plain/test/__init__.py +0 -0
  101. {plain-0.4.0 → plain-0.5.0}/plain/test/client.py +0 -0
  102. {plain-0.4.0 → plain-0.5.0}/plain/urls/README.md +0 -0
  103. {plain-0.4.0 → plain-0.5.0}/plain/urls/__init__.py +0 -0
  104. {plain-0.4.0 → plain-0.5.0}/plain/urls/base.py +0 -0
  105. {plain-0.4.0 → plain-0.5.0}/plain/urls/conf.py +0 -0
  106. {plain-0.4.0 → plain-0.5.0}/plain/urls/converters.py +0 -0
  107. {plain-0.4.0 → plain-0.5.0}/plain/urls/exceptions.py +0 -0
  108. {plain-0.4.0 → plain-0.5.0}/plain/urls/resolvers.py +0 -0
  109. {plain-0.4.0 → plain-0.5.0}/plain/utils/README.md +0 -0
  110. {plain-0.4.0/plain/preflight/security → plain-0.5.0/plain/utils}/__init__.py +0 -0
  111. {plain-0.4.0 → plain-0.5.0}/plain/utils/_os.py +0 -0
  112. {plain-0.4.0 → plain-0.5.0}/plain/utils/cache.py +0 -0
  113. {plain-0.4.0 → plain-0.5.0}/plain/utils/connection.py +0 -0
  114. {plain-0.4.0 → plain-0.5.0}/plain/utils/crypto.py +0 -0
  115. {plain-0.4.0 → plain-0.5.0}/plain/utils/datastructures.py +0 -0
  116. {plain-0.4.0 → plain-0.5.0}/plain/utils/dateformat.py +0 -0
  117. {plain-0.4.0 → plain-0.5.0}/plain/utils/dateparse.py +0 -0
  118. {plain-0.4.0 → plain-0.5.0}/plain/utils/dates.py +0 -0
  119. {plain-0.4.0 → plain-0.5.0}/plain/utils/deconstruct.py +0 -0
  120. {plain-0.4.0 → plain-0.5.0}/plain/utils/decorators.py +0 -0
  121. {plain-0.4.0 → plain-0.5.0}/plain/utils/deprecation.py +0 -0
  122. {plain-0.4.0 → plain-0.5.0}/plain/utils/duration.py +0 -0
  123. {plain-0.4.0 → plain-0.5.0}/plain/utils/email.py +0 -0
  124. {plain-0.4.0 → plain-0.5.0}/plain/utils/encoding.py +0 -0
  125. {plain-0.4.0 → plain-0.5.0}/plain/utils/functional.py +0 -0
  126. {plain-0.4.0 → plain-0.5.0}/plain/utils/hashable.py +0 -0
  127. {plain-0.4.0 → plain-0.5.0}/plain/utils/html.py +0 -0
  128. {plain-0.4.0 → plain-0.5.0}/plain/utils/http.py +0 -0
  129. {plain-0.4.0 → plain-0.5.0}/plain/utils/inspect.py +0 -0
  130. {plain-0.4.0 → plain-0.5.0}/plain/utils/ipv6.py +0 -0
  131. {plain-0.4.0 → plain-0.5.0}/plain/utils/itercompat.py +0 -0
  132. {plain-0.4.0 → plain-0.5.0}/plain/utils/module_loading.py +0 -0
  133. {plain-0.4.0 → plain-0.5.0}/plain/utils/regex_helper.py +0 -0
  134. {plain-0.4.0 → plain-0.5.0}/plain/utils/safestring.py +0 -0
  135. {plain-0.4.0 → plain-0.5.0}/plain/utils/termcolors.py +0 -0
  136. {plain-0.4.0 → plain-0.5.0}/plain/utils/text.py +0 -0
  137. {plain-0.4.0 → plain-0.5.0}/plain/utils/timesince.py +0 -0
  138. {plain-0.4.0 → plain-0.5.0}/plain/utils/timezone.py +0 -0
  139. {plain-0.4.0 → plain-0.5.0}/plain/utils/tree.py +0 -0
  140. {plain-0.4.0 → plain-0.5.0}/plain/validators.py +0 -0
  141. {plain-0.4.0 → plain-0.5.0}/plain/views/README.md +0 -0
  142. {plain-0.4.0 → plain-0.5.0}/plain/views/__init__.py +0 -0
  143. {plain-0.4.0 → plain-0.5.0}/plain/views/base.py +0 -0
  144. {plain-0.4.0 → plain-0.5.0}/plain/views/csrf.py +0 -0
  145. {plain-0.4.0 → plain-0.5.0}/plain/views/errors.py +0 -0
  146. {plain-0.4.0 → plain-0.5.0}/plain/views/exceptions.py +0 -0
  147. {plain-0.4.0 → plain-0.5.0}/plain/views/forms.py +0 -0
  148. {plain-0.4.0 → plain-0.5.0}/plain/views/objects.py +0 -0
  149. {plain-0.4.0 → plain-0.5.0}/plain/views/redirect.py +0 -0
  150. {plain-0.4.0 → plain-0.5.0}/plain/views/templates.py +0 -0
  151. {plain-0.4.0 → plain-0.5.0}/plain/wsgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: plain
3
- Version: 0.4.0
3
+ Version: 0.5.0
4
4
  Summary: A web framework for building products with Python.
5
5
  Author: Dave Gaeddert
6
6
  Author-email: dave.gaeddert@dropseed.dev
@@ -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 = escape(dump_str)
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
- if field in self.cleaned_data:
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
- *args,
180
+ *,
187
181
  key=None,
188
182
  sep=":",
189
183
  salt=None,
190
- algorithm=None,
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 or "sha256"
202
- # RemovedInDjango51Warning.
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,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "plain"
3
- version = "0.4.0"
3
+ version = "0.5.0"
4
4
  description = "A web framework for building products with Python."
5
5
  authors = ["Dave Gaeddert <dave.gaeddert@dropseed.dev>"]
6
6
  readme = "README.md"
@@ -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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes