plain 0.58.0__tar.gz → 0.86.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.58.0 → plain-0.86.2}/.gitignore +5 -5
- {plain-0.58.0 → plain-0.86.2}/PKG-INFO +5 -3
- plain-0.86.2/plain/AGENTS.md +18 -0
- plain-0.86.2/plain/CHANGELOG.md +697 -0
- {plain-0.58.0 → plain-0.86.2}/plain/README.md +1 -1
- {plain-0.58.0 → plain-0.86.2}/plain/assets/compile.py +20 -7
- {plain-0.58.0 → plain-0.86.2}/plain/assets/finders.py +15 -11
- {plain-0.58.0 → plain-0.86.2}/plain/assets/fingerprints.py +6 -5
- {plain-0.58.0 → plain-0.86.2}/plain/assets/urls.py +1 -1
- {plain-0.58.0 → plain-0.86.2}/plain/assets/views.py +23 -17
- plain-0.86.2/plain/chores/README.md +72 -0
- plain-0.86.2/plain/chores/__init__.py +4 -0
- plain-0.86.2/plain/chores/core.py +27 -0
- plain-0.86.2/plain/chores/registry.py +49 -0
- {plain-0.58.0 → plain-0.86.2}/plain/cli/README.md +26 -0
- plain-0.86.2/plain/cli/__init__.py +4 -0
- plain-0.86.2/plain/cli/agent/__init__.py +17 -0
- plain-0.86.2/plain/cli/agent/docs.py +81 -0
- plain-0.58.0/plain/cli/docs.py → plain-0.86.2/plain/cli/agent/llmdocs.py +25 -88
- plain-0.86.2/plain/cli/agent/md.py +106 -0
- plain-0.58.0/plain/cli/agent.py → plain-0.86.2/plain/cli/agent/prompt.py +10 -15
- plain-0.86.2/plain/cli/agent/request.py +194 -0
- {plain-0.58.0 → plain-0.86.2}/plain/cli/build.py +3 -3
- {plain-0.58.0 → plain-0.86.2}/plain/cli/changelog.py +11 -5
- plain-0.86.2/plain/cli/chores.py +89 -0
- plain-0.86.2/plain/cli/core.py +205 -0
- plain-0.86.2/plain/cli/docs.py +39 -0
- plain-0.86.2/plain/cli/formatting.py +94 -0
- {plain-0.58.0 → plain-0.86.2}/plain/cli/install.py +2 -2
- {plain-0.58.0 → plain-0.86.2}/plain/cli/output.py +6 -2
- plain-0.86.2/plain/cli/preflight.py +198 -0
- {plain-0.58.0 → plain-0.86.2}/plain/cli/print.py +1 -1
- plain-0.86.2/plain/cli/registry.py +131 -0
- plain-0.86.2/plain/cli/runtime.py +45 -0
- {plain-0.58.0 → plain-0.86.2}/plain/cli/scaffold.py +2 -7
- plain-0.86.2/plain/cli/server.py +133 -0
- {plain-0.58.0 → plain-0.86.2}/plain/cli/settings.py +1 -1
- {plain-0.58.0 → plain-0.86.2}/plain/cli/shell.py +29 -12
- {plain-0.58.0 → plain-0.86.2}/plain/cli/startup.py +3 -3
- {plain-0.58.0 → plain-0.86.2}/plain/cli/upgrade.py +6 -4
- {plain-0.58.0 → plain-0.86.2}/plain/cli/urls.py +12 -7
- {plain-0.58.0 → plain-0.86.2}/plain/cli/utils.py +3 -3
- plain-0.86.2/plain/csrf/middleware.py +144 -0
- {plain-0.58.0 → plain-0.86.2}/plain/debug.py +5 -2
- {plain-0.58.0 → plain-0.86.2}/plain/exceptions.py +20 -57
- {plain-0.58.0 → plain-0.86.2}/plain/forms/__init__.py +1 -1
- {plain-0.58.0 → plain-0.86.2}/plain/forms/boundfield.py +14 -7
- {plain-0.58.0 → plain-0.86.2}/plain/forms/exceptions.py +1 -1
- {plain-0.58.0 → plain-0.86.2}/plain/forms/fields.py +139 -97
- {plain-0.58.0 → plain-0.86.2}/plain/forms/forms.py +55 -39
- plain-0.86.2/plain/http/README.md +142 -0
- {plain-0.58.0 → plain-0.86.2}/plain/http/__init__.py +9 -7
- {plain-0.58.0 → plain-0.86.2}/plain/http/cookie.py +15 -7
- plain-0.86.2/plain/http/middleware.py +32 -0
- {plain-0.58.0 → plain-0.86.2}/plain/http/multipartparser.py +50 -30
- {plain-0.58.0 → plain-0.86.2}/plain/http/request.py +186 -191
- {plain-0.58.0 → plain-0.86.2}/plain/http/response.py +101 -80
- {plain-0.58.0 → plain-0.86.2}/plain/internal/__init__.py +8 -1
- {plain-0.58.0 → plain-0.86.2}/plain/internal/files/base.py +34 -18
- {plain-0.58.0 → plain-0.86.2}/plain/internal/files/locks.py +19 -11
- {plain-0.58.0 → plain-0.86.2}/plain/internal/files/move.py +8 -3
- {plain-0.58.0 → plain-0.86.2}/plain/internal/files/temp.py +23 -5
- {plain-0.58.0 → plain-0.86.2}/plain/internal/files/uploadedfile.py +42 -26
- {plain-0.58.0 → plain-0.86.2}/plain/internal/files/uploadhandler.py +50 -29
- {plain-0.58.0 → plain-0.86.2}/plain/internal/files/utils.py +13 -6
- {plain-0.58.0 → plain-0.86.2}/plain/internal/handlers/base.py +28 -19
- {plain-0.58.0 → plain-0.86.2}/plain/internal/handlers/exception.py +42 -44
- {plain-0.58.0 → plain-0.86.2}/plain/internal/handlers/wsgi.py +35 -21
- plain-0.86.2/plain/internal/middleware/headers.py +59 -0
- plain-0.86.2/plain/internal/middleware/hosts.py +191 -0
- plain-0.86.2/plain/internal/middleware/https.py +36 -0
- {plain-0.58.0 → plain-0.86.2}/plain/internal/middleware/slash.py +14 -9
- plain-0.86.2/plain/internal/reloader.py +77 -0
- {plain-0.58.0 → plain-0.86.2}/plain/json.py +2 -1
- plain-0.86.2/plain/logs/README.md +176 -0
- plain-0.86.2/plain/logs/__init__.py +3 -0
- plain-0.86.2/plain/logs/app.py +187 -0
- plain-0.86.2/plain/logs/configure.py +85 -0
- plain-0.86.2/plain/logs/debug.py +47 -0
- plain-0.86.2/plain/logs/filters.py +15 -0
- plain-0.86.2/plain/logs/formatters.py +73 -0
- {plain-0.58.0 → plain-0.86.2}/plain/packages/config.py +14 -6
- {plain-0.58.0 → plain-0.86.2}/plain/packages/registry.py +36 -11
- {plain-0.58.0 → plain-0.86.2}/plain/paginator.py +31 -21
- plain-0.86.2/plain/preflight/README.md +83 -0
- plain-0.86.2/plain/preflight/__init__.py +16 -0
- plain-0.86.2/plain/preflight/checks.py +12 -0
- plain-0.86.2/plain/preflight/files.py +25 -0
- plain-0.86.2/plain/preflight/registry.py +94 -0
- plain-0.86.2/plain/preflight/results.py +37 -0
- plain-0.86.2/plain/preflight/security.py +83 -0
- plain-0.86.2/plain/preflight/urls.py +16 -0
- {plain-0.58.0 → plain-0.86.2}/plain/runtime/README.md +0 -1
- {plain-0.58.0 → plain-0.86.2}/plain/runtime/__init__.py +13 -7
- {plain-0.58.0 → plain-0.86.2}/plain/runtime/global_settings.py +27 -22
- {plain-0.58.0 → plain-0.86.2}/plain/runtime/user_settings.py +26 -17
- plain-0.86.2/plain/runtime/utils.py +23 -0
- plain-0.86.2/plain/server/LICENSE +35 -0
- plain-0.86.2/plain/server/README.md +74 -0
- plain-0.86.2/plain/server/__init__.py +9 -0
- plain-0.86.2/plain/server/app.py +52 -0
- plain-0.86.2/plain/server/arbiter.py +555 -0
- plain-0.86.2/plain/server/config.py +118 -0
- plain-0.86.2/plain/server/errors.py +31 -0
- plain-0.86.2/plain/server/glogging.py +292 -0
- plain-0.86.2/plain/server/http/__init__.py +12 -0
- plain-0.86.2/plain/server/http/body.py +283 -0
- plain-0.86.2/plain/server/http/errors.py +150 -0
- plain-0.86.2/plain/server/http/message.py +399 -0
- plain-0.86.2/plain/server/http/parser.py +69 -0
- plain-0.86.2/plain/server/http/unreader.py +88 -0
- plain-0.86.2/plain/server/http/wsgi.py +421 -0
- plain-0.86.2/plain/server/pidfile.py +91 -0
- plain-0.86.2/plain/server/sock.py +219 -0
- plain-0.86.2/plain/server/util.py +313 -0
- plain-0.86.2/plain/server/workers/__init__.py +6 -0
- plain-0.86.2/plain/server/workers/base.py +302 -0
- plain-0.86.2/plain/server/workers/sync.py +210 -0
- plain-0.86.2/plain/server/workers/thread.py +393 -0
- plain-0.86.2/plain/server/workers/workertmp.py +50 -0
- {plain-0.58.0 → plain-0.86.2}/plain/signals/__init__.py +0 -1
- {plain-0.58.0 → plain-0.86.2}/plain/signals/dispatch/dispatcher.py +39 -17
- {plain-0.58.0 → plain-0.86.2}/plain/signing.py +55 -32
- plain-0.86.2/plain/templates/AGENTS.md +3 -0
- {plain-0.58.0 → plain-0.86.2}/plain/templates/jinja/__init__.py +14 -27
- {plain-0.58.0 → plain-0.86.2}/plain/templates/jinja/environments.py +4 -3
- {plain-0.58.0 → plain-0.86.2}/plain/templates/jinja/extensions.py +9 -3
- {plain-0.58.0 → plain-0.86.2}/plain/templates/jinja/filters.py +7 -2
- {plain-0.58.0 → plain-0.86.2}/plain/templates/jinja/globals.py +1 -1
- {plain-0.58.0 → plain-0.86.2}/plain/test/README.md +1 -1
- {plain-0.58.0 → plain-0.86.2}/plain/test/client.py +334 -219
- {plain-0.58.0 → plain-0.86.2}/plain/test/encoding.py +9 -6
- plain-0.86.2/plain/test/exceptions.py +15 -0
- {plain-0.58.0 → plain-0.86.2}/plain/urls/converters.py +13 -10
- {plain-0.58.0 → plain-0.86.2}/plain/urls/patterns.py +50 -38
- {plain-0.58.0 → plain-0.86.2}/plain/urls/resolvers.py +35 -25
- {plain-0.58.0 → plain-0.86.2}/plain/urls/utils.py +5 -1
- {plain-0.58.0 → plain-0.86.2}/plain/utils/cache.py +14 -8
- {plain-0.58.0 → plain-0.86.2}/plain/utils/crypto.py +21 -10
- {plain-0.58.0 → plain-0.86.2}/plain/utils/datastructures.py +84 -54
- {plain-0.58.0 → plain-0.86.2}/plain/utils/dateparse.py +10 -7
- {plain-0.58.0 → plain-0.86.2}/plain/utils/deconstruct.py +12 -4
- {plain-0.58.0 → plain-0.86.2}/plain/utils/decorators.py +5 -1
- {plain-0.58.0 → plain-0.86.2}/plain/utils/duration.py +8 -4
- {plain-0.58.0 → plain-0.86.2}/plain/utils/encoding.py +14 -7
- {plain-0.58.0 → plain-0.86.2}/plain/utils/functional.py +62 -47
- {plain-0.58.0 → plain-0.86.2}/plain/utils/hashable.py +5 -1
- {plain-0.58.0 → plain-0.86.2}/plain/utils/html.py +33 -21
- {plain-0.58.0 → plain-0.86.2}/plain/utils/http.py +16 -29
- {plain-0.58.0 → plain-0.86.2}/plain/utils/inspect.py +14 -6
- {plain-0.58.0 → plain-0.86.2}/plain/utils/ipv6.py +7 -3
- {plain-0.58.0 → plain-0.86.2}/plain/utils/itercompat.py +6 -1
- {plain-0.58.0 → plain-0.86.2}/plain/utils/module_loading.py +7 -3
- {plain-0.58.0 → plain-0.86.2}/plain/utils/regex_helper.py +23 -13
- {plain-0.58.0 → plain-0.86.2}/plain/utils/safestring.py +14 -6
- {plain-0.58.0 → plain-0.86.2}/plain/utils/text.py +34 -18
- {plain-0.58.0 → plain-0.86.2}/plain/utils/timezone.py +30 -19
- {plain-0.58.0 → plain-0.86.2}/plain/utils/tree.py +31 -18
- {plain-0.58.0 → plain-0.86.2}/plain/validators.py +71 -44
- {plain-0.58.0 → plain-0.86.2}/plain/views/README.md +16 -26
- {plain-0.58.0 → plain-0.86.2}/plain/views/base.py +18 -11
- {plain-0.58.0 → plain-0.86.2}/plain/views/errors.py +13 -5
- {plain-0.58.0 → plain-0.86.2}/plain/views/exceptions.py +4 -1
- {plain-0.58.0 → plain-0.86.2}/plain/views/objects.py +64 -80
- {plain-0.58.0 → plain-0.86.2}/plain/views/redirect.py +14 -10
- {plain-0.58.0 → plain-0.86.2}/plain/views/templates.py +7 -1
- {plain-0.58.0 → plain-0.86.2}/plain/wsgi.py +3 -1
- {plain-0.58.0 → plain-0.86.2}/pyproject.toml +6 -8
- {plain-0.58.0 → plain-0.86.2}/tests/test_cli.py +0 -8
- {plain-0.58.0 → plain-0.86.2}/tests/test_csrf.py +42 -61
- plain-0.86.2/tests/test_http_hosts.py +189 -0
- plain-0.86.2/tests/test_logs.py +295 -0
- {plain-0.58.0 → plain-0.86.2}/tests/test_wsgi.py +2 -1
- plain-0.58.0/plain/CHANGELOG.md +0 -178
- plain-0.58.0/plain/chores/README.md +0 -70
- plain-0.58.0/plain/chores/__init__.py +0 -3
- plain-0.58.0/plain/chores/registry.py +0 -79
- plain-0.58.0/plain/cli/__init__.py +0 -3
- plain-0.58.0/plain/cli/chores.py +0 -91
- plain-0.58.0/plain/cli/core.py +0 -123
- plain-0.58.0/plain/cli/formatting.py +0 -61
- plain-0.58.0/plain/cli/help.py +0 -27
- plain-0.58.0/plain/cli/preflight.py +0 -126
- plain-0.58.0/plain/cli/registry.py +0 -62
- plain-0.58.0/plain/csrf/middleware.py +0 -134
- plain-0.58.0/plain/csrf/views.py +0 -31
- plain-0.58.0/plain/http/README.md +0 -30
- plain-0.58.0/plain/internal/middleware/headers.py +0 -25
- plain-0.58.0/plain/internal/middleware/https.py +0 -40
- plain-0.58.0/plain/logs/README.md +0 -61
- plain-0.58.0/plain/logs/__init__.py +0 -5
- plain-0.58.0/plain/logs/configure.py +0 -44
- plain-0.58.0/plain/logs/loggers.py +0 -74
- plain-0.58.0/plain/logs/utils.py +0 -46
- plain-0.58.0/plain/preflight/README.md +0 -61
- plain-0.58.0/plain/preflight/__init__.py +0 -36
- plain-0.58.0/plain/preflight/files.py +0 -19
- plain-0.58.0/plain/preflight/messages.py +0 -81
- plain-0.58.0/plain/preflight/registry.py +0 -72
- plain-0.58.0/plain/preflight/security.py +0 -89
- plain-0.58.0/plain/preflight/urls.py +0 -54
- plain-0.58.0/plain/test/exceptions.py +0 -7
- {plain-0.58.0 → plain-0.86.2}/LICENSE +0 -0
- {plain-0.58.0 → plain-0.86.2}/README.md +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/__main__.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/assets/README.md +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/assets/__init__.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/csrf/README.md +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/forms/README.md +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/internal/files/__init__.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/internal/handlers/__init__.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/internal/middleware/__init__.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/packages/README.md +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/packages/__init__.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/signals/README.md +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/signals/dispatch/__init__.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/signals/dispatch/license.txt +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/templates/README.md +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/templates/__init__.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/templates/core.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/test/__init__.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/urls/README.md +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/urls/__init__.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/urls/exceptions.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/urls/routers.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/utils/README.md +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/utils/__init__.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/utils/timesince.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/views/__init__.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/plain/views/forms.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/tests/.gitignore +0 -0
- {plain-0.58.0 → plain-0.86.2}/tests/app/.gitignore +0 -0
- {plain-0.58.0 → plain-0.86.2}/tests/app/settings.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/tests/app/test/__init__.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/tests/app/test/default_settings.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/tests/app/urls.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/tests/conftest.py +0 -0
- {plain-0.58.0 → plain-0.86.2}/tests/test_runtime.py +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
.venv
|
|
2
|
-
|
|
2
|
+
/.env
|
|
3
3
|
*.egg-info
|
|
4
4
|
*.py[co]
|
|
5
5
|
__pycache__
|
|
@@ -8,12 +8,12 @@ __pycache__
|
|
|
8
8
|
# Test apps
|
|
9
9
|
plain*/tests/.plain
|
|
10
10
|
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
/llms-full.txt
|
|
11
|
+
# Agent scratch files
|
|
12
|
+
/scratch
|
|
15
13
|
|
|
16
14
|
# Plain temp dirs
|
|
17
15
|
.plain
|
|
18
16
|
|
|
19
17
|
.vscode
|
|
18
|
+
/.claude
|
|
19
|
+
/.benchmarks
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plain
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.86.2
|
|
4
4
|
Summary: A web framework for building products with Python.
|
|
5
5
|
Author-email: Dave Gaeddert <dave.gaeddert@dropseed.dev>
|
|
6
|
+
License-Expression: BSD-3-Clause
|
|
6
7
|
License-File: LICENSE
|
|
7
|
-
Requires-Python: >=3.
|
|
8
|
+
Requires-Python: >=3.13
|
|
8
9
|
Requires-Dist: click>=8.0.0
|
|
9
10
|
Requires-Dist: jinja2>=3.1.2
|
|
10
11
|
Requires-Dist: opentelemetry-api>=1.34.1
|
|
11
12
|
Requires-Dist: opentelemetry-semantic-conventions>=0.55b1
|
|
13
|
+
Requires-Dist: watchfiles>=0.18.0
|
|
12
14
|
Description-Content-Type: text/markdown
|
|
13
15
|
|
|
14
16
|
# Plain
|
|
@@ -44,7 +46,7 @@ The `plain` package includes everything you need to start handling web requests
|
|
|
44
46
|
- [plain.cache](/plain-cache/plain/cache/README.md) - A database-driven general purpose cache.
|
|
45
47
|
- [plain.email](/plain-email/plain/email/README.md) - Send emails with SMTP or custom backends.
|
|
46
48
|
- [plain.sessions](/plain-sessions/plain/sessions/README.md) - User sessions and cookies.
|
|
47
|
-
- [plain.
|
|
49
|
+
- [plain.jobs](/plain-jobs/plain/jobs/README.md) - Background jobs stored in the database.
|
|
48
50
|
- [plain.api](/plain-api/plain/api/README.md) - Build APIs with Plain views.
|
|
49
51
|
|
|
50
52
|
## Auth Packages
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Plain AGENTS.md
|
|
2
|
+
|
|
3
|
+
Plain is a Python web framework that was originally forked from Django. While it still has a lot in common with Django, there are also significant changes -- don't solely rely on knowledge of Django when working with Plain.
|
|
4
|
+
|
|
5
|
+
## Commands
|
|
6
|
+
|
|
7
|
+
The `plain` CLI is the main entrypoint for the framework. If `plain` is not available by itself, try `uv run plain`.
|
|
8
|
+
|
|
9
|
+
- `plain shell -c <command>`: Run a Python command with Plain configured.
|
|
10
|
+
- `plain run <filename>`: Run a Python script with Plain configured.
|
|
11
|
+
- `plain agent docs <package>`: Show README.md and symbolicated source files for a specific package.
|
|
12
|
+
- `plain agent docs --list`: List packages with docs available.
|
|
13
|
+
- `plain agent request <path> --user <user_id>`: Make an authenticated request to the running application and inspect the output.
|
|
14
|
+
- `plain --help`: List all available commands (including those from installed packages).
|
|
15
|
+
|
|
16
|
+
## Code style
|
|
17
|
+
|
|
18
|
+
- Imports should be at the top of the file, unless there is a specific reason to import later (e.g. to avoid circular imports).
|