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.
- {plain-0.52.1 → plain-0.52.2}/PKG-INFO +1 -1
- {plain-0.52.1 → plain-0.52.2}/plain/CHANGELOG.md +10 -0
- {plain-0.52.1 → plain-0.52.2}/plain/assets/README.md +6 -4
- {plain-0.52.1 → plain-0.52.2}/pyproject.toml +1 -1
- {plain-0.52.1 → plain-0.52.2}/.gitignore +0 -0
- {plain-0.52.1 → plain-0.52.2}/LICENSE +0 -0
- {plain-0.52.1 → plain-0.52.2}/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/__main__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/assets/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/assets/compile.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/assets/finders.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/assets/fingerprints.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/assets/urls.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/assets/views.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/chores/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/chores/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/chores/registry.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/build.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/changelog.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/chores.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/core.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/docs.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/formatting.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/help.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/output.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/preflight.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/print.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/registry.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/scaffold.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/settings.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/shell.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/startup.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/urls.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/cli/utils.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/csrf/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/csrf/middleware.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/csrf/views.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/debug.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/exceptions.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/forms/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/forms/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/forms/boundfield.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/forms/exceptions.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/forms/fields.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/forms/forms.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/http/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/http/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/http/cookie.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/http/multipartparser.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/http/request.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/http/response.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/files/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/files/base.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/files/locks.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/files/move.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/files/temp.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/files/uploadedfile.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/files/uploadhandler.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/files/utils.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/handlers/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/handlers/base.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/handlers/exception.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/handlers/wsgi.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/middleware/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/middleware/headers.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/middleware/https.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/internal/middleware/slash.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/json.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/logs/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/logs/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/logs/configure.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/logs/loggers.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/logs/utils.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/packages/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/packages/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/packages/config.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/packages/registry.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/paginator.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/preflight/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/preflight/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/preflight/files.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/preflight/messages.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/preflight/registry.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/preflight/security.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/preflight/urls.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/runtime/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/runtime/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/runtime/global_settings.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/runtime/user_settings.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/signals/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/signals/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/signals/dispatch/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/signals/dispatch/dispatcher.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/signals/dispatch/license.txt +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/signing.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/templates/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/templates/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/templates/core.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/templates/jinja/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/templates/jinja/environments.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/templates/jinja/extensions.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/templates/jinja/filters.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/templates/jinja/globals.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/test/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/test/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/test/client.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/test/encoding.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/test/exceptions.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/urls/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/urls/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/urls/converters.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/urls/exceptions.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/urls/patterns.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/urls/resolvers.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/urls/routers.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/urls/utils.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/cache.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/crypto.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/datastructures.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/dateparse.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/deconstruct.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/decorators.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/duration.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/encoding.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/functional.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/hashable.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/html.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/http.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/inspect.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/ipv6.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/itercompat.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/module_loading.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/regex_helper.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/safestring.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/text.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/timesince.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/timezone.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/utils/tree.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/validators.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/views/README.md +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/views/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/views/base.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/views/csrf.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/views/errors.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/views/exceptions.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/views/forms.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/views/objects.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/views/redirect.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/views/templates.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/plain/wsgi.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/tests/.gitignore +0 -0
- {plain-0.52.1 → plain-0.52.2}/tests/app/.gitignore +0 -0
- {plain-0.52.1 → plain-0.52.2}/tests/app/settings.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/tests/app/test/__init__.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/tests/app/test/default_settings.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/tests/app/urls.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/tests/conftest.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/tests/test_cli.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/tests/test_runtime.py +0 -0
- {plain-0.52.1 → plain-0.52.2}/tests/test_wsgi.py +0 -0
@@ -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.
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|