plain 0.36.0__tar.gz → 0.37.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.
Files changed (162) hide show
  1. plain-0.37.0/PKG-INFO +77 -0
  2. plain-0.37.0/plain/README.md +66 -0
  3. {plain-0.36.0 → plain-0.37.0}/plain/cli/scaffold.py +1 -1
  4. {plain-0.36.0 → plain-0.37.0}/plain/views/objects.py +10 -4
  5. {plain-0.36.0 → plain-0.37.0}/pyproject.toml +1 -1
  6. plain-0.36.0/PKG-INFO +0 -77
  7. plain-0.36.0/plain/README.md +0 -66
  8. {plain-0.36.0 → plain-0.37.0}/.gitignore +0 -0
  9. {plain-0.36.0 → plain-0.37.0}/LICENSE +0 -0
  10. {plain-0.36.0 → plain-0.37.0}/README.md +0 -0
  11. {plain-0.36.0 → plain-0.37.0}/plain/__main__.py +0 -0
  12. {plain-0.36.0 → plain-0.37.0}/plain/assets/README.md +0 -0
  13. {plain-0.36.0 → plain-0.37.0}/plain/assets/__init__.py +0 -0
  14. {plain-0.36.0 → plain-0.37.0}/plain/assets/compile.py +0 -0
  15. {plain-0.36.0 → plain-0.37.0}/plain/assets/finders.py +0 -0
  16. {plain-0.36.0 → plain-0.37.0}/plain/assets/fingerprints.py +0 -0
  17. {plain-0.36.0 → plain-0.37.0}/plain/assets/urls.py +0 -0
  18. {plain-0.36.0 → plain-0.37.0}/plain/assets/views.py +0 -0
  19. {plain-0.36.0 → plain-0.37.0}/plain/cli/README.md +0 -0
  20. {plain-0.36.0 → plain-0.37.0}/plain/cli/__init__.py +0 -0
  21. {plain-0.36.0 → plain-0.37.0}/plain/cli/build.py +0 -0
  22. {plain-0.36.0 → plain-0.37.0}/plain/cli/core.py +0 -0
  23. {plain-0.36.0 → plain-0.37.0}/plain/cli/docs.py +0 -0
  24. {plain-0.36.0 → plain-0.37.0}/plain/cli/formatting.py +0 -0
  25. {plain-0.36.0 → plain-0.37.0}/plain/cli/preflight.py +0 -0
  26. {plain-0.36.0 → plain-0.37.0}/plain/cli/print.py +0 -0
  27. {plain-0.36.0 → plain-0.37.0}/plain/cli/registry.py +0 -0
  28. {plain-0.36.0 → plain-0.37.0}/plain/cli/settings.py +0 -0
  29. {plain-0.36.0 → plain-0.37.0}/plain/cli/shell.py +0 -0
  30. {plain-0.36.0 → plain-0.37.0}/plain/cli/startup.py +0 -0
  31. {plain-0.36.0 → plain-0.37.0}/plain/cli/urls.py +0 -0
  32. {plain-0.36.0 → plain-0.37.0}/plain/cli/utils.py +0 -0
  33. {plain-0.36.0 → plain-0.37.0}/plain/csrf/README.md +0 -0
  34. {plain-0.36.0 → plain-0.37.0}/plain/csrf/middleware.py +0 -0
  35. {plain-0.36.0 → plain-0.37.0}/plain/csrf/views.py +0 -0
  36. {plain-0.36.0 → plain-0.37.0}/plain/debug.py +0 -0
  37. {plain-0.36.0 → plain-0.37.0}/plain/exceptions.py +0 -0
  38. {plain-0.36.0 → plain-0.37.0}/plain/forms/README.md +0 -0
  39. {plain-0.36.0 → plain-0.37.0}/plain/forms/__init__.py +0 -0
  40. {plain-0.36.0 → plain-0.37.0}/plain/forms/boundfield.py +0 -0
  41. {plain-0.36.0 → plain-0.37.0}/plain/forms/exceptions.py +0 -0
  42. {plain-0.36.0 → plain-0.37.0}/plain/forms/fields.py +0 -0
  43. {plain-0.36.0 → plain-0.37.0}/plain/forms/forms.py +0 -0
  44. {plain-0.36.0 → plain-0.37.0}/plain/http/README.md +0 -0
  45. {plain-0.36.0 → plain-0.37.0}/plain/http/__init__.py +0 -0
  46. {plain-0.36.0 → plain-0.37.0}/plain/http/cookie.py +0 -0
  47. {plain-0.36.0 → plain-0.37.0}/plain/http/multipartparser.py +0 -0
  48. {plain-0.36.0 → plain-0.37.0}/plain/http/request.py +0 -0
  49. {plain-0.36.0 → plain-0.37.0}/plain/http/response.py +0 -0
  50. {plain-0.36.0 → plain-0.37.0}/plain/internal/__init__.py +0 -0
  51. {plain-0.36.0 → plain-0.37.0}/plain/internal/files/__init__.py +0 -0
  52. {plain-0.36.0 → plain-0.37.0}/plain/internal/files/base.py +0 -0
  53. {plain-0.36.0 → plain-0.37.0}/plain/internal/files/locks.py +0 -0
  54. {plain-0.36.0 → plain-0.37.0}/plain/internal/files/move.py +0 -0
  55. {plain-0.36.0 → plain-0.37.0}/plain/internal/files/temp.py +0 -0
  56. {plain-0.36.0 → plain-0.37.0}/plain/internal/files/uploadedfile.py +0 -0
  57. {plain-0.36.0 → plain-0.37.0}/plain/internal/files/uploadhandler.py +0 -0
  58. {plain-0.36.0 → plain-0.37.0}/plain/internal/files/utils.py +0 -0
  59. {plain-0.36.0 → plain-0.37.0}/plain/internal/handlers/__init__.py +0 -0
  60. {plain-0.36.0 → plain-0.37.0}/plain/internal/handlers/base.py +0 -0
  61. {plain-0.36.0 → plain-0.37.0}/plain/internal/handlers/exception.py +0 -0
  62. {plain-0.36.0 → plain-0.37.0}/plain/internal/handlers/wsgi.py +0 -0
  63. {plain-0.36.0 → plain-0.37.0}/plain/internal/middleware/__init__.py +0 -0
  64. {plain-0.36.0 → plain-0.37.0}/plain/internal/middleware/headers.py +0 -0
  65. {plain-0.36.0 → plain-0.37.0}/plain/internal/middleware/https.py +0 -0
  66. {plain-0.36.0 → plain-0.37.0}/plain/internal/middleware/slash.py +0 -0
  67. {plain-0.36.0 → plain-0.37.0}/plain/json.py +0 -0
  68. {plain-0.36.0 → plain-0.37.0}/plain/logs/README.md +0 -0
  69. {plain-0.36.0 → plain-0.37.0}/plain/logs/__init__.py +0 -0
  70. {plain-0.36.0 → plain-0.37.0}/plain/logs/configure.py +0 -0
  71. {plain-0.36.0 → plain-0.37.0}/plain/logs/loggers.py +0 -0
  72. {plain-0.36.0 → plain-0.37.0}/plain/logs/utils.py +0 -0
  73. {plain-0.36.0 → plain-0.37.0}/plain/packages/README.md +0 -0
  74. {plain-0.36.0 → plain-0.37.0}/plain/packages/__init__.py +0 -0
  75. {plain-0.36.0 → plain-0.37.0}/plain/packages/config.py +0 -0
  76. {plain-0.36.0 → plain-0.37.0}/plain/packages/registry.py +0 -0
  77. {plain-0.36.0 → plain-0.37.0}/plain/paginator.py +0 -0
  78. {plain-0.36.0 → plain-0.37.0}/plain/preflight/README.md +0 -0
  79. {plain-0.36.0 → plain-0.37.0}/plain/preflight/__init__.py +0 -0
  80. {plain-0.36.0 → plain-0.37.0}/plain/preflight/files.py +0 -0
  81. {plain-0.36.0 → plain-0.37.0}/plain/preflight/messages.py +0 -0
  82. {plain-0.36.0 → plain-0.37.0}/plain/preflight/registry.py +0 -0
  83. {plain-0.36.0 → plain-0.37.0}/plain/preflight/security.py +0 -0
  84. {plain-0.36.0 → plain-0.37.0}/plain/preflight/urls.py +0 -0
  85. {plain-0.36.0 → plain-0.37.0}/plain/runtime/README.md +0 -0
  86. {plain-0.36.0 → plain-0.37.0}/plain/runtime/__init__.py +0 -0
  87. {plain-0.36.0 → plain-0.37.0}/plain/runtime/global_settings.py +0 -0
  88. {plain-0.36.0 → plain-0.37.0}/plain/runtime/user_settings.py +0 -0
  89. {plain-0.36.0 → plain-0.37.0}/plain/signals/README.md +0 -0
  90. {plain-0.36.0 → plain-0.37.0}/plain/signals/__init__.py +0 -0
  91. {plain-0.36.0 → plain-0.37.0}/plain/signals/dispatch/__init__.py +0 -0
  92. {plain-0.36.0 → plain-0.37.0}/plain/signals/dispatch/dispatcher.py +0 -0
  93. {plain-0.36.0 → plain-0.37.0}/plain/signals/dispatch/license.txt +0 -0
  94. {plain-0.36.0 → plain-0.37.0}/plain/signing.py +0 -0
  95. {plain-0.36.0 → plain-0.37.0}/plain/templates/README.md +0 -0
  96. {plain-0.36.0 → plain-0.37.0}/plain/templates/__init__.py +0 -0
  97. {plain-0.36.0 → plain-0.37.0}/plain/templates/core.py +0 -0
  98. {plain-0.36.0 → plain-0.37.0}/plain/templates/jinja/__init__.py +0 -0
  99. {plain-0.36.0 → plain-0.37.0}/plain/templates/jinja/environments.py +0 -0
  100. {plain-0.36.0 → plain-0.37.0}/plain/templates/jinja/extensions.py +0 -0
  101. {plain-0.36.0 → plain-0.37.0}/plain/templates/jinja/filters.py +0 -0
  102. {plain-0.36.0 → plain-0.37.0}/plain/templates/jinja/globals.py +0 -0
  103. {plain-0.36.0 → plain-0.37.0}/plain/test/README.md +0 -0
  104. {plain-0.36.0 → plain-0.37.0}/plain/test/__init__.py +0 -0
  105. {plain-0.36.0 → plain-0.37.0}/plain/test/client.py +0 -0
  106. {plain-0.36.0 → plain-0.37.0}/plain/test/encoding.py +0 -0
  107. {plain-0.36.0 → plain-0.37.0}/plain/test/exceptions.py +0 -0
  108. {plain-0.36.0 → plain-0.37.0}/plain/urls/README.md +0 -0
  109. {plain-0.36.0 → plain-0.37.0}/plain/urls/__init__.py +0 -0
  110. {plain-0.36.0 → plain-0.37.0}/plain/urls/converters.py +0 -0
  111. {plain-0.36.0 → plain-0.37.0}/plain/urls/exceptions.py +0 -0
  112. {plain-0.36.0 → plain-0.37.0}/plain/urls/patterns.py +0 -0
  113. {plain-0.36.0 → plain-0.37.0}/plain/urls/resolvers.py +0 -0
  114. {plain-0.36.0 → plain-0.37.0}/plain/urls/routers.py +0 -0
  115. {plain-0.36.0 → plain-0.37.0}/plain/urls/utils.py +0 -0
  116. {plain-0.36.0 → plain-0.37.0}/plain/utils/README.md +0 -0
  117. {plain-0.36.0 → plain-0.37.0}/plain/utils/__init__.py +0 -0
  118. {plain-0.36.0 → plain-0.37.0}/plain/utils/cache.py +0 -0
  119. {plain-0.36.0 → plain-0.37.0}/plain/utils/connection.py +0 -0
  120. {plain-0.36.0 → plain-0.37.0}/plain/utils/crypto.py +0 -0
  121. {plain-0.36.0 → plain-0.37.0}/plain/utils/datastructures.py +0 -0
  122. {plain-0.36.0 → plain-0.37.0}/plain/utils/dateparse.py +0 -0
  123. {plain-0.36.0 → plain-0.37.0}/plain/utils/deconstruct.py +0 -0
  124. {plain-0.36.0 → plain-0.37.0}/plain/utils/decorators.py +0 -0
  125. {plain-0.36.0 → plain-0.37.0}/plain/utils/duration.py +0 -0
  126. {plain-0.36.0 → plain-0.37.0}/plain/utils/encoding.py +0 -0
  127. {plain-0.36.0 → plain-0.37.0}/plain/utils/functional.py +0 -0
  128. {plain-0.36.0 → plain-0.37.0}/plain/utils/hashable.py +0 -0
  129. {plain-0.36.0 → plain-0.37.0}/plain/utils/html.py +0 -0
  130. {plain-0.36.0 → plain-0.37.0}/plain/utils/http.py +0 -0
  131. {plain-0.36.0 → plain-0.37.0}/plain/utils/inspect.py +0 -0
  132. {plain-0.36.0 → plain-0.37.0}/plain/utils/ipv6.py +0 -0
  133. {plain-0.36.0 → plain-0.37.0}/plain/utils/itercompat.py +0 -0
  134. {plain-0.36.0 → plain-0.37.0}/plain/utils/module_loading.py +0 -0
  135. {plain-0.36.0 → plain-0.37.0}/plain/utils/regex_helper.py +0 -0
  136. {plain-0.36.0 → plain-0.37.0}/plain/utils/safestring.py +0 -0
  137. {plain-0.36.0 → plain-0.37.0}/plain/utils/text.py +0 -0
  138. {plain-0.36.0 → plain-0.37.0}/plain/utils/timesince.py +0 -0
  139. {plain-0.36.0 → plain-0.37.0}/plain/utils/timezone.py +0 -0
  140. {plain-0.36.0 → plain-0.37.0}/plain/utils/tree.py +0 -0
  141. {plain-0.36.0 → plain-0.37.0}/plain/validators.py +0 -0
  142. {plain-0.36.0 → plain-0.37.0}/plain/views/README.md +0 -0
  143. {plain-0.36.0 → plain-0.37.0}/plain/views/__init__.py +0 -0
  144. {plain-0.36.0 → plain-0.37.0}/plain/views/base.py +0 -0
  145. {plain-0.36.0 → plain-0.37.0}/plain/views/csrf.py +0 -0
  146. {plain-0.36.0 → plain-0.37.0}/plain/views/errors.py +0 -0
  147. {plain-0.36.0 → plain-0.37.0}/plain/views/exceptions.py +0 -0
  148. {plain-0.36.0 → plain-0.37.0}/plain/views/forms.py +0 -0
  149. {plain-0.36.0 → plain-0.37.0}/plain/views/redirect.py +0 -0
  150. {plain-0.36.0 → plain-0.37.0}/plain/views/templates.py +0 -0
  151. {plain-0.36.0 → plain-0.37.0}/plain/wsgi.py +0 -0
  152. {plain-0.36.0 → plain-0.37.0}/tests/.bolt/assets_collected/assets.json +0 -0
  153. {plain-0.36.0 → plain-0.37.0}/tests/.gitignore +0 -0
  154. {plain-0.36.0 → plain-0.37.0}/tests/app/.gitignore +0 -0
  155. {plain-0.36.0 → plain-0.37.0}/tests/app/settings.py +0 -0
  156. {plain-0.36.0 → plain-0.37.0}/tests/app/test/__init__.py +0 -0
  157. {plain-0.36.0 → plain-0.37.0}/tests/app/test/default_settings.py +0 -0
  158. {plain-0.36.0 → plain-0.37.0}/tests/app/urls.py +0 -0
  159. {plain-0.36.0 → plain-0.37.0}/tests/conftest.py +0 -0
  160. {plain-0.36.0 → plain-0.37.0}/tests/test_cli.py +0 -0
  161. {plain-0.36.0 → plain-0.37.0}/tests/test_runtime.py +0 -0
  162. {plain-0.36.0 → plain-0.37.0}/tests/test_wsgi.py +0 -0
plain-0.37.0/PKG-INFO ADDED
@@ -0,0 +1,77 @@
1
+ Metadata-Version: 2.4
2
+ Name: plain
3
+ Version: 0.37.0
4
+ Summary: A web framework for building products with Python.
5
+ Author-email: Dave Gaeddert <dave.gaeddert@dropseed.dev>
6
+ License-File: LICENSE
7
+ Requires-Python: >=3.11
8
+ Requires-Dist: click>=8.0.0
9
+ Requires-Dist: jinja2>=3.1.2
10
+ Description-Content-Type: text/markdown
11
+
12
+ # Plain
13
+
14
+ **Plain is a web framework for building products with Python.**
15
+
16
+ The core `plain` package provides the backbone of a Python web application (similar to [Flask](https://flask.palletsprojects.com/en/stable/)), while the additional first-party packages can power a more fully-featured database-backed app (similar to [Django](https://www.djangoproject.com/)).
17
+
18
+ All Plain packages are designed to work together and use [PEP 420](https://peps.python.org/pep-0420/) to share the `plain` namespace.
19
+
20
+ To quickly get started with Plain, visit [plainframework.com/start/](https://plainframework.com/start/).
21
+
22
+ ## Core Modules
23
+
24
+ The `plain` package includes everything you need to start handling web requests with Python:
25
+
26
+ - [assets](./assets/README.md) - Serve static files and assets.
27
+ - [cli](./cli/README.md) - The `plain` CLI, powered by Click.
28
+ - [csrf](./csrf/README.md) - Cross-Site Request Forgery protection.
29
+ - [forms](./forms/README.md) - HTML forms and form validation.
30
+ - [http](./http/README.md) - HTTP request and response handling.
31
+ - [logs](./logs/README.md) - Logging configuration and utilities.
32
+ - [preflight](./preflight/README.md) - Preflight checks for your app.
33
+ - [runtime](./runtime/README.md) - Runtime settings and configuration.
34
+ - [templates](./templates/README.md) - Jinja2 templates and rendering.
35
+ - [test](./test/README.md) - Test utilities and fixtures.
36
+ - [urls](./urls/README.md) - URL routing and request dispatching.
37
+ - [views](./views/README.md) - Class-based views and request handlers.
38
+
39
+ ## Foundational Packages
40
+
41
+ - [plain.models](/plain-models/plain/models/README.md) - Define and interact with your database models.
42
+ - [plain.cache](/plain-cache/plain/cache/README.md) - A database-driven general purpose cache.
43
+ - [plain.email](/plain-email/plain/email/README.md) - Send emails with SMTP or custom backends.
44
+ - [plain.sessions](/plain-sessions/plain/sessions/README.md) - User sessions and cookies.
45
+ - [plain.worker](/plain-worker/plain/worker/README.md) - Backgrounb jobs stored in the database.
46
+ - [plain.api](/plain-api/plain/api/README.md) - Build APIs with Plain views.
47
+
48
+ ## Auth Packages
49
+
50
+ - [plain.auth](/plain-auth/plain/auth/README.md) - User authentication and authorization.
51
+ - [plain.oauth](/plain-oauth/plain/oauth/README.md) - OAuth authentication and API access.
52
+ - [plain.passwords](/plain-passwords/plain/passwords/README.md) - Password-based login and registration.
53
+ - [plain.loginlink](/plain-loginlink/plain/loginlink/README.md) - Login links for passwordless authentication.
54
+
55
+ ## Admin Packages
56
+
57
+ - [plain.admin](/plain-admin/plain/admin/README.md) - An admin interface for back-office tasks.
58
+ - [plain.flags](/plain-flags/plain/flags/README.md) - Feature flags.
59
+ - [plain.support](/plain-support/plain/support/README.md) - Customer support forms.
60
+ - [plain.redirection](/plain-redirection/plain/redirection/README.md) - Redirects managed in the database.
61
+ - [plain.pageviews](/plain-pageviews/plain/pageviews/README.md) - Basic self-hosted page view tracking and reporting.
62
+
63
+ ## Dev Packages
64
+
65
+ - [plain.dev](/plain-dev/plain/dev/README.md) - A single command for local development.
66
+ - [plain.pytest](/plain-pytest/plain/pytest/README.md) - Pytest fixtures and helpers.
67
+ - [plain.code](/plain-code/plain/code/README.md) - Code formatting and linting.
68
+ - [plain.tunnel](/plain-tunnel/plain/tunnel/README.md) - Expose your local server to the internet.
69
+
70
+ ## Frontend Packages
71
+
72
+ - [plain.tailwind](/plain-tailwind/plain/tailwind/README.md) - Tailwind CSS integration without Node.js.
73
+ - [plain.htmx](/plain-htmx/plain/htmx/README.md) - HTMX integrated into views and templates.
74
+ - [plain.elements](/plain-elements/plain/elements/README.md) - Server-side HTML components.
75
+ - [plain.pages](/plain-pages/plain/pages/README.md) - Static pages with Markdown and Jinja2.
76
+ - [plain.esbuild](/plain-esbuild/plain/esbuild/README.md) - Simple JavaScript bundling and minification.
77
+ - [plain.vendor](/plain-vendor/plain/vendor/README.md) - Vendor JavaScript and CSS libraries.
@@ -0,0 +1,66 @@
1
+ # Plain
2
+
3
+ **Plain is a web framework for building products with Python.**
4
+
5
+ The core `plain` package provides the backbone of a Python web application (similar to [Flask](https://flask.palletsprojects.com/en/stable/)), while the additional first-party packages can power a more fully-featured database-backed app (similar to [Django](https://www.djangoproject.com/)).
6
+
7
+ All Plain packages are designed to work together and use [PEP 420](https://peps.python.org/pep-0420/) to share the `plain` namespace.
8
+
9
+ To quickly get started with Plain, visit [plainframework.com/start/](https://plainframework.com/start/).
10
+
11
+ ## Core Modules
12
+
13
+ The `plain` package includes everything you need to start handling web requests with Python:
14
+
15
+ - [assets](./assets/README.md) - Serve static files and assets.
16
+ - [cli](./cli/README.md) - The `plain` CLI, powered by Click.
17
+ - [csrf](./csrf/README.md) - Cross-Site Request Forgery protection.
18
+ - [forms](./forms/README.md) - HTML forms and form validation.
19
+ - [http](./http/README.md) - HTTP request and response handling.
20
+ - [logs](./logs/README.md) - Logging configuration and utilities.
21
+ - [preflight](./preflight/README.md) - Preflight checks for your app.
22
+ - [runtime](./runtime/README.md) - Runtime settings and configuration.
23
+ - [templates](./templates/README.md) - Jinja2 templates and rendering.
24
+ - [test](./test/README.md) - Test utilities and fixtures.
25
+ - [urls](./urls/README.md) - URL routing and request dispatching.
26
+ - [views](./views/README.md) - Class-based views and request handlers.
27
+
28
+ ## Foundational Packages
29
+
30
+ - [plain.models](/plain-models/plain/models/README.md) - Define and interact with your database models.
31
+ - [plain.cache](/plain-cache/plain/cache/README.md) - A database-driven general purpose cache.
32
+ - [plain.email](/plain-email/plain/email/README.md) - Send emails with SMTP or custom backends.
33
+ - [plain.sessions](/plain-sessions/plain/sessions/README.md) - User sessions and cookies.
34
+ - [plain.worker](/plain-worker/plain/worker/README.md) - Backgrounb jobs stored in the database.
35
+ - [plain.api](/plain-api/plain/api/README.md) - Build APIs with Plain views.
36
+
37
+ ## Auth Packages
38
+
39
+ - [plain.auth](/plain-auth/plain/auth/README.md) - User authentication and authorization.
40
+ - [plain.oauth](/plain-oauth/plain/oauth/README.md) - OAuth authentication and API access.
41
+ - [plain.passwords](/plain-passwords/plain/passwords/README.md) - Password-based login and registration.
42
+ - [plain.loginlink](/plain-loginlink/plain/loginlink/README.md) - Login links for passwordless authentication.
43
+
44
+ ## Admin Packages
45
+
46
+ - [plain.admin](/plain-admin/plain/admin/README.md) - An admin interface for back-office tasks.
47
+ - [plain.flags](/plain-flags/plain/flags/README.md) - Feature flags.
48
+ - [plain.support](/plain-support/plain/support/README.md) - Customer support forms.
49
+ - [plain.redirection](/plain-redirection/plain/redirection/README.md) - Redirects managed in the database.
50
+ - [plain.pageviews](/plain-pageviews/plain/pageviews/README.md) - Basic self-hosted page view tracking and reporting.
51
+
52
+ ## Dev Packages
53
+
54
+ - [plain.dev](/plain-dev/plain/dev/README.md) - A single command for local development.
55
+ - [plain.pytest](/plain-pytest/plain/pytest/README.md) - Pytest fixtures and helpers.
56
+ - [plain.code](/plain-code/plain/code/README.md) - Code formatting and linting.
57
+ - [plain.tunnel](/plain-tunnel/plain/tunnel/README.md) - Expose your local server to the internet.
58
+
59
+ ## Frontend Packages
60
+
61
+ - [plain.tailwind](/plain-tailwind/plain/tailwind/README.md) - Tailwind CSS integration without Node.js.
62
+ - [plain.htmx](/plain-htmx/plain/htmx/README.md) - HTMX integrated into views and templates.
63
+ - [plain.elements](/plain-elements/plain/elements/README.md) - Server-side HTML components.
64
+ - [plain.pages](/plain-pages/plain/pages/README.md) - Static pages with Markdown and Jinja2.
65
+ - [plain.esbuild](/plain-esbuild/plain/esbuild/README.md) - Simple JavaScript bundling and minification.
66
+ - [plain.vendor](/plain-vendor/plain/vendor/README.md) - Vendor JavaScript and CSS libraries.
@@ -48,6 +48,6 @@ class {package_name.capitalize()}Router(Router):
48
48
  )
49
49
 
50
50
  click.secho(
51
- f'Created {package_dir.relative_to(Path.cwd())}. Make sure to add "{package_name}" to INSTALLED_PACKAGES!',
51
+ f'Created {package_dir.relative_to(Path.cwd())}. Make sure to add "app.{package_name}" to INSTALLED_PACKAGES!',
52
52
  fg="green",
53
53
  )
@@ -7,7 +7,7 @@ from .templates import TemplateView
7
7
 
8
8
 
9
9
  class ObjectTemplateViewMixin:
10
- context_object_name = "object"
10
+ context_object_name = ""
11
11
 
12
12
  def get(self) -> Response:
13
13
  self.load_object()
@@ -31,7 +31,11 @@ class ObjectTemplateViewMixin:
31
31
  def get_template_context(self) -> dict:
32
32
  """Insert the single object into the context dict."""
33
33
  context = super().get_template_context() # type: ignore
34
- context[self.context_object_name] = self.object
34
+ context["object"] = (
35
+ self.object
36
+ ) # Some templates can benefit by always knowing a primary "object" can be present
37
+ if self.context_object_name:
38
+ context[self.context_object_name] = self.object
35
39
  return context
36
40
 
37
41
 
@@ -163,7 +167,7 @@ class ListView(TemplateView):
163
167
  rendered by a template.
164
168
  """
165
169
 
166
- context_object_name = "objects"
170
+ context_object_name = ""
167
171
 
168
172
  def get(self) -> Response:
169
173
  self.objects = self.get_objects()
@@ -177,5 +181,7 @@ class ListView(TemplateView):
177
181
  def get_template_context(self) -> dict:
178
182
  """Insert the single object into the context dict."""
179
183
  context = super().get_template_context() # type: ignore
180
- context[self.context_object_name] = self.objects
184
+ context["objects"] = self.objects
185
+ if self.context_object_name:
186
+ context[self.context_object_name] = self.objects
181
187
  return context
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "plain"
3
- version = "0.36.0"
3
+ version = "0.37.0"
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"
plain-0.36.0/PKG-INFO DELETED
@@ -1,77 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: plain
3
- Version: 0.36.0
4
- Summary: A web framework for building products with Python.
5
- Author-email: Dave Gaeddert <dave.gaeddert@dropseed.dev>
6
- License-File: LICENSE
7
- Requires-Python: >=3.11
8
- Requires-Dist: click>=8.0.0
9
- Requires-Dist: jinja2>=3.1.2
10
- Description-Content-Type: text/markdown
11
-
12
- # Plain
13
-
14
- **Plain is a web framework for building products with Python.**
15
-
16
- The core `plain` package provides the backbone of a Python web application (similar to [Flask](https://flask.palletsprojects.com/en/stable/)), while the additional first-party packages can power a more fully-featured database-backed app (similar to [Django](https://www.djangoproject.com/)).
17
-
18
- All Plain packages are designed to work together and use [PEP 420](https://peps.python.org/pep-0420/) to share the `plain` namespace.
19
-
20
- To quickly get started with Plain, visit [plainframework.com/start/](https://plainframework.com/start/).
21
-
22
- ## Core Modules
23
-
24
- The `plain` package includes everything you need to start handling web requests with Python:
25
-
26
- - [assets](assets/README.md) - Serve static files and assets.
27
- - [cli](cli/README.md) - The `plain` CLI, powered by Click.
28
- - [csrf](csrf/README.md) - Cross-Site Request Forgery protection.
29
- - [forms](forms/README.md) - HTML forms and form validation.
30
- - [http](http/README.md) - HTTP request and response handling.
31
- - [logs](logs/README.md) - Logging configuration and utilities.
32
- - [preflight](preflight/README.md) - Preflight checks for your app.
33
- - [runtime](runtime/README.md) - Runtime settings and configuration.
34
- - [templates](templates/README.md) - Jinja2 templates and rendering.
35
- - [test](test/README.md) - Test utilities and fixtures.
36
- - [urls](urls/README.md) - URL routing and request dispatching.
37
- - [views](views/README.md) - Class-based views and request handlers.
38
-
39
- ## Foundational Packages
40
-
41
- - [plain.models](/plain-models/README.md) - Define and interact with your database models.
42
- - [plain.cache](/plain-cache/README.md) - A database-driven general purpose cache.
43
- - [plain.email](/plain-email/README.md) - Send emails with SMTP or custom backends.
44
- - [plain.sessions](/plain-sessions/README.md) - User sessions and cookies.
45
- - [plain.worker](/plain-worker/README.md) - Backgrounb jobs stored in the database.
46
- - [plain.api](/plain-api/README.md) - Build APIs with Plain views.
47
-
48
- ## Auth Packages
49
-
50
- - [plain.auth](/plain-auth/README.md) - User authentication and authorization.
51
- - [plain.oauth](/plain-oauth/README.md) - OAuth authentication and API access.
52
- - [plain.passwords](/plain-passwords/README.md) - Password-based login and registration.
53
- - [plain.loginlink](/plain-loginlink/README.md) - Login links for passwordless authentication.
54
-
55
- ## Admin Packages
56
-
57
- - [plain.admin](/plain-admin/README.md) - An admin interface for back-office tasks.
58
- - [plain.flags](/plain-flags/README.md) - Feature flags.
59
- - [plain.support](/plain-support/README.md) - Customer support forms.
60
- - [plain.redirection](/plain-redirection/README.md) - Redirects managed in the database.
61
- - [plain.pageviews](/plain-pageviews/README.md) - Basic self-hosted page view tracking and reporting.
62
-
63
- ## Dev Packages
64
-
65
- - [plain.dev](/plain-dev/README.md) - A single command for local development.
66
- - [plain.pytest](/plain-pytest/README.md) - Pytest fixtures and helpers.
67
- - [plain.code](/plain-code/README.md) - Code formatting and linting.
68
- - [plain.tunnel](/plain-tunnel/README.md) - Expose your local server to the internet.
69
-
70
- ## Frontend Packages
71
-
72
- - [plain.tailwind](/plain-tailwind/README.md) - Tailwind CSS integration without Node.js.
73
- - [plain.htmx](/plain-htmx/README.md) - HTMX integrated into views and templates.
74
- - [plain.elements](/plain-elements/README.md) - Server-side HTML components.
75
- - [plain.pages](/plain-pages/README.md) - Static pages with Markdown and Jinja2.
76
- - [plain.esbuild](/plain-esbuild/README.md) - Simple JavaScript bundling and minification.
77
- - [plain.vendor](/plain-vendor/README.md) - Vendor JavaScript and CSS libraries.
@@ -1,66 +0,0 @@
1
- # Plain
2
-
3
- **Plain is a web framework for building products with Python.**
4
-
5
- The core `plain` package provides the backbone of a Python web application (similar to [Flask](https://flask.palletsprojects.com/en/stable/)), while the additional first-party packages can power a more fully-featured database-backed app (similar to [Django](https://www.djangoproject.com/)).
6
-
7
- All Plain packages are designed to work together and use [PEP 420](https://peps.python.org/pep-0420/) to share the `plain` namespace.
8
-
9
- To quickly get started with Plain, visit [plainframework.com/start/](https://plainframework.com/start/).
10
-
11
- ## Core Modules
12
-
13
- The `plain` package includes everything you need to start handling web requests with Python:
14
-
15
- - [assets](assets/README.md) - Serve static files and assets.
16
- - [cli](cli/README.md) - The `plain` CLI, powered by Click.
17
- - [csrf](csrf/README.md) - Cross-Site Request Forgery protection.
18
- - [forms](forms/README.md) - HTML forms and form validation.
19
- - [http](http/README.md) - HTTP request and response handling.
20
- - [logs](logs/README.md) - Logging configuration and utilities.
21
- - [preflight](preflight/README.md) - Preflight checks for your app.
22
- - [runtime](runtime/README.md) - Runtime settings and configuration.
23
- - [templates](templates/README.md) - Jinja2 templates and rendering.
24
- - [test](test/README.md) - Test utilities and fixtures.
25
- - [urls](urls/README.md) - URL routing and request dispatching.
26
- - [views](views/README.md) - Class-based views and request handlers.
27
-
28
- ## Foundational Packages
29
-
30
- - [plain.models](/plain-models/README.md) - Define and interact with your database models.
31
- - [plain.cache](/plain-cache/README.md) - A database-driven general purpose cache.
32
- - [plain.email](/plain-email/README.md) - Send emails with SMTP or custom backends.
33
- - [plain.sessions](/plain-sessions/README.md) - User sessions and cookies.
34
- - [plain.worker](/plain-worker/README.md) - Backgrounb jobs stored in the database.
35
- - [plain.api](/plain-api/README.md) - Build APIs with Plain views.
36
-
37
- ## Auth Packages
38
-
39
- - [plain.auth](/plain-auth/README.md) - User authentication and authorization.
40
- - [plain.oauth](/plain-oauth/README.md) - OAuth authentication and API access.
41
- - [plain.passwords](/plain-passwords/README.md) - Password-based login and registration.
42
- - [plain.loginlink](/plain-loginlink/README.md) - Login links for passwordless authentication.
43
-
44
- ## Admin Packages
45
-
46
- - [plain.admin](/plain-admin/README.md) - An admin interface for back-office tasks.
47
- - [plain.flags](/plain-flags/README.md) - Feature flags.
48
- - [plain.support](/plain-support/README.md) - Customer support forms.
49
- - [plain.redirection](/plain-redirection/README.md) - Redirects managed in the database.
50
- - [plain.pageviews](/plain-pageviews/README.md) - Basic self-hosted page view tracking and reporting.
51
-
52
- ## Dev Packages
53
-
54
- - [plain.dev](/plain-dev/README.md) - A single command for local development.
55
- - [plain.pytest](/plain-pytest/README.md) - Pytest fixtures and helpers.
56
- - [plain.code](/plain-code/README.md) - Code formatting and linting.
57
- - [plain.tunnel](/plain-tunnel/README.md) - Expose your local server to the internet.
58
-
59
- ## Frontend Packages
60
-
61
- - [plain.tailwind](/plain-tailwind/README.md) - Tailwind CSS integration without Node.js.
62
- - [plain.htmx](/plain-htmx/README.md) - HTMX integrated into views and templates.
63
- - [plain.elements](/plain-elements/README.md) - Server-side HTML components.
64
- - [plain.pages](/plain-pages/README.md) - Static pages with Markdown and Jinja2.
65
- - [plain.esbuild](/plain-esbuild/README.md) - Simple JavaScript bundling and minification.
66
- - [plain.vendor](/plain-vendor/README.md) - Vendor JavaScript and CSS libraries.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes