plain 0.2.5__tar.gz → 0.3.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 (158) hide show
  1. {plain-0.2.5 → plain-0.3.1}/PKG-INFO +1 -1
  2. {plain-0.2.5 → plain-0.3.1}/plain/templates/jinja/globals.py +9 -2
  3. {plain-0.2.5 → plain-0.3.1}/plain/test/client.py +6 -28
  4. {plain-0.2.5 → plain-0.3.1}/pyproject.toml +1 -1
  5. {plain-0.2.5 → plain-0.3.1}/LICENSE +0 -0
  6. {plain-0.2.5 → plain-0.3.1}/README.md +0 -0
  7. {plain-0.2.5 → plain-0.3.1}/plain/README.md +0 -0
  8. {plain-0.2.5 → plain-0.3.1}/plain/__main__.py +0 -0
  9. {plain-0.2.5 → plain-0.3.1}/plain/assets/README.md +0 -0
  10. {plain-0.2.5 → plain-0.3.1}/plain/assets/__init__.py +0 -0
  11. {plain-0.2.5 → plain-0.3.1}/plain/assets/compile.py +0 -0
  12. {plain-0.2.5 → plain-0.3.1}/plain/assets/finders.py +0 -0
  13. {plain-0.2.5 → plain-0.3.1}/plain/assets/fingerprints.py +0 -0
  14. {plain-0.2.5 → plain-0.3.1}/plain/assets/urls.py +0 -0
  15. {plain-0.2.5 → plain-0.3.1}/plain/assets/views.py +0 -0
  16. {plain-0.2.5 → plain-0.3.1}/plain/cli/README.md +0 -0
  17. {plain-0.2.5 → plain-0.3.1}/plain/cli/__init__.py +0 -0
  18. {plain-0.2.5 → plain-0.3.1}/plain/cli/cli.py +0 -0
  19. {plain-0.2.5 → plain-0.3.1}/plain/cli/formatting.py +0 -0
  20. {plain-0.2.5 → plain-0.3.1}/plain/cli/packages.py +0 -0
  21. {plain-0.2.5 → plain-0.3.1}/plain/cli/print.py +0 -0
  22. {plain-0.2.5 → plain-0.3.1}/plain/cli/startup.py +0 -0
  23. {plain-0.2.5 → plain-0.3.1}/plain/csrf/README.md +0 -0
  24. {plain-0.2.5 → plain-0.3.1}/plain/csrf/middleware.py +0 -0
  25. {plain-0.2.5 → plain-0.3.1}/plain/csrf/views.py +0 -0
  26. {plain-0.2.5 → plain-0.3.1}/plain/debug.py +0 -0
  27. {plain-0.2.5 → plain-0.3.1}/plain/exceptions.py +0 -0
  28. {plain-0.2.5 → plain-0.3.1}/plain/forms/README.md +0 -0
  29. {plain-0.2.5 → plain-0.3.1}/plain/forms/__init__.py +0 -0
  30. {plain-0.2.5 → plain-0.3.1}/plain/forms/boundfield.py +0 -0
  31. {plain-0.2.5 → plain-0.3.1}/plain/forms/exceptions.py +0 -0
  32. {plain-0.2.5 → plain-0.3.1}/plain/forms/fields.py +0 -0
  33. {plain-0.2.5 → plain-0.3.1}/plain/forms/forms.py +0 -0
  34. {plain-0.2.5 → plain-0.3.1}/plain/http/README.md +0 -0
  35. {plain-0.2.5 → plain-0.3.1}/plain/http/__init__.py +0 -0
  36. {plain-0.2.5 → plain-0.3.1}/plain/http/cookie.py +0 -0
  37. {plain-0.2.5 → plain-0.3.1}/plain/http/multipartparser.py +0 -0
  38. {plain-0.2.5 → plain-0.3.1}/plain/http/request.py +0 -0
  39. {plain-0.2.5 → plain-0.3.1}/plain/http/response.py +0 -0
  40. {plain-0.2.5 → plain-0.3.1}/plain/internal/__init__.py +0 -0
  41. {plain-0.2.5 → plain-0.3.1}/plain/internal/files/README.md +0 -0
  42. {plain-0.2.5 → plain-0.3.1}/plain/internal/files/__init__.py +0 -0
  43. {plain-0.2.5 → plain-0.3.1}/plain/internal/files/base.py +0 -0
  44. {plain-0.2.5 → plain-0.3.1}/plain/internal/files/locks.py +0 -0
  45. {plain-0.2.5 → plain-0.3.1}/plain/internal/files/move.py +0 -0
  46. {plain-0.2.5 → plain-0.3.1}/plain/internal/files/temp.py +0 -0
  47. {plain-0.2.5 → plain-0.3.1}/plain/internal/files/uploadedfile.py +0 -0
  48. {plain-0.2.5 → plain-0.3.1}/plain/internal/files/uploadhandler.py +0 -0
  49. {plain-0.2.5 → plain-0.3.1}/plain/internal/files/utils.py +0 -0
  50. {plain-0.2.5 → plain-0.3.1}/plain/internal/handlers/__init__.py +0 -0
  51. {plain-0.2.5 → plain-0.3.1}/plain/internal/handlers/base.py +0 -0
  52. {plain-0.2.5 → plain-0.3.1}/plain/internal/handlers/exception.py +0 -0
  53. {plain-0.2.5 → plain-0.3.1}/plain/internal/handlers/wsgi.py +0 -0
  54. {plain-0.2.5 → plain-0.3.1}/plain/internal/legacy/__init__.py +0 -0
  55. {plain-0.2.5 → plain-0.3.1}/plain/internal/legacy/__main__.py +0 -0
  56. {plain-0.2.5 → plain-0.3.1}/plain/internal/legacy/management/__init__.py +0 -0
  57. {plain-0.2.5 → plain-0.3.1}/plain/internal/legacy/management/base.py +0 -0
  58. {plain-0.2.5 → plain-0.3.1}/plain/internal/legacy/management/color.py +0 -0
  59. {plain-0.2.5 → plain-0.3.1}/plain/internal/legacy/management/sql.py +0 -0
  60. {plain-0.2.5 → plain-0.3.1}/plain/internal/legacy/management/utils.py +0 -0
  61. {plain-0.2.5 → plain-0.3.1}/plain/json.py +0 -0
  62. {plain-0.2.5 → plain-0.3.1}/plain/logs/README.md +0 -0
  63. {plain-0.2.5 → plain-0.3.1}/plain/logs/__init__.py +0 -0
  64. {plain-0.2.5 → plain-0.3.1}/plain/logs/configure.py +0 -0
  65. {plain-0.2.5 → plain-0.3.1}/plain/logs/loggers.py +0 -0
  66. {plain-0.2.5 → plain-0.3.1}/plain/logs/utils.py +0 -0
  67. {plain-0.2.5 → plain-0.3.1}/plain/middleware/README.md +0 -0
  68. {plain-0.2.5 → plain-0.3.1}/plain/middleware/__init__.py +0 -0
  69. {plain-0.2.5 → plain-0.3.1}/plain/middleware/clickjacking.py +0 -0
  70. {plain-0.2.5 → plain-0.3.1}/plain/middleware/common.py +0 -0
  71. {plain-0.2.5 → plain-0.3.1}/plain/middleware/gzip.py +0 -0
  72. {plain-0.2.5 → plain-0.3.1}/plain/middleware/security.py +0 -0
  73. {plain-0.2.5 → plain-0.3.1}/plain/packages/README.md +0 -0
  74. {plain-0.2.5 → plain-0.3.1}/plain/packages/__init__.py +0 -0
  75. {plain-0.2.5 → plain-0.3.1}/plain/packages/config.py +0 -0
  76. {plain-0.2.5 → plain-0.3.1}/plain/packages/registry.py +0 -0
  77. {plain-0.2.5 → plain-0.3.1}/plain/paginator.py +0 -0
  78. {plain-0.2.5 → plain-0.3.1}/plain/preflight/README.md +0 -0
  79. {plain-0.2.5 → plain-0.3.1}/plain/preflight/__init__.py +0 -0
  80. {plain-0.2.5 → plain-0.3.1}/plain/preflight/compatibility/__init__.py +0 -0
  81. {plain-0.2.5 → plain-0.3.1}/plain/preflight/compatibility/django_4_0.py +0 -0
  82. {plain-0.2.5 → plain-0.3.1}/plain/preflight/files.py +0 -0
  83. {plain-0.2.5 → plain-0.3.1}/plain/preflight/messages.py +0 -0
  84. {plain-0.2.5 → plain-0.3.1}/plain/preflight/registry.py +0 -0
  85. {plain-0.2.5 → plain-0.3.1}/plain/preflight/security/__init__.py +0 -0
  86. {plain-0.2.5 → plain-0.3.1}/plain/preflight/security/base.py +0 -0
  87. {plain-0.2.5 → plain-0.3.1}/plain/preflight/security/csrf.py +0 -0
  88. {plain-0.2.5 → plain-0.3.1}/plain/preflight/urls.py +0 -0
  89. {plain-0.2.5 → plain-0.3.1}/plain/runtime/README.md +0 -0
  90. {plain-0.2.5 → plain-0.3.1}/plain/runtime/__init__.py +0 -0
  91. {plain-0.2.5 → plain-0.3.1}/plain/runtime/global_settings.py +0 -0
  92. {plain-0.2.5 → plain-0.3.1}/plain/runtime/user_settings.py +0 -0
  93. {plain-0.2.5 → plain-0.3.1}/plain/signals/README.md +0 -0
  94. {plain-0.2.5 → plain-0.3.1}/plain/signals/__init__.py +0 -0
  95. {plain-0.2.5 → plain-0.3.1}/plain/signals/dispatch/__init__.py +0 -0
  96. {plain-0.2.5 → plain-0.3.1}/plain/signals/dispatch/dispatcher.py +0 -0
  97. {plain-0.2.5 → plain-0.3.1}/plain/signals/dispatch/license.txt +0 -0
  98. {plain-0.2.5 → plain-0.3.1}/plain/signing.py +0 -0
  99. {plain-0.2.5 → plain-0.3.1}/plain/templates/README.md +0 -0
  100. {plain-0.2.5 → plain-0.3.1}/plain/templates/__init__.py +0 -0
  101. {plain-0.2.5 → plain-0.3.1}/plain/templates/core.py +0 -0
  102. {plain-0.2.5 → plain-0.3.1}/plain/templates/jinja/README.md +0 -0
  103. {plain-0.2.5 → plain-0.3.1}/plain/templates/jinja/__init__.py +0 -0
  104. {plain-0.2.5 → plain-0.3.1}/plain/templates/jinja/defaults.py +0 -0
  105. {plain-0.2.5 → plain-0.3.1}/plain/templates/jinja/extensions.py +0 -0
  106. {plain-0.2.5 → plain-0.3.1}/plain/templates/jinja/filters.py +0 -0
  107. {plain-0.2.5 → plain-0.3.1}/plain/test/README.md +0 -0
  108. {plain-0.2.5 → plain-0.3.1}/plain/test/__init__.py +0 -0
  109. {plain-0.2.5 → plain-0.3.1}/plain/urls/README.md +0 -0
  110. {plain-0.2.5 → plain-0.3.1}/plain/urls/__init__.py +0 -0
  111. {plain-0.2.5 → plain-0.3.1}/plain/urls/base.py +0 -0
  112. {plain-0.2.5 → plain-0.3.1}/plain/urls/conf.py +0 -0
  113. {plain-0.2.5 → plain-0.3.1}/plain/urls/converters.py +0 -0
  114. {plain-0.2.5 → plain-0.3.1}/plain/urls/exceptions.py +0 -0
  115. {plain-0.2.5 → plain-0.3.1}/plain/urls/resolvers.py +0 -0
  116. {plain-0.2.5 → plain-0.3.1}/plain/utils/README.md +0 -0
  117. {plain-0.2.5 → plain-0.3.1}/plain/utils/__init__.py +0 -0
  118. {plain-0.2.5 → plain-0.3.1}/plain/utils/_os.py +0 -0
  119. {plain-0.2.5 → plain-0.3.1}/plain/utils/cache.py +0 -0
  120. {plain-0.2.5 → plain-0.3.1}/plain/utils/connection.py +0 -0
  121. {plain-0.2.5 → plain-0.3.1}/plain/utils/crypto.py +0 -0
  122. {plain-0.2.5 → plain-0.3.1}/plain/utils/datastructures.py +0 -0
  123. {plain-0.2.5 → plain-0.3.1}/plain/utils/dateformat.py +0 -0
  124. {plain-0.2.5 → plain-0.3.1}/plain/utils/dateparse.py +0 -0
  125. {plain-0.2.5 → plain-0.3.1}/plain/utils/dates.py +0 -0
  126. {plain-0.2.5 → plain-0.3.1}/plain/utils/deconstruct.py +0 -0
  127. {plain-0.2.5 → plain-0.3.1}/plain/utils/decorators.py +0 -0
  128. {plain-0.2.5 → plain-0.3.1}/plain/utils/deprecation.py +0 -0
  129. {plain-0.2.5 → plain-0.3.1}/plain/utils/duration.py +0 -0
  130. {plain-0.2.5 → plain-0.3.1}/plain/utils/email.py +0 -0
  131. {plain-0.2.5 → plain-0.3.1}/plain/utils/encoding.py +0 -0
  132. {plain-0.2.5 → plain-0.3.1}/plain/utils/functional.py +0 -0
  133. {plain-0.2.5 → plain-0.3.1}/plain/utils/hashable.py +0 -0
  134. {plain-0.2.5 → plain-0.3.1}/plain/utils/html.py +0 -0
  135. {plain-0.2.5 → plain-0.3.1}/plain/utils/http.py +0 -0
  136. {plain-0.2.5 → plain-0.3.1}/plain/utils/inspect.py +0 -0
  137. {plain-0.2.5 → plain-0.3.1}/plain/utils/ipv6.py +0 -0
  138. {plain-0.2.5 → plain-0.3.1}/plain/utils/itercompat.py +0 -0
  139. {plain-0.2.5 → plain-0.3.1}/plain/utils/module_loading.py +0 -0
  140. {plain-0.2.5 → plain-0.3.1}/plain/utils/regex_helper.py +0 -0
  141. {plain-0.2.5 → plain-0.3.1}/plain/utils/safestring.py +0 -0
  142. {plain-0.2.5 → plain-0.3.1}/plain/utils/termcolors.py +0 -0
  143. {plain-0.2.5 → plain-0.3.1}/plain/utils/text.py +0 -0
  144. {plain-0.2.5 → plain-0.3.1}/plain/utils/timesince.py +0 -0
  145. {plain-0.2.5 → plain-0.3.1}/plain/utils/timezone.py +0 -0
  146. {plain-0.2.5 → plain-0.3.1}/plain/utils/tree.py +0 -0
  147. {plain-0.2.5 → plain-0.3.1}/plain/validators.py +0 -0
  148. {plain-0.2.5 → plain-0.3.1}/plain/views/README.md +0 -0
  149. {plain-0.2.5 → plain-0.3.1}/plain/views/__init__.py +0 -0
  150. {plain-0.2.5 → plain-0.3.1}/plain/views/base.py +0 -0
  151. {plain-0.2.5 → plain-0.3.1}/plain/views/csrf.py +0 -0
  152. {plain-0.2.5 → plain-0.3.1}/plain/views/errors.py +0 -0
  153. {plain-0.2.5 → plain-0.3.1}/plain/views/exceptions.py +0 -0
  154. {plain-0.2.5 → plain-0.3.1}/plain/views/forms.py +0 -0
  155. {plain-0.2.5 → plain-0.3.1}/plain/views/objects.py +0 -0
  156. {plain-0.2.5 → plain-0.3.1}/plain/views/redirect.py +0 -0
  157. {plain-0.2.5 → plain-0.3.1}/plain/views/templates.py +0 -0
  158. {plain-0.2.5 → plain-0.3.1}/plain/wsgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: plain
3
- Version: 0.2.5
3
+ Version: 0.3.1
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,4 +1,3 @@
1
- from plain.assets.urls import get_asset_url
2
1
  from plain.paginator import Paginator
3
2
  from plain.utils import timezone
4
3
 
@@ -10,8 +9,16 @@ def url(viewname, *args, **kwargs):
10
9
  return reverse(viewname, args=args, kwargs=kwargs)
11
10
 
12
11
 
12
+ def asset(url_path):
13
+ # An explicit callable we can control, but also delay the import of asset.urls->views->templates
14
+ # for circular import reasons
15
+ from plain.assets.urls import get_asset_url
16
+
17
+ return get_asset_url(url_path)
18
+
19
+
13
20
  default_globals = {
14
- "asset": get_asset_url,
21
+ "asset": asset,
15
22
  "url": url,
16
23
  "Paginator": Paginator,
17
24
  "now": timezone.now,
@@ -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
- # Flatten a single context. Not really necessary anymore thanks to the
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)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "plain"
3
- version = "0.2.5"
3
+ version = "0.3.1"
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"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes