plain 0.41.0__tar.gz → 0.42.1__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 (164) hide show
  1. {plain-0.41.0 → plain-0.42.1}/PKG-INFO +1 -1
  2. {plain-0.41.0 → plain-0.42.1}/plain/logs/configure.py +9 -4
  3. {plain-0.41.0 → plain-0.42.1}/plain/templates/jinja/filters.py +2 -0
  4. {plain-0.41.0 → plain-0.42.1}/plain/urls/patterns.py +1 -33
  5. {plain-0.41.0 → plain-0.42.1}/pyproject.toml +1 -1
  6. {plain-0.41.0 → plain-0.42.1}/.gitignore +0 -0
  7. {plain-0.41.0 → plain-0.42.1}/LICENSE +0 -0
  8. {plain-0.41.0 → plain-0.42.1}/README.md +0 -0
  9. {plain-0.41.0 → plain-0.42.1}/plain/README.md +0 -0
  10. {plain-0.41.0 → plain-0.42.1}/plain/__main__.py +0 -0
  11. {plain-0.41.0 → plain-0.42.1}/plain/assets/README.md +0 -0
  12. {plain-0.41.0 → plain-0.42.1}/plain/assets/__init__.py +0 -0
  13. {plain-0.41.0 → plain-0.42.1}/plain/assets/compile.py +0 -0
  14. {plain-0.41.0 → plain-0.42.1}/plain/assets/finders.py +0 -0
  15. {plain-0.41.0 → plain-0.42.1}/plain/assets/fingerprints.py +0 -0
  16. {plain-0.41.0 → plain-0.42.1}/plain/assets/urls.py +0 -0
  17. {plain-0.41.0 → plain-0.42.1}/plain/assets/views.py +0 -0
  18. {plain-0.41.0 → plain-0.42.1}/plain/chores/README.md +0 -0
  19. {plain-0.41.0 → plain-0.42.1}/plain/chores/__init__.py +0 -0
  20. {plain-0.41.0 → plain-0.42.1}/plain/chores/registry.py +0 -0
  21. {plain-0.41.0 → plain-0.42.1}/plain/cli/README.md +0 -0
  22. {plain-0.41.0 → plain-0.42.1}/plain/cli/__init__.py +0 -0
  23. {plain-0.41.0 → plain-0.42.1}/plain/cli/build.py +0 -0
  24. {plain-0.41.0 → plain-0.42.1}/plain/cli/chores.py +0 -0
  25. {plain-0.41.0 → plain-0.42.1}/plain/cli/core.py +0 -0
  26. {plain-0.41.0 → plain-0.42.1}/plain/cli/docs.py +0 -0
  27. {plain-0.41.0 → plain-0.42.1}/plain/cli/formatting.py +0 -0
  28. {plain-0.41.0 → plain-0.42.1}/plain/cli/preflight.py +0 -0
  29. {plain-0.41.0 → plain-0.42.1}/plain/cli/print.py +0 -0
  30. {plain-0.41.0 → plain-0.42.1}/plain/cli/registry.py +0 -0
  31. {plain-0.41.0 → plain-0.42.1}/plain/cli/scaffold.py +0 -0
  32. {plain-0.41.0 → plain-0.42.1}/plain/cli/settings.py +0 -0
  33. {plain-0.41.0 → plain-0.42.1}/plain/cli/shell.py +0 -0
  34. {plain-0.41.0 → plain-0.42.1}/plain/cli/startup.py +0 -0
  35. {plain-0.41.0 → plain-0.42.1}/plain/cli/urls.py +0 -0
  36. {plain-0.41.0 → plain-0.42.1}/plain/cli/utils.py +0 -0
  37. {plain-0.41.0 → plain-0.42.1}/plain/csrf/README.md +0 -0
  38. {plain-0.41.0 → plain-0.42.1}/plain/csrf/middleware.py +0 -0
  39. {plain-0.41.0 → plain-0.42.1}/plain/csrf/views.py +0 -0
  40. {plain-0.41.0 → plain-0.42.1}/plain/debug.py +0 -0
  41. {plain-0.41.0 → plain-0.42.1}/plain/exceptions.py +0 -0
  42. {plain-0.41.0 → plain-0.42.1}/plain/forms/README.md +0 -0
  43. {plain-0.41.0 → plain-0.42.1}/plain/forms/__init__.py +0 -0
  44. {plain-0.41.0 → plain-0.42.1}/plain/forms/boundfield.py +0 -0
  45. {plain-0.41.0 → plain-0.42.1}/plain/forms/exceptions.py +0 -0
  46. {plain-0.41.0 → plain-0.42.1}/plain/forms/fields.py +0 -0
  47. {plain-0.41.0 → plain-0.42.1}/plain/forms/forms.py +0 -0
  48. {plain-0.41.0 → plain-0.42.1}/plain/http/README.md +0 -0
  49. {plain-0.41.0 → plain-0.42.1}/plain/http/__init__.py +0 -0
  50. {plain-0.41.0 → plain-0.42.1}/plain/http/cookie.py +0 -0
  51. {plain-0.41.0 → plain-0.42.1}/plain/http/multipartparser.py +0 -0
  52. {plain-0.41.0 → plain-0.42.1}/plain/http/request.py +0 -0
  53. {plain-0.41.0 → plain-0.42.1}/plain/http/response.py +0 -0
  54. {plain-0.41.0 → plain-0.42.1}/plain/internal/__init__.py +0 -0
  55. {plain-0.41.0 → plain-0.42.1}/plain/internal/files/__init__.py +0 -0
  56. {plain-0.41.0 → plain-0.42.1}/plain/internal/files/base.py +0 -0
  57. {plain-0.41.0 → plain-0.42.1}/plain/internal/files/locks.py +0 -0
  58. {plain-0.41.0 → plain-0.42.1}/plain/internal/files/move.py +0 -0
  59. {plain-0.41.0 → plain-0.42.1}/plain/internal/files/temp.py +0 -0
  60. {plain-0.41.0 → plain-0.42.1}/plain/internal/files/uploadedfile.py +0 -0
  61. {plain-0.41.0 → plain-0.42.1}/plain/internal/files/uploadhandler.py +0 -0
  62. {plain-0.41.0 → plain-0.42.1}/plain/internal/files/utils.py +0 -0
  63. {plain-0.41.0 → plain-0.42.1}/plain/internal/handlers/__init__.py +0 -0
  64. {plain-0.41.0 → plain-0.42.1}/plain/internal/handlers/base.py +0 -0
  65. {plain-0.41.0 → plain-0.42.1}/plain/internal/handlers/exception.py +0 -0
  66. {plain-0.41.0 → plain-0.42.1}/plain/internal/handlers/wsgi.py +0 -0
  67. {plain-0.41.0 → plain-0.42.1}/plain/internal/middleware/__init__.py +0 -0
  68. {plain-0.41.0 → plain-0.42.1}/plain/internal/middleware/headers.py +0 -0
  69. {plain-0.41.0 → plain-0.42.1}/plain/internal/middleware/https.py +0 -0
  70. {plain-0.41.0 → plain-0.42.1}/plain/internal/middleware/slash.py +0 -0
  71. {plain-0.41.0 → plain-0.42.1}/plain/json.py +0 -0
  72. {plain-0.41.0 → plain-0.42.1}/plain/logs/README.md +0 -0
  73. {plain-0.41.0 → plain-0.42.1}/plain/logs/__init__.py +0 -0
  74. {plain-0.41.0 → plain-0.42.1}/plain/logs/loggers.py +0 -0
  75. {plain-0.41.0 → plain-0.42.1}/plain/logs/utils.py +0 -0
  76. {plain-0.41.0 → plain-0.42.1}/plain/packages/README.md +0 -0
  77. {plain-0.41.0 → plain-0.42.1}/plain/packages/__init__.py +0 -0
  78. {plain-0.41.0 → plain-0.42.1}/plain/packages/config.py +0 -0
  79. {plain-0.41.0 → plain-0.42.1}/plain/packages/registry.py +0 -0
  80. {plain-0.41.0 → plain-0.42.1}/plain/paginator.py +0 -0
  81. {plain-0.41.0 → plain-0.42.1}/plain/preflight/README.md +0 -0
  82. {plain-0.41.0 → plain-0.42.1}/plain/preflight/__init__.py +0 -0
  83. {plain-0.41.0 → plain-0.42.1}/plain/preflight/files.py +0 -0
  84. {plain-0.41.0 → plain-0.42.1}/plain/preflight/messages.py +0 -0
  85. {plain-0.41.0 → plain-0.42.1}/plain/preflight/registry.py +0 -0
  86. {plain-0.41.0 → plain-0.42.1}/plain/preflight/security.py +0 -0
  87. {plain-0.41.0 → plain-0.42.1}/plain/preflight/urls.py +0 -0
  88. {plain-0.41.0 → plain-0.42.1}/plain/runtime/README.md +0 -0
  89. {plain-0.41.0 → plain-0.42.1}/plain/runtime/__init__.py +0 -0
  90. {plain-0.41.0 → plain-0.42.1}/plain/runtime/global_settings.py +0 -0
  91. {plain-0.41.0 → plain-0.42.1}/plain/runtime/user_settings.py +0 -0
  92. {plain-0.41.0 → plain-0.42.1}/plain/signals/README.md +0 -0
  93. {plain-0.41.0 → plain-0.42.1}/plain/signals/__init__.py +0 -0
  94. {plain-0.41.0 → plain-0.42.1}/plain/signals/dispatch/__init__.py +0 -0
  95. {plain-0.41.0 → plain-0.42.1}/plain/signals/dispatch/dispatcher.py +0 -0
  96. {plain-0.41.0 → plain-0.42.1}/plain/signals/dispatch/license.txt +0 -0
  97. {plain-0.41.0 → plain-0.42.1}/plain/signing.py +0 -0
  98. {plain-0.41.0 → plain-0.42.1}/plain/templates/README.md +0 -0
  99. {plain-0.41.0 → plain-0.42.1}/plain/templates/__init__.py +0 -0
  100. {plain-0.41.0 → plain-0.42.1}/plain/templates/core.py +0 -0
  101. {plain-0.41.0 → plain-0.42.1}/plain/templates/jinja/__init__.py +0 -0
  102. {plain-0.41.0 → plain-0.42.1}/plain/templates/jinja/environments.py +0 -0
  103. {plain-0.41.0 → plain-0.42.1}/plain/templates/jinja/extensions.py +0 -0
  104. {plain-0.41.0 → plain-0.42.1}/plain/templates/jinja/globals.py +0 -0
  105. {plain-0.41.0 → plain-0.42.1}/plain/test/README.md +0 -0
  106. {plain-0.41.0 → plain-0.42.1}/plain/test/__init__.py +0 -0
  107. {plain-0.41.0 → plain-0.42.1}/plain/test/client.py +0 -0
  108. {plain-0.41.0 → plain-0.42.1}/plain/test/encoding.py +0 -0
  109. {plain-0.41.0 → plain-0.42.1}/plain/test/exceptions.py +0 -0
  110. {plain-0.41.0 → plain-0.42.1}/plain/urls/README.md +0 -0
  111. {plain-0.41.0 → plain-0.42.1}/plain/urls/__init__.py +0 -0
  112. {plain-0.41.0 → plain-0.42.1}/plain/urls/converters.py +0 -0
  113. {plain-0.41.0 → plain-0.42.1}/plain/urls/exceptions.py +0 -0
  114. {plain-0.41.0 → plain-0.42.1}/plain/urls/resolvers.py +0 -0
  115. {plain-0.41.0 → plain-0.42.1}/plain/urls/routers.py +0 -0
  116. {plain-0.41.0 → plain-0.42.1}/plain/urls/utils.py +0 -0
  117. {plain-0.41.0 → plain-0.42.1}/plain/utils/README.md +0 -0
  118. {plain-0.41.0 → plain-0.42.1}/plain/utils/__init__.py +0 -0
  119. {plain-0.41.0 → plain-0.42.1}/plain/utils/cache.py +0 -0
  120. {plain-0.41.0 → plain-0.42.1}/plain/utils/connection.py +0 -0
  121. {plain-0.41.0 → plain-0.42.1}/plain/utils/crypto.py +0 -0
  122. {plain-0.41.0 → plain-0.42.1}/plain/utils/datastructures.py +0 -0
  123. {plain-0.41.0 → plain-0.42.1}/plain/utils/dateparse.py +0 -0
  124. {plain-0.41.0 → plain-0.42.1}/plain/utils/deconstruct.py +0 -0
  125. {plain-0.41.0 → plain-0.42.1}/plain/utils/decorators.py +0 -0
  126. {plain-0.41.0 → plain-0.42.1}/plain/utils/duration.py +0 -0
  127. {plain-0.41.0 → plain-0.42.1}/plain/utils/encoding.py +0 -0
  128. {plain-0.41.0 → plain-0.42.1}/plain/utils/functional.py +0 -0
  129. {plain-0.41.0 → plain-0.42.1}/plain/utils/hashable.py +0 -0
  130. {plain-0.41.0 → plain-0.42.1}/plain/utils/html.py +0 -0
  131. {plain-0.41.0 → plain-0.42.1}/plain/utils/http.py +0 -0
  132. {plain-0.41.0 → plain-0.42.1}/plain/utils/inspect.py +0 -0
  133. {plain-0.41.0 → plain-0.42.1}/plain/utils/ipv6.py +0 -0
  134. {plain-0.41.0 → plain-0.42.1}/plain/utils/itercompat.py +0 -0
  135. {plain-0.41.0 → plain-0.42.1}/plain/utils/module_loading.py +0 -0
  136. {plain-0.41.0 → plain-0.42.1}/plain/utils/regex_helper.py +0 -0
  137. {plain-0.41.0 → plain-0.42.1}/plain/utils/safestring.py +0 -0
  138. {plain-0.41.0 → plain-0.42.1}/plain/utils/text.py +0 -0
  139. {plain-0.41.0 → plain-0.42.1}/plain/utils/timesince.py +0 -0
  140. {plain-0.41.0 → plain-0.42.1}/plain/utils/timezone.py +0 -0
  141. {plain-0.41.0 → plain-0.42.1}/plain/utils/tree.py +0 -0
  142. {plain-0.41.0 → plain-0.42.1}/plain/validators.py +0 -0
  143. {plain-0.41.0 → plain-0.42.1}/plain/views/README.md +0 -0
  144. {plain-0.41.0 → plain-0.42.1}/plain/views/__init__.py +0 -0
  145. {plain-0.41.0 → plain-0.42.1}/plain/views/base.py +0 -0
  146. {plain-0.41.0 → plain-0.42.1}/plain/views/csrf.py +0 -0
  147. {plain-0.41.0 → plain-0.42.1}/plain/views/errors.py +0 -0
  148. {plain-0.41.0 → plain-0.42.1}/plain/views/exceptions.py +0 -0
  149. {plain-0.41.0 → plain-0.42.1}/plain/views/forms.py +0 -0
  150. {plain-0.41.0 → plain-0.42.1}/plain/views/objects.py +0 -0
  151. {plain-0.41.0 → plain-0.42.1}/plain/views/redirect.py +0 -0
  152. {plain-0.41.0 → plain-0.42.1}/plain/views/templates.py +0 -0
  153. {plain-0.41.0 → plain-0.42.1}/plain/wsgi.py +0 -0
  154. {plain-0.41.0 → plain-0.42.1}/tests/.bolt/assets_collected/assets.json +0 -0
  155. {plain-0.41.0 → plain-0.42.1}/tests/.gitignore +0 -0
  156. {plain-0.41.0 → plain-0.42.1}/tests/app/.gitignore +0 -0
  157. {plain-0.41.0 → plain-0.42.1}/tests/app/settings.py +0 -0
  158. {plain-0.41.0 → plain-0.42.1}/tests/app/test/__init__.py +0 -0
  159. {plain-0.41.0 → plain-0.42.1}/tests/app/test/default_settings.py +0 -0
  160. {plain-0.41.0 → plain-0.42.1}/tests/app/urls.py +0 -0
  161. {plain-0.41.0 → plain-0.42.1}/tests/conftest.py +0 -0
  162. {plain-0.41.0 → plain-0.42.1}/tests/test_cli.py +0 -0
  163. {plain-0.41.0 → plain-0.42.1}/tests/test_runtime.py +0 -0
  164. {plain-0.41.0 → plain-0.42.1}/tests/test_wsgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plain
3
- Version: 0.41.0
3
+ Version: 0.42.1
4
4
  Summary: A web framework for building products with Python.
5
5
  Author-email: Dave Gaeddert <dave.gaeddert@dropseed.dev>
6
6
  License-File: LICENSE
@@ -14,19 +14,24 @@ def configure_logging(logging_settings):
14
14
  },
15
15
  },
16
16
  "handlers": {
17
- "console": {
18
- "level": "INFO",
17
+ "plain_console": {
18
+ "level": environ.get("PLAIN_LOG_LEVEL", "INFO"),
19
+ "class": "logging.StreamHandler",
20
+ "formatter": "simple",
21
+ },
22
+ "app_console": {
23
+ "level": environ.get("APP_LOG_LEVEL", "INFO"),
19
24
  "class": "logging.StreamHandler",
20
25
  "formatter": "simple",
21
26
  },
22
27
  },
23
28
  "loggers": {
24
29
  "plain": {
25
- "handlers": ["console"],
30
+ "handlers": ["plain_console"],
26
31
  "level": environ.get("PLAIN_LOG_LEVEL", "INFO"),
27
32
  },
28
33
  "app": {
29
- "handlers": ["console"],
34
+ "handlers": ["app_console"],
30
35
  "level": environ.get("APP_LOG_LEVEL", "INFO"),
31
36
  "propagate": False,
32
37
  },
@@ -19,6 +19,8 @@ default_filters = {
19
19
  # The standard Python ones
20
20
  "strftime": datetime.datetime.strftime,
21
21
  "strptime": datetime.datetime.strptime,
22
+ "fromtimestamp": datetime.datetime.fromtimestamp,
23
+ "fromisoformat": datetime.datetime.fromisoformat,
22
24
  # To convert to user time zone
23
25
  "localtime": localtime_filter,
24
26
  "timeuntil": timeuntil,
@@ -1,13 +1,10 @@
1
- import functools
2
- import inspect
3
1
  import re
4
2
  import string
5
3
 
6
4
  from plain.exceptions import ImproperlyConfigured
7
5
  from plain.internal import internalcode
8
- from plain.preflight import Error, Warning
6
+ from plain.preflight import Warning
9
7
  from plain.runtime import settings
10
- from plain.utils.functional import cached_property
11
8
  from plain.utils.regex_helper import _lazy_re_compile
12
9
 
13
10
  from .converters import get_converter
@@ -226,20 +223,6 @@ class URLPattern:
226
223
  else:
227
224
  return []
228
225
 
229
- def _check_view(self):
230
- from plain.views import View
231
-
232
- view = self.view
233
- if inspect.isclass(view) and issubclass(view, View):
234
- return [
235
- Error(
236
- f"Your URL pattern {self.pattern.describe()} has an invalid view, pass {view.__name__}.as_view() "
237
- f"instead of {view.__name__}.",
238
- id="urls.E009",
239
- )
240
- ]
241
- return []
242
-
243
226
  def resolve(self, path):
244
227
  match = self.pattern.match(path)
245
228
  if match:
@@ -253,18 +236,3 @@ class URLPattern:
253
236
  url_name=self.pattern.name,
254
237
  route=str(self.pattern),
255
238
  )
256
-
257
- @cached_property
258
- def lookup_str(self):
259
- """
260
- A string that identifies the view (e.g. 'path.to.view_function' or
261
- 'path.to.ClassBasedView').
262
- """
263
- view = self.view
264
- if isinstance(view, functools.partial):
265
- view = view.func
266
- if hasattr(view, "view_class"):
267
- view = view.view_class
268
- elif not hasattr(view, "__name__"):
269
- return view.__module__ + "." + view.__class__.__name__
270
- return view.__module__ + "." + view.__qualname__
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "plain"
3
- version = "0.41.0"
3
+ version = "0.42.1"
4
4
  description = "A web framework for building products with Python."
5
5
  authors = [{name = "Dave Gaeddert", email = "dave.gaeddert@dropseed.dev"}]
6
6
  readme = "README.md"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes