plain 0.58.0__tar.gz → 0.97.0__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.
Potentially problematic release.
This version of plain might be problematic. Click here for more details.
- {plain-0.58.0 → plain-0.97.0}/.gitignore +7 -5
- {plain-0.58.0 → plain-0.97.0}/PKG-INFO +5 -3
- plain-0.97.0/plain/CHANGELOG.md +891 -0
- {plain-0.58.0 → plain-0.97.0}/plain/README.md +1 -1
- {plain-0.58.0 → plain-0.97.0}/plain/assets/compile.py +20 -7
- {plain-0.58.0 → plain-0.97.0}/plain/assets/finders.py +15 -11
- {plain-0.58.0 → plain-0.97.0}/plain/assets/fingerprints.py +6 -5
- {plain-0.58.0 → plain-0.97.0}/plain/assets/urls.py +1 -1
- {plain-0.58.0 → plain-0.97.0}/plain/assets/views.py +43 -29
- plain-0.97.0/plain/chores/README.md +72 -0
- plain-0.97.0/plain/chores/__init__.py +4 -0
- plain-0.97.0/plain/chores/core.py +27 -0
- plain-0.97.0/plain/chores/registry.py +49 -0
- {plain-0.58.0 → plain-0.97.0}/plain/cli/README.md +26 -0
- plain-0.97.0/plain/cli/__init__.py +4 -0
- {plain-0.58.0 → plain-0.97.0}/plain/cli/build.py +7 -8
- {plain-0.58.0 → plain-0.97.0}/plain/cli/changelog.py +11 -5
- plain-0.97.0/plain/cli/chores.py +89 -0
- plain-0.97.0/plain/cli/core.py +207 -0
- plain-0.97.0/plain/cli/docs.py +79 -0
- plain-0.97.0/plain/cli/formatting.py +96 -0
- plain-0.97.0/plain/cli/install.py +38 -0
- plain-0.58.0/plain/cli/docs.py → plain-0.97.0/plain/cli/llmdocs.py +27 -88
- {plain-0.58.0 → plain-0.97.0}/plain/cli/output.py +6 -2
- plain-0.97.0/plain/cli/preflight.py +199 -0
- plain-0.97.0/plain/cli/print.py +9 -0
- plain-0.97.0/plain/cli/registry.py +131 -0
- plain-0.97.0/plain/cli/request.py +194 -0
- plain-0.97.0/plain/cli/runtime.py +45 -0
- {plain-0.58.0 → plain-0.97.0}/plain/cli/scaffold.py +2 -7
- plain-0.97.0/plain/cli/server.py +143 -0
- plain-0.97.0/plain/cli/settings.py +64 -0
- {plain-0.58.0 → plain-0.97.0}/plain/cli/shell.py +29 -12
- plain-0.97.0/plain/cli/skills.py +153 -0
- {plain-0.58.0 → plain-0.97.0}/plain/cli/startup.py +9 -8
- plain-0.97.0/plain/cli/upgrade.py +81 -0
- {plain-0.58.0 → plain-0.97.0}/plain/cli/urls.py +12 -7
- {plain-0.58.0 → plain-0.97.0}/plain/cli/utils.py +3 -3
- {plain-0.58.0 → plain-0.97.0}/plain/csrf/README.md +2 -0
- plain-0.97.0/plain/csrf/middleware.py +143 -0
- {plain-0.58.0 → plain-0.97.0}/plain/debug.py +5 -2
- {plain-0.58.0 → plain-0.97.0}/plain/exceptions.py +22 -120
- plain-0.97.0/plain/forms/__init__.py +59 -0
- {plain-0.58.0 → plain-0.97.0}/plain/forms/boundfield.py +15 -8
- {plain-0.58.0 → plain-0.97.0}/plain/forms/exceptions.py +1 -1
- {plain-0.58.0 → plain-0.97.0}/plain/forms/fields.py +339 -141
- {plain-0.58.0 → plain-0.97.0}/plain/forms/forms.py +73 -45
- plain-0.97.0/plain/http/README.md +142 -0
- plain-0.97.0/plain/http/__init__.py +64 -0
- {plain-0.58.0 → plain-0.97.0}/plain/http/cookie.py +15 -7
- plain-0.97.0/plain/http/exceptions.py +65 -0
- plain-0.97.0/plain/http/middleware.py +32 -0
- {plain-0.58.0 → plain-0.97.0}/plain/http/multipartparser.py +78 -73
- plain-0.97.0/plain/http/request.py +796 -0
- {plain-0.58.0 → plain-0.97.0}/plain/http/response.py +110 -123
- {plain-0.58.0 → plain-0.97.0}/plain/internal/__init__.py +8 -1
- {plain-0.58.0 → plain-0.97.0}/plain/internal/files/base.py +35 -19
- {plain-0.58.0 → plain-0.97.0}/plain/internal/files/locks.py +19 -11
- {plain-0.58.0 → plain-0.97.0}/plain/internal/files/move.py +8 -3
- {plain-0.58.0 → plain-0.97.0}/plain/internal/files/temp.py +25 -6
- {plain-0.58.0 → plain-0.97.0}/plain/internal/files/uploadedfile.py +47 -28
- {plain-0.58.0 → plain-0.97.0}/plain/internal/files/uploadhandler.py +64 -58
- {plain-0.58.0 → plain-0.97.0}/plain/internal/files/utils.py +24 -10
- {plain-0.58.0 → plain-0.97.0}/plain/internal/handlers/base.py +35 -23
- {plain-0.58.0 → plain-0.97.0}/plain/internal/handlers/exception.py +68 -65
- {plain-0.58.0 → plain-0.97.0}/plain/internal/handlers/wsgi.py +63 -53
- plain-0.97.0/plain/internal/middleware/headers.py +59 -0
- plain-0.97.0/plain/internal/middleware/hosts.py +191 -0
- plain-0.97.0/plain/internal/middleware/https.py +36 -0
- {plain-0.58.0 → plain-0.97.0}/plain/internal/middleware/slash.py +15 -10
- plain-0.97.0/plain/internal/reloader.py +77 -0
- {plain-0.58.0 → plain-0.97.0}/plain/json.py +2 -1
- plain-0.97.0/plain/logs/README.md +176 -0
- plain-0.97.0/plain/logs/__init__.py +3 -0
- plain-0.97.0/plain/logs/app.py +187 -0
- plain-0.97.0/plain/logs/configure.py +85 -0
- plain-0.97.0/plain/logs/debug.py +47 -0
- plain-0.97.0/plain/logs/filters.py +15 -0
- plain-0.97.0/plain/logs/formatters.py +73 -0
- {plain-0.58.0 → plain-0.97.0}/plain/packages/config.py +14 -6
- {plain-0.58.0 → plain-0.97.0}/plain/packages/registry.py +36 -11
- {plain-0.58.0 → plain-0.97.0}/plain/paginator.py +31 -21
- plain-0.97.0/plain/preflight/README.md +83 -0
- plain-0.97.0/plain/preflight/__init__.py +17 -0
- plain-0.97.0/plain/preflight/checks.py +12 -0
- plain-0.97.0/plain/preflight/files.py +25 -0
- plain-0.97.0/plain/preflight/registry.py +94 -0
- plain-0.97.0/plain/preflight/results.py +37 -0
- plain-0.97.0/plain/preflight/security.py +83 -0
- plain-0.97.0/plain/preflight/settings.py +54 -0
- plain-0.97.0/plain/preflight/urls.py +16 -0
- {plain-0.58.0 → plain-0.97.0}/plain/runtime/README.md +0 -1
- {plain-0.58.0 → plain-0.97.0}/plain/runtime/__init__.py +15 -7
- {plain-0.58.0 → plain-0.97.0}/plain/runtime/global_settings.py +49 -34
- plain-0.97.0/plain/runtime/secret.py +20 -0
- {plain-0.58.0 → plain-0.97.0}/plain/runtime/user_settings.py +103 -33
- plain-0.97.0/plain/runtime/utils.py +23 -0
- plain-0.97.0/plain/server/LICENSE +35 -0
- plain-0.97.0/plain/server/README.md +74 -0
- plain-0.97.0/plain/server/__init__.py +9 -0
- plain-0.97.0/plain/server/app.py +52 -0
- plain-0.97.0/plain/server/arbiter.py +555 -0
- plain-0.97.0/plain/server/config.py +118 -0
- plain-0.97.0/plain/server/errors.py +31 -0
- plain-0.97.0/plain/server/glogging.py +292 -0
- plain-0.97.0/plain/server/http/__init__.py +12 -0
- plain-0.97.0/plain/server/http/body.py +283 -0
- plain-0.97.0/plain/server/http/errors.py +155 -0
- plain-0.97.0/plain/server/http/message.py +400 -0
- plain-0.97.0/plain/server/http/parser.py +70 -0
- plain-0.97.0/plain/server/http/unreader.py +88 -0
- plain-0.97.0/plain/server/http/wsgi.py +421 -0
- plain-0.97.0/plain/server/pidfile.py +92 -0
- plain-0.97.0/plain/server/sock.py +240 -0
- plain-0.97.0/plain/server/util.py +317 -0
- plain-0.97.0/plain/server/workers/__init__.py +6 -0
- plain-0.97.0/plain/server/workers/base.py +304 -0
- plain-0.97.0/plain/server/workers/sync.py +212 -0
- plain-0.97.0/plain/server/workers/thread.py +399 -0
- plain-0.97.0/plain/server/workers/workertmp.py +50 -0
- {plain-0.58.0 → plain-0.97.0}/plain/signals/__init__.py +0 -1
- {plain-0.58.0 → plain-0.97.0}/plain/signals/dispatch/dispatcher.py +39 -17
- {plain-0.58.0 → plain-0.97.0}/plain/signing.py +137 -37
- plain-0.97.0/plain/skills/plain-docs/SKILL.md +25 -0
- plain-0.97.0/plain/skills/plain-install/SKILL.md +26 -0
- plain-0.97.0/plain/skills/plain-principles/SKILL.md +27 -0
- plain-0.97.0/plain/skills/plain-request/SKILL.md +32 -0
- plain-0.97.0/plain/skills/plain-shell/SKILL.md +24 -0
- plain-0.97.0/plain/skills/plain-upgrade/SKILL.md +35 -0
- {plain-0.58.0 → plain-0.97.0}/plain/templates/jinja/__init__.py +14 -27
- {plain-0.58.0 → plain-0.97.0}/plain/templates/jinja/environments.py +4 -3
- {plain-0.58.0 → plain-0.97.0}/plain/templates/jinja/extensions.py +12 -5
- {plain-0.58.0 → plain-0.97.0}/plain/templates/jinja/filters.py +7 -2
- {plain-0.58.0 → plain-0.97.0}/plain/templates/jinja/globals.py +1 -1
- {plain-0.58.0 → plain-0.97.0}/plain/test/README.md +1 -1
- {plain-0.58.0 → plain-0.97.0}/plain/test/client.py +339 -222
- {plain-0.58.0 → plain-0.97.0}/plain/test/encoding.py +9 -6
- plain-0.97.0/plain/test/exceptions.py +12 -0
- {plain-0.58.0 → plain-0.97.0}/plain/urls/converters.py +13 -10
- plain-0.97.0/plain/urls/exceptions.py +9 -0
- {plain-0.58.0 → plain-0.97.0}/plain/urls/patterns.py +54 -38
- {plain-0.58.0 → plain-0.97.0}/plain/urls/resolvers.py +35 -25
- {plain-0.58.0 → plain-0.97.0}/plain/urls/utils.py +5 -1
- {plain-0.58.0 → plain-0.97.0}/plain/utils/cache.py +14 -8
- {plain-0.58.0 → plain-0.97.0}/plain/utils/crypto.py +21 -10
- {plain-0.58.0 → plain-0.97.0}/plain/utils/datastructures.py +89 -56
- {plain-0.58.0 → plain-0.97.0}/plain/utils/dateparse.py +9 -6
- {plain-0.58.0 → plain-0.97.0}/plain/utils/deconstruct.py +15 -7
- {plain-0.58.0 → plain-0.97.0}/plain/utils/decorators.py +5 -1
- {plain-0.58.0 → plain-0.97.0}/plain/utils/duration.py +8 -4
- {plain-0.58.0 → plain-0.97.0}/plain/utils/encoding.py +14 -7
- {plain-0.58.0 → plain-0.97.0}/plain/utils/functional.py +66 -49
- {plain-0.58.0 → plain-0.97.0}/plain/utils/hashable.py +5 -1
- {plain-0.58.0 → plain-0.97.0}/plain/utils/html.py +34 -22
- {plain-0.58.0 → plain-0.97.0}/plain/utils/http.py +16 -29
- {plain-0.58.0 → plain-0.97.0}/plain/utils/inspect.py +14 -6
- {plain-0.58.0 → plain-0.97.0}/plain/utils/ipv6.py +7 -3
- {plain-0.58.0 → plain-0.97.0}/plain/utils/itercompat.py +6 -1
- {plain-0.58.0 → plain-0.97.0}/plain/utils/module_loading.py +7 -3
- {plain-0.58.0 → plain-0.97.0}/plain/utils/regex_helper.py +22 -12
- {plain-0.58.0 → plain-0.97.0}/plain/utils/safestring.py +14 -6
- {plain-0.58.0 → plain-0.97.0}/plain/utils/text.py +36 -18
- {plain-0.58.0 → plain-0.97.0}/plain/utils/timezone.py +33 -22
- {plain-0.58.0 → plain-0.97.0}/plain/utils/tree.py +35 -19
- {plain-0.58.0 → plain-0.97.0}/plain/validators.py +94 -52
- {plain-0.58.0 → plain-0.97.0}/plain/views/README.md +16 -26
- {plain-0.58.0 → plain-0.97.0}/plain/views/__init__.py +0 -1
- {plain-0.58.0 → plain-0.97.0}/plain/views/base.py +25 -18
- {plain-0.58.0 → plain-0.97.0}/plain/views/errors.py +13 -5
- {plain-0.58.0 → plain-0.97.0}/plain/views/exceptions.py +4 -1
- {plain-0.58.0 → plain-0.97.0}/plain/views/forms.py +6 -6
- {plain-0.58.0 → plain-0.97.0}/plain/views/objects.py +79 -102
- {plain-0.58.0 → plain-0.97.0}/plain/views/redirect.py +18 -15
- {plain-0.58.0 → plain-0.97.0}/plain/views/templates.py +11 -3
- {plain-0.58.0 → plain-0.97.0}/plain/wsgi.py +3 -1
- {plain-0.58.0 → plain-0.97.0}/pyproject.toml +6 -8
- {plain-0.58.0 → plain-0.97.0}/tests/test_cli.py +0 -8
- {plain-0.58.0 → plain-0.97.0}/tests/test_csrf.py +43 -61
- plain-0.97.0/tests/test_http_hosts.py +189 -0
- plain-0.97.0/tests/test_logs.py +300 -0
- {plain-0.58.0 → plain-0.97.0}/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/agent.py +0 -50
- 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/install.py +0 -82
- plain-0.58.0/plain/cli/preflight.py +0 -126
- plain-0.58.0/plain/cli/print.py +0 -9
- plain-0.58.0/plain/cli/registry.py +0 -62
- plain-0.58.0/plain/cli/settings.py +0 -60
- plain-0.58.0/plain/cli/upgrade.py +0 -168
- 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/forms/__init__.py +0 -8
- plain-0.58.0/plain/http/README.md +0 -30
- plain-0.58.0/plain/http/__init__.py +0 -49
- plain-0.58.0/plain/http/request.py +0 -748
- 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/urls/exceptions.py +0 -9
- {plain-0.58.0 → plain-0.97.0}/LICENSE +0 -0
- {plain-0.58.0 → plain-0.97.0}/README.md +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/__main__.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/assets/README.md +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/assets/__init__.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/forms/README.md +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/internal/files/__init__.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/internal/handlers/__init__.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/internal/middleware/__init__.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/packages/README.md +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/packages/__init__.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/signals/README.md +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/signals/dispatch/__init__.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/signals/dispatch/license.txt +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/templates/README.md +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/templates/__init__.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/templates/core.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/test/__init__.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/urls/README.md +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/urls/__init__.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/urls/routers.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/utils/README.md +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/utils/__init__.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/plain/utils/timesince.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/tests/.gitignore +0 -0
- {plain-0.58.0 → plain-0.97.0}/tests/app/.gitignore +0 -0
- {plain-0.58.0 → plain-0.97.0}/tests/app/settings.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/tests/app/test/__init__.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/tests/app/test/default_settings.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/tests/app/urls.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/tests/conftest.py +0 -0
- {plain-0.58.0 → plain-0.97.0}/tests/test_runtime.py +0 -0
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
.venv
|
|
2
|
-
|
|
2
|
+
/.env
|
|
3
3
|
*.egg-info
|
|
4
4
|
*.py[co]
|
|
5
5
|
__pycache__
|
|
6
6
|
*.DS_Store
|
|
7
7
|
|
|
8
|
+
/*.code-workspace
|
|
9
|
+
|
|
8
10
|
# Test apps
|
|
9
11
|
plain*/tests/.plain
|
|
10
12
|
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
/llms-full.txt
|
|
13
|
+
# Agent scratch files
|
|
14
|
+
/scratch
|
|
15
15
|
|
|
16
16
|
# Plain temp dirs
|
|
17
17
|
.plain
|
|
18
18
|
|
|
19
19
|
.vscode
|
|
20
|
+
/.claude
|
|
21
|
+
/.benchmarks
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plain
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.97.0
|
|
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
|