plain 0.52.1__tar.gz → 0.52.2__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 (166) hide show
  1. {plain-0.52.1 → plain-0.52.2}/PKG-INFO +1 -1
  2. {plain-0.52.1 → plain-0.52.2}/plain/CHANGELOG.md +10 -0
  3. {plain-0.52.1 → plain-0.52.2}/plain/assets/README.md +6 -4
  4. {plain-0.52.1 → plain-0.52.2}/pyproject.toml +1 -1
  5. {plain-0.52.1 → plain-0.52.2}/.gitignore +0 -0
  6. {plain-0.52.1 → plain-0.52.2}/LICENSE +0 -0
  7. {plain-0.52.1 → plain-0.52.2}/README.md +0 -0
  8. {plain-0.52.1 → plain-0.52.2}/plain/README.md +0 -0
  9. {plain-0.52.1 → plain-0.52.2}/plain/__main__.py +0 -0
  10. {plain-0.52.1 → plain-0.52.2}/plain/assets/__init__.py +0 -0
  11. {plain-0.52.1 → plain-0.52.2}/plain/assets/compile.py +0 -0
  12. {plain-0.52.1 → plain-0.52.2}/plain/assets/finders.py +0 -0
  13. {plain-0.52.1 → plain-0.52.2}/plain/assets/fingerprints.py +0 -0
  14. {plain-0.52.1 → plain-0.52.2}/plain/assets/urls.py +0 -0
  15. {plain-0.52.1 → plain-0.52.2}/plain/assets/views.py +0 -0
  16. {plain-0.52.1 → plain-0.52.2}/plain/chores/README.md +0 -0
  17. {plain-0.52.1 → plain-0.52.2}/plain/chores/__init__.py +0 -0
  18. {plain-0.52.1 → plain-0.52.2}/plain/chores/registry.py +0 -0
  19. {plain-0.52.1 → plain-0.52.2}/plain/cli/README.md +0 -0
  20. {plain-0.52.1 → plain-0.52.2}/plain/cli/__init__.py +0 -0
  21. {plain-0.52.1 → plain-0.52.2}/plain/cli/build.py +0 -0
  22. {plain-0.52.1 → plain-0.52.2}/plain/cli/changelog.py +0 -0
  23. {plain-0.52.1 → plain-0.52.2}/plain/cli/chores.py +0 -0
  24. {plain-0.52.1 → plain-0.52.2}/plain/cli/core.py +0 -0
  25. {plain-0.52.1 → plain-0.52.2}/plain/cli/docs.py +0 -0
  26. {plain-0.52.1 → plain-0.52.2}/plain/cli/formatting.py +0 -0
  27. {plain-0.52.1 → plain-0.52.2}/plain/cli/help.py +0 -0
  28. {plain-0.52.1 → plain-0.52.2}/plain/cli/output.py +0 -0
  29. {plain-0.52.1 → plain-0.52.2}/plain/cli/preflight.py +0 -0
  30. {plain-0.52.1 → plain-0.52.2}/plain/cli/print.py +0 -0
  31. {plain-0.52.1 → plain-0.52.2}/plain/cli/registry.py +0 -0
  32. {plain-0.52.1 → plain-0.52.2}/plain/cli/scaffold.py +0 -0
  33. {plain-0.52.1 → plain-0.52.2}/plain/cli/settings.py +0 -0
  34. {plain-0.52.1 → plain-0.52.2}/plain/cli/shell.py +0 -0
  35. {plain-0.52.1 → plain-0.52.2}/plain/cli/startup.py +0 -0
  36. {plain-0.52.1 → plain-0.52.2}/plain/cli/urls.py +0 -0
  37. {plain-0.52.1 → plain-0.52.2}/plain/cli/utils.py +0 -0
  38. {plain-0.52.1 → plain-0.52.2}/plain/csrf/README.md +0 -0
  39. {plain-0.52.1 → plain-0.52.2}/plain/csrf/middleware.py +0 -0
  40. {plain-0.52.1 → plain-0.52.2}/plain/csrf/views.py +0 -0
  41. {plain-0.52.1 → plain-0.52.2}/plain/debug.py +0 -0
  42. {plain-0.52.1 → plain-0.52.2}/plain/exceptions.py +0 -0
  43. {plain-0.52.1 → plain-0.52.2}/plain/forms/README.md +0 -0
  44. {plain-0.52.1 → plain-0.52.2}/plain/forms/__init__.py +0 -0
  45. {plain-0.52.1 → plain-0.52.2}/plain/forms/boundfield.py +0 -0
  46. {plain-0.52.1 → plain-0.52.2}/plain/forms/exceptions.py +0 -0
  47. {plain-0.52.1 → plain-0.52.2}/plain/forms/fields.py +0 -0
  48. {plain-0.52.1 → plain-0.52.2}/plain/forms/forms.py +0 -0
  49. {plain-0.52.1 → plain-0.52.2}/plain/http/README.md +0 -0
  50. {plain-0.52.1 → plain-0.52.2}/plain/http/__init__.py +0 -0
  51. {plain-0.52.1 → plain-0.52.2}/plain/http/cookie.py +0 -0
  52. {plain-0.52.1 → plain-0.52.2}/plain/http/multipartparser.py +0 -0
  53. {plain-0.52.1 → plain-0.52.2}/plain/http/request.py +0 -0
  54. {plain-0.52.1 → plain-0.52.2}/plain/http/response.py +0 -0
  55. {plain-0.52.1 → plain-0.52.2}/plain/internal/__init__.py +0 -0
  56. {plain-0.52.1 → plain-0.52.2}/plain/internal/files/__init__.py +0 -0
  57. {plain-0.52.1 → plain-0.52.2}/plain/internal/files/base.py +0 -0
  58. {plain-0.52.1 → plain-0.52.2}/plain/internal/files/locks.py +0 -0
  59. {plain-0.52.1 → plain-0.52.2}/plain/internal/files/move.py +0 -0
  60. {plain-0.52.1 → plain-0.52.2}/plain/internal/files/temp.py +0 -0
  61. {plain-0.52.1 → plain-0.52.2}/plain/internal/files/uploadedfile.py +0 -0
  62. {plain-0.52.1 → plain-0.52.2}/plain/internal/files/uploadhandler.py +0 -0
  63. {plain-0.52.1 → plain-0.52.2}/plain/internal/files/utils.py +0 -0
  64. {plain-0.52.1 → plain-0.52.2}/plain/internal/handlers/__init__.py +0 -0
  65. {plain-0.52.1 → plain-0.52.2}/plain/internal/handlers/base.py +0 -0
  66. {plain-0.52.1 → plain-0.52.2}/plain/internal/handlers/exception.py +0 -0
  67. {plain-0.52.1 → plain-0.52.2}/plain/internal/handlers/wsgi.py +0 -0
  68. {plain-0.52.1 → plain-0.52.2}/plain/internal/middleware/__init__.py +0 -0
  69. {plain-0.52.1 → plain-0.52.2}/plain/internal/middleware/headers.py +0 -0
  70. {plain-0.52.1 → plain-0.52.2}/plain/internal/middleware/https.py +0 -0
  71. {plain-0.52.1 → plain-0.52.2}/plain/internal/middleware/slash.py +0 -0
  72. {plain-0.52.1 → plain-0.52.2}/plain/json.py +0 -0
  73. {plain-0.52.1 → plain-0.52.2}/plain/logs/README.md +0 -0
  74. {plain-0.52.1 → plain-0.52.2}/plain/logs/__init__.py +0 -0
  75. {plain-0.52.1 → plain-0.52.2}/plain/logs/configure.py +0 -0
  76. {plain-0.52.1 → plain-0.52.2}/plain/logs/loggers.py +0 -0
  77. {plain-0.52.1 → plain-0.52.2}/plain/logs/utils.py +0 -0
  78. {plain-0.52.1 → plain-0.52.2}/plain/packages/README.md +0 -0
  79. {plain-0.52.1 → plain-0.52.2}/plain/packages/__init__.py +0 -0
  80. {plain-0.52.1 → plain-0.52.2}/plain/packages/config.py +0 -0
  81. {plain-0.52.1 → plain-0.52.2}/plain/packages/registry.py +0 -0
  82. {plain-0.52.1 → plain-0.52.2}/plain/paginator.py +0 -0
  83. {plain-0.52.1 → plain-0.52.2}/plain/preflight/README.md +0 -0
  84. {plain-0.52.1 → plain-0.52.2}/plain/preflight/__init__.py +0 -0
  85. {plain-0.52.1 → plain-0.52.2}/plain/preflight/files.py +0 -0
  86. {plain-0.52.1 → plain-0.52.2}/plain/preflight/messages.py +0 -0
  87. {plain-0.52.1 → plain-0.52.2}/plain/preflight/registry.py +0 -0
  88. {plain-0.52.1 → plain-0.52.2}/plain/preflight/security.py +0 -0
  89. {plain-0.52.1 → plain-0.52.2}/plain/preflight/urls.py +0 -0
  90. {plain-0.52.1 → plain-0.52.2}/plain/runtime/README.md +0 -0
  91. {plain-0.52.1 → plain-0.52.2}/plain/runtime/__init__.py +0 -0
  92. {plain-0.52.1 → plain-0.52.2}/plain/runtime/global_settings.py +0 -0
  93. {plain-0.52.1 → plain-0.52.2}/plain/runtime/user_settings.py +0 -0
  94. {plain-0.52.1 → plain-0.52.2}/plain/signals/README.md +0 -0
  95. {plain-0.52.1 → plain-0.52.2}/plain/signals/__init__.py +0 -0
  96. {plain-0.52.1 → plain-0.52.2}/plain/signals/dispatch/__init__.py +0 -0
  97. {plain-0.52.1 → plain-0.52.2}/plain/signals/dispatch/dispatcher.py +0 -0
  98. {plain-0.52.1 → plain-0.52.2}/plain/signals/dispatch/license.txt +0 -0
  99. {plain-0.52.1 → plain-0.52.2}/plain/signing.py +0 -0
  100. {plain-0.52.1 → plain-0.52.2}/plain/templates/README.md +0 -0
  101. {plain-0.52.1 → plain-0.52.2}/plain/templates/__init__.py +0 -0
  102. {plain-0.52.1 → plain-0.52.2}/plain/templates/core.py +0 -0
  103. {plain-0.52.1 → plain-0.52.2}/plain/templates/jinja/__init__.py +0 -0
  104. {plain-0.52.1 → plain-0.52.2}/plain/templates/jinja/environments.py +0 -0
  105. {plain-0.52.1 → plain-0.52.2}/plain/templates/jinja/extensions.py +0 -0
  106. {plain-0.52.1 → plain-0.52.2}/plain/templates/jinja/filters.py +0 -0
  107. {plain-0.52.1 → plain-0.52.2}/plain/templates/jinja/globals.py +0 -0
  108. {plain-0.52.1 → plain-0.52.2}/plain/test/README.md +0 -0
  109. {plain-0.52.1 → plain-0.52.2}/plain/test/__init__.py +0 -0
  110. {plain-0.52.1 → plain-0.52.2}/plain/test/client.py +0 -0
  111. {plain-0.52.1 → plain-0.52.2}/plain/test/encoding.py +0 -0
  112. {plain-0.52.1 → plain-0.52.2}/plain/test/exceptions.py +0 -0
  113. {plain-0.52.1 → plain-0.52.2}/plain/urls/README.md +0 -0
  114. {plain-0.52.1 → plain-0.52.2}/plain/urls/__init__.py +0 -0
  115. {plain-0.52.1 → plain-0.52.2}/plain/urls/converters.py +0 -0
  116. {plain-0.52.1 → plain-0.52.2}/plain/urls/exceptions.py +0 -0
  117. {plain-0.52.1 → plain-0.52.2}/plain/urls/patterns.py +0 -0
  118. {plain-0.52.1 → plain-0.52.2}/plain/urls/resolvers.py +0 -0
  119. {plain-0.52.1 → plain-0.52.2}/plain/urls/routers.py +0 -0
  120. {plain-0.52.1 → plain-0.52.2}/plain/urls/utils.py +0 -0
  121. {plain-0.52.1 → plain-0.52.2}/plain/utils/README.md +0 -0
  122. {plain-0.52.1 → plain-0.52.2}/plain/utils/__init__.py +0 -0
  123. {plain-0.52.1 → plain-0.52.2}/plain/utils/cache.py +0 -0
  124. {plain-0.52.1 → plain-0.52.2}/plain/utils/crypto.py +0 -0
  125. {plain-0.52.1 → plain-0.52.2}/plain/utils/datastructures.py +0 -0
  126. {plain-0.52.1 → plain-0.52.2}/plain/utils/dateparse.py +0 -0
  127. {plain-0.52.1 → plain-0.52.2}/plain/utils/deconstruct.py +0 -0
  128. {plain-0.52.1 → plain-0.52.2}/plain/utils/decorators.py +0 -0
  129. {plain-0.52.1 → plain-0.52.2}/plain/utils/duration.py +0 -0
  130. {plain-0.52.1 → plain-0.52.2}/plain/utils/encoding.py +0 -0
  131. {plain-0.52.1 → plain-0.52.2}/plain/utils/functional.py +0 -0
  132. {plain-0.52.1 → plain-0.52.2}/plain/utils/hashable.py +0 -0
  133. {plain-0.52.1 → plain-0.52.2}/plain/utils/html.py +0 -0
  134. {plain-0.52.1 → plain-0.52.2}/plain/utils/http.py +0 -0
  135. {plain-0.52.1 → plain-0.52.2}/plain/utils/inspect.py +0 -0
  136. {plain-0.52.1 → plain-0.52.2}/plain/utils/ipv6.py +0 -0
  137. {plain-0.52.1 → plain-0.52.2}/plain/utils/itercompat.py +0 -0
  138. {plain-0.52.1 → plain-0.52.2}/plain/utils/module_loading.py +0 -0
  139. {plain-0.52.1 → plain-0.52.2}/plain/utils/regex_helper.py +0 -0
  140. {plain-0.52.1 → plain-0.52.2}/plain/utils/safestring.py +0 -0
  141. {plain-0.52.1 → plain-0.52.2}/plain/utils/text.py +0 -0
  142. {plain-0.52.1 → plain-0.52.2}/plain/utils/timesince.py +0 -0
  143. {plain-0.52.1 → plain-0.52.2}/plain/utils/timezone.py +0 -0
  144. {plain-0.52.1 → plain-0.52.2}/plain/utils/tree.py +0 -0
  145. {plain-0.52.1 → plain-0.52.2}/plain/validators.py +0 -0
  146. {plain-0.52.1 → plain-0.52.2}/plain/views/README.md +0 -0
  147. {plain-0.52.1 → plain-0.52.2}/plain/views/__init__.py +0 -0
  148. {plain-0.52.1 → plain-0.52.2}/plain/views/base.py +0 -0
  149. {plain-0.52.1 → plain-0.52.2}/plain/views/csrf.py +0 -0
  150. {plain-0.52.1 → plain-0.52.2}/plain/views/errors.py +0 -0
  151. {plain-0.52.1 → plain-0.52.2}/plain/views/exceptions.py +0 -0
  152. {plain-0.52.1 → plain-0.52.2}/plain/views/forms.py +0 -0
  153. {plain-0.52.1 → plain-0.52.2}/plain/views/objects.py +0 -0
  154. {plain-0.52.1 → plain-0.52.2}/plain/views/redirect.py +0 -0
  155. {plain-0.52.1 → plain-0.52.2}/plain/views/templates.py +0 -0
  156. {plain-0.52.1 → plain-0.52.2}/plain/wsgi.py +0 -0
  157. {plain-0.52.1 → plain-0.52.2}/tests/.gitignore +0 -0
  158. {plain-0.52.1 → plain-0.52.2}/tests/app/.gitignore +0 -0
  159. {plain-0.52.1 → plain-0.52.2}/tests/app/settings.py +0 -0
  160. {plain-0.52.1 → plain-0.52.2}/tests/app/test/__init__.py +0 -0
  161. {plain-0.52.1 → plain-0.52.2}/tests/app/test/default_settings.py +0 -0
  162. {plain-0.52.1 → plain-0.52.2}/tests/app/urls.py +0 -0
  163. {plain-0.52.1 → plain-0.52.2}/tests/conftest.py +0 -0
  164. {plain-0.52.1 → plain-0.52.2}/tests/test_cli.py +0 -0
  165. {plain-0.52.1 → plain-0.52.2}/tests/test_runtime.py +0 -0
  166. {plain-0.52.1 → plain-0.52.2}/tests/test_wsgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plain
3
- Version: 0.52.1
3
+ Version: 0.52.2
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
@@ -1,5 +1,15 @@
1
1
  # plain changelog
2
2
 
3
+ ## [0.52.2](https://github.com/dropseed/plain/releases/plain@0.52.2) (2025-06-27)
4
+
5
+ ### What's changed
6
+
7
+ - Improved documentation for the assets subsystem: the `AssetsRouter` reference in the Assets README now links directly to the source code for quicker navigation ([65437e9](https://github.com/dropseed/plain/commit/65437e9bb1a522c7ababe0fc195f63bc5fd6c4d4))
8
+
9
+ ### Upgrade instructions
10
+
11
+ - No changes required
12
+
3
13
  ## [0.52.1](https://github.com/dropseed/plain/releases/plain@0.52.1) (2025-06-27)
4
14
 
5
15
  ### What's changed
@@ -6,7 +6,7 @@
6
6
 
7
7
  To serve assets, put them in `app/assets` or `app/{package}/assets`.
8
8
 
9
- Then include the `AssetsRouter` in your own router, typically under the `assets/` path.
9
+ Then include the [`AssetsRouter`](./urls.py#AssetsRouter) in your own router, typically under the `assets/` path.
10
10
 
11
11
  ```python
12
12
  # app/urls.py
@@ -40,7 +40,7 @@ In production, one of your deployment steps should be to compile the assets.
40
40
  plain build
41
41
  ```
42
42
 
43
- By default, this [generates "fingerprinted" and compressed versions of the assets](fingerprints.py#get_file_fingerprint), which are then served by your app. This means that a file like `main.css` will result in two new files, like `main.d0db67b.css` and `main.d0db67b.css.gz`.
43
+ By default, this [generates "fingerprinted" and compressed versions of the assets](./fingerprints.py#get_file_fingerprint), which are then served by your app. This means that a file like `main.css` will result in two new files, like `main.d0db67b.css` and `main.d0db67b.css.gz`.
44
44
 
45
45
  The purpose of fingerprinting the assets is to allow the browser to cache them indefinitely. When the content of the file changes, the fingerprint will change, and the browser will use the newer file. This cuts down on the number of requests that your app has to handle related to assets.
46
46
 
@@ -64,6 +64,8 @@ class AppRouter(Router):
64
64
 
65
65
  ### How do you reference assets in Python code?
66
66
 
67
+ There is a [`get_asset_url`](./urls.py#get_asset_url) function that you can use to get the URL of an asset in Python code. This is useful if you need to reference an asset in a non-template context, such as in a redirect or an API response.
68
+
67
69
  ```python
68
70
  from plain.assets.urls import get_asset_url
69
71
 
@@ -94,7 +96,7 @@ ls .plain/assets/compiled
94
96
  ./example-upload-to-cdn-script
95
97
  ```
96
98
 
97
- Use the `ASSETS_BASE_URL` setting to tell the `{{ asset() }}` template function where to point.
99
+ Use the [`ASSETS_BASE_URL`](../runtime/global_settings.py#ASSETS_BASE_URL) setting to tell the `{{ asset() }}` template function where to point.
98
100
 
99
101
  ```python
100
102
  # app/settings.py
@@ -107,4 +109,4 @@ The default behavior is to fingerprint assets, which is an exact copy of the ori
107
109
 
108
110
  If you need the originals for any reason, you can use `plain build --keep-original`, though this will typically be combined with `--no-fingerprint` otherwise the fingerprinted files will still get priority in `{{ asset() }}` template calls.
109
111
 
110
- Note that by default, the `ASSETS_REDIRECT_ORIGINAL` setting is `True`, which will redirect requests for the original file to the fingerprinted file.
112
+ Note that by default, the [`ASSETS_REDIRECT_ORIGINAL`](../runtime/global_settings.py#ASSETS_REDIRECT_ORIGINAL) setting is `True`, which will redirect requests for the original file to the fingerprinted file.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "plain"
3
- version = "0.52.1"
3
+ version = "0.52.2"
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
File without changes
File without changes
File without changes