plain 0.59.0__tar.gz → 0.60.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 (170) hide show
  1. {plain-0.59.0 → plain-0.60.0}/PKG-INFO +1 -1
  2. {plain-0.59.0 → plain-0.60.0}/plain/CHANGELOG.md +11 -0
  3. {plain-0.59.0 → plain-0.60.0}/plain/runtime/global_settings.py +4 -2
  4. {plain-0.59.0 → plain-0.60.0}/plain/runtime/utils.py +7 -4
  5. {plain-0.59.0 → plain-0.60.0}/pyproject.toml +1 -1
  6. {plain-0.59.0 → plain-0.60.0}/.gitignore +0 -0
  7. {plain-0.59.0 → plain-0.60.0}/LICENSE +0 -0
  8. {plain-0.59.0 → plain-0.60.0}/README.md +0 -0
  9. {plain-0.59.0 → plain-0.60.0}/plain/README.md +0 -0
  10. {plain-0.59.0 → plain-0.60.0}/plain/__main__.py +0 -0
  11. {plain-0.59.0 → plain-0.60.0}/plain/assets/README.md +0 -0
  12. {plain-0.59.0 → plain-0.60.0}/plain/assets/__init__.py +0 -0
  13. {plain-0.59.0 → plain-0.60.0}/plain/assets/compile.py +0 -0
  14. {plain-0.59.0 → plain-0.60.0}/plain/assets/finders.py +0 -0
  15. {plain-0.59.0 → plain-0.60.0}/plain/assets/fingerprints.py +0 -0
  16. {plain-0.59.0 → plain-0.60.0}/plain/assets/urls.py +0 -0
  17. {plain-0.59.0 → plain-0.60.0}/plain/assets/views.py +0 -0
  18. {plain-0.59.0 → plain-0.60.0}/plain/chores/README.md +0 -0
  19. {plain-0.59.0 → plain-0.60.0}/plain/chores/__init__.py +0 -0
  20. {plain-0.59.0 → plain-0.60.0}/plain/chores/registry.py +0 -0
  21. {plain-0.59.0 → plain-0.60.0}/plain/cli/README.md +0 -0
  22. {plain-0.59.0 → plain-0.60.0}/plain/cli/__init__.py +0 -0
  23. {plain-0.59.0 → plain-0.60.0}/plain/cli/agent.py +0 -0
  24. {plain-0.59.0 → plain-0.60.0}/plain/cli/build.py +0 -0
  25. {plain-0.59.0 → plain-0.60.0}/plain/cli/changelog.py +0 -0
  26. {plain-0.59.0 → plain-0.60.0}/plain/cli/chores.py +0 -0
  27. {plain-0.59.0 → plain-0.60.0}/plain/cli/core.py +0 -0
  28. {plain-0.59.0 → plain-0.60.0}/plain/cli/docs.py +0 -0
  29. {plain-0.59.0 → plain-0.60.0}/plain/cli/formatting.py +0 -0
  30. {plain-0.59.0 → plain-0.60.0}/plain/cli/help.py +0 -0
  31. {plain-0.59.0 → plain-0.60.0}/plain/cli/install.py +0 -0
  32. {plain-0.59.0 → plain-0.60.0}/plain/cli/output.py +0 -0
  33. {plain-0.59.0 → plain-0.60.0}/plain/cli/preflight.py +0 -0
  34. {plain-0.59.0 → plain-0.60.0}/plain/cli/print.py +0 -0
  35. {plain-0.59.0 → plain-0.60.0}/plain/cli/registry.py +0 -0
  36. {plain-0.59.0 → plain-0.60.0}/plain/cli/scaffold.py +0 -0
  37. {plain-0.59.0 → plain-0.60.0}/plain/cli/settings.py +0 -0
  38. {plain-0.59.0 → plain-0.60.0}/plain/cli/shell.py +0 -0
  39. {plain-0.59.0 → plain-0.60.0}/plain/cli/startup.py +0 -0
  40. {plain-0.59.0 → plain-0.60.0}/plain/cli/upgrade.py +0 -0
  41. {plain-0.59.0 → plain-0.60.0}/plain/cli/urls.py +0 -0
  42. {plain-0.59.0 → plain-0.60.0}/plain/cli/utils.py +0 -0
  43. {plain-0.59.0 → plain-0.60.0}/plain/csrf/README.md +0 -0
  44. {plain-0.59.0 → plain-0.60.0}/plain/csrf/middleware.py +0 -0
  45. {plain-0.59.0 → plain-0.60.0}/plain/csrf/views.py +0 -0
  46. {plain-0.59.0 → plain-0.60.0}/plain/debug.py +0 -0
  47. {plain-0.59.0 → plain-0.60.0}/plain/exceptions.py +0 -0
  48. {plain-0.59.0 → plain-0.60.0}/plain/forms/README.md +0 -0
  49. {plain-0.59.0 → plain-0.60.0}/plain/forms/__init__.py +0 -0
  50. {plain-0.59.0 → plain-0.60.0}/plain/forms/boundfield.py +0 -0
  51. {plain-0.59.0 → plain-0.60.0}/plain/forms/exceptions.py +0 -0
  52. {plain-0.59.0 → plain-0.60.0}/plain/forms/fields.py +0 -0
  53. {plain-0.59.0 → plain-0.60.0}/plain/forms/forms.py +0 -0
  54. {plain-0.59.0 → plain-0.60.0}/plain/http/README.md +0 -0
  55. {plain-0.59.0 → plain-0.60.0}/plain/http/__init__.py +0 -0
  56. {plain-0.59.0 → plain-0.60.0}/plain/http/cookie.py +0 -0
  57. {plain-0.59.0 → plain-0.60.0}/plain/http/multipartparser.py +0 -0
  58. {plain-0.59.0 → plain-0.60.0}/plain/http/request.py +0 -0
  59. {plain-0.59.0 → plain-0.60.0}/plain/http/response.py +0 -0
  60. {plain-0.59.0 → plain-0.60.0}/plain/internal/__init__.py +0 -0
  61. {plain-0.59.0 → plain-0.60.0}/plain/internal/files/__init__.py +0 -0
  62. {plain-0.59.0 → plain-0.60.0}/plain/internal/files/base.py +0 -0
  63. {plain-0.59.0 → plain-0.60.0}/plain/internal/files/locks.py +0 -0
  64. {plain-0.59.0 → plain-0.60.0}/plain/internal/files/move.py +0 -0
  65. {plain-0.59.0 → plain-0.60.0}/plain/internal/files/temp.py +0 -0
  66. {plain-0.59.0 → plain-0.60.0}/plain/internal/files/uploadedfile.py +0 -0
  67. {plain-0.59.0 → plain-0.60.0}/plain/internal/files/uploadhandler.py +0 -0
  68. {plain-0.59.0 → plain-0.60.0}/plain/internal/files/utils.py +0 -0
  69. {plain-0.59.0 → plain-0.60.0}/plain/internal/handlers/__init__.py +0 -0
  70. {plain-0.59.0 → plain-0.60.0}/plain/internal/handlers/base.py +0 -0
  71. {plain-0.59.0 → plain-0.60.0}/plain/internal/handlers/exception.py +0 -0
  72. {plain-0.59.0 → plain-0.60.0}/plain/internal/handlers/wsgi.py +0 -0
  73. {plain-0.59.0 → plain-0.60.0}/plain/internal/middleware/__init__.py +0 -0
  74. {plain-0.59.0 → plain-0.60.0}/plain/internal/middleware/headers.py +0 -0
  75. {plain-0.59.0 → plain-0.60.0}/plain/internal/middleware/https.py +0 -0
  76. {plain-0.59.0 → plain-0.60.0}/plain/internal/middleware/slash.py +0 -0
  77. {plain-0.59.0 → plain-0.60.0}/plain/json.py +0 -0
  78. {plain-0.59.0 → plain-0.60.0}/plain/logs/README.md +0 -0
  79. {plain-0.59.0 → plain-0.60.0}/plain/logs/__init__.py +0 -0
  80. {plain-0.59.0 → plain-0.60.0}/plain/logs/configure.py +0 -0
  81. {plain-0.59.0 → plain-0.60.0}/plain/logs/loggers.py +0 -0
  82. {plain-0.59.0 → plain-0.60.0}/plain/logs/utils.py +0 -0
  83. {plain-0.59.0 → plain-0.60.0}/plain/packages/README.md +0 -0
  84. {plain-0.59.0 → plain-0.60.0}/plain/packages/__init__.py +0 -0
  85. {plain-0.59.0 → plain-0.60.0}/plain/packages/config.py +0 -0
  86. {plain-0.59.0 → plain-0.60.0}/plain/packages/registry.py +0 -0
  87. {plain-0.59.0 → plain-0.60.0}/plain/paginator.py +0 -0
  88. {plain-0.59.0 → plain-0.60.0}/plain/preflight/README.md +0 -0
  89. {plain-0.59.0 → plain-0.60.0}/plain/preflight/__init__.py +0 -0
  90. {plain-0.59.0 → plain-0.60.0}/plain/preflight/files.py +0 -0
  91. {plain-0.59.0 → plain-0.60.0}/plain/preflight/messages.py +0 -0
  92. {plain-0.59.0 → plain-0.60.0}/plain/preflight/registry.py +0 -0
  93. {plain-0.59.0 → plain-0.60.0}/plain/preflight/security.py +0 -0
  94. {plain-0.59.0 → plain-0.60.0}/plain/preflight/urls.py +0 -0
  95. {plain-0.59.0 → plain-0.60.0}/plain/runtime/README.md +0 -0
  96. {plain-0.59.0 → plain-0.60.0}/plain/runtime/__init__.py +0 -0
  97. {plain-0.59.0 → plain-0.60.0}/plain/runtime/user_settings.py +0 -0
  98. {plain-0.59.0 → plain-0.60.0}/plain/signals/README.md +0 -0
  99. {plain-0.59.0 → plain-0.60.0}/plain/signals/__init__.py +0 -0
  100. {plain-0.59.0 → plain-0.60.0}/plain/signals/dispatch/__init__.py +0 -0
  101. {plain-0.59.0 → plain-0.60.0}/plain/signals/dispatch/dispatcher.py +0 -0
  102. {plain-0.59.0 → plain-0.60.0}/plain/signals/dispatch/license.txt +0 -0
  103. {plain-0.59.0 → plain-0.60.0}/plain/signing.py +0 -0
  104. {plain-0.59.0 → plain-0.60.0}/plain/templates/README.md +0 -0
  105. {plain-0.59.0 → plain-0.60.0}/plain/templates/__init__.py +0 -0
  106. {plain-0.59.0 → plain-0.60.0}/plain/templates/core.py +0 -0
  107. {plain-0.59.0 → plain-0.60.0}/plain/templates/jinja/__init__.py +0 -0
  108. {plain-0.59.0 → plain-0.60.0}/plain/templates/jinja/environments.py +0 -0
  109. {plain-0.59.0 → plain-0.60.0}/plain/templates/jinja/extensions.py +0 -0
  110. {plain-0.59.0 → plain-0.60.0}/plain/templates/jinja/filters.py +0 -0
  111. {plain-0.59.0 → plain-0.60.0}/plain/templates/jinja/globals.py +0 -0
  112. {plain-0.59.0 → plain-0.60.0}/plain/test/README.md +0 -0
  113. {plain-0.59.0 → plain-0.60.0}/plain/test/__init__.py +0 -0
  114. {plain-0.59.0 → plain-0.60.0}/plain/test/client.py +0 -0
  115. {plain-0.59.0 → plain-0.60.0}/plain/test/encoding.py +0 -0
  116. {plain-0.59.0 → plain-0.60.0}/plain/test/exceptions.py +0 -0
  117. {plain-0.59.0 → plain-0.60.0}/plain/urls/README.md +0 -0
  118. {plain-0.59.0 → plain-0.60.0}/plain/urls/__init__.py +0 -0
  119. {plain-0.59.0 → plain-0.60.0}/plain/urls/converters.py +0 -0
  120. {plain-0.59.0 → plain-0.60.0}/plain/urls/exceptions.py +0 -0
  121. {plain-0.59.0 → plain-0.60.0}/plain/urls/patterns.py +0 -0
  122. {plain-0.59.0 → plain-0.60.0}/plain/urls/resolvers.py +0 -0
  123. {plain-0.59.0 → plain-0.60.0}/plain/urls/routers.py +0 -0
  124. {plain-0.59.0 → plain-0.60.0}/plain/urls/utils.py +0 -0
  125. {plain-0.59.0 → plain-0.60.0}/plain/utils/README.md +0 -0
  126. {plain-0.59.0 → plain-0.60.0}/plain/utils/__init__.py +0 -0
  127. {plain-0.59.0 → plain-0.60.0}/plain/utils/cache.py +0 -0
  128. {plain-0.59.0 → plain-0.60.0}/plain/utils/crypto.py +0 -0
  129. {plain-0.59.0 → plain-0.60.0}/plain/utils/datastructures.py +0 -0
  130. {plain-0.59.0 → plain-0.60.0}/plain/utils/dateparse.py +0 -0
  131. {plain-0.59.0 → plain-0.60.0}/plain/utils/deconstruct.py +0 -0
  132. {plain-0.59.0 → plain-0.60.0}/plain/utils/decorators.py +0 -0
  133. {plain-0.59.0 → plain-0.60.0}/plain/utils/duration.py +0 -0
  134. {plain-0.59.0 → plain-0.60.0}/plain/utils/encoding.py +0 -0
  135. {plain-0.59.0 → plain-0.60.0}/plain/utils/functional.py +0 -0
  136. {plain-0.59.0 → plain-0.60.0}/plain/utils/hashable.py +0 -0
  137. {plain-0.59.0 → plain-0.60.0}/plain/utils/html.py +0 -0
  138. {plain-0.59.0 → plain-0.60.0}/plain/utils/http.py +0 -0
  139. {plain-0.59.0 → plain-0.60.0}/plain/utils/inspect.py +0 -0
  140. {plain-0.59.0 → plain-0.60.0}/plain/utils/ipv6.py +0 -0
  141. {plain-0.59.0 → plain-0.60.0}/plain/utils/itercompat.py +0 -0
  142. {plain-0.59.0 → plain-0.60.0}/plain/utils/module_loading.py +0 -0
  143. {plain-0.59.0 → plain-0.60.0}/plain/utils/regex_helper.py +0 -0
  144. {plain-0.59.0 → plain-0.60.0}/plain/utils/safestring.py +0 -0
  145. {plain-0.59.0 → plain-0.60.0}/plain/utils/text.py +0 -0
  146. {plain-0.59.0 → plain-0.60.0}/plain/utils/timesince.py +0 -0
  147. {plain-0.59.0 → plain-0.60.0}/plain/utils/timezone.py +0 -0
  148. {plain-0.59.0 → plain-0.60.0}/plain/utils/tree.py +0 -0
  149. {plain-0.59.0 → plain-0.60.0}/plain/validators.py +0 -0
  150. {plain-0.59.0 → plain-0.60.0}/plain/views/README.md +0 -0
  151. {plain-0.59.0 → plain-0.60.0}/plain/views/__init__.py +0 -0
  152. {plain-0.59.0 → plain-0.60.0}/plain/views/base.py +0 -0
  153. {plain-0.59.0 → plain-0.60.0}/plain/views/errors.py +0 -0
  154. {plain-0.59.0 → plain-0.60.0}/plain/views/exceptions.py +0 -0
  155. {plain-0.59.0 → plain-0.60.0}/plain/views/forms.py +0 -0
  156. {plain-0.59.0 → plain-0.60.0}/plain/views/objects.py +0 -0
  157. {plain-0.59.0 → plain-0.60.0}/plain/views/redirect.py +0 -0
  158. {plain-0.59.0 → plain-0.60.0}/plain/views/templates.py +0 -0
  159. {plain-0.59.0 → plain-0.60.0}/plain/wsgi.py +0 -0
  160. {plain-0.59.0 → plain-0.60.0}/tests/.gitignore +0 -0
  161. {plain-0.59.0 → plain-0.60.0}/tests/app/.gitignore +0 -0
  162. {plain-0.59.0 → plain-0.60.0}/tests/app/settings.py +0 -0
  163. {plain-0.59.0 → plain-0.60.0}/tests/app/test/__init__.py +0 -0
  164. {plain-0.59.0 → plain-0.60.0}/tests/app/test/default_settings.py +0 -0
  165. {plain-0.59.0 → plain-0.60.0}/tests/app/urls.py +0 -0
  166. {plain-0.59.0 → plain-0.60.0}/tests/conftest.py +0 -0
  167. {plain-0.59.0 → plain-0.60.0}/tests/test_cli.py +0 -0
  168. {plain-0.59.0 → plain-0.60.0}/tests/test_csrf.py +0 -0
  169. {plain-0.59.0 → plain-0.60.0}/tests/test_runtime.py +0 -0
  170. {plain-0.59.0 → plain-0.60.0}/tests/test_wsgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plain
3
- Version: 0.59.0
3
+ Version: 0.60.0
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,16 @@
1
1
  # plain changelog
2
2
 
3
+ ## [0.60.0](https://github.com/dropseed/plain/releases/plain@0.60.0) (2025-08-27)
4
+
5
+ ### What's changed
6
+
7
+ - Added new `APP_VERSION` setting that defaults to the project version from `pyproject.toml` ([57fb948d46](https://github.com/dropseed/plain/commit/57fb948d46))
8
+ - Updated `get_app_name_from_pyproject()` to `get_app_info_from_pyproject()` to return both name and version ([57fb948d46](https://github.com/dropseed/plain/commit/57fb948d46))
9
+
10
+ ### Upgrade instructions
11
+
12
+ - No changes required
13
+
3
14
  ## [0.59.0](https://github.com/dropseed/plain/releases/plain@0.59.0) (2025-08-22)
4
15
 
5
16
  ### What's changed
@@ -3,13 +3,15 @@ Default Plain settings. Override these with settings in the module pointed to
3
3
  by the PLAIN_SETTINGS_MODULE environment variable.
4
4
  """
5
5
 
6
- from .utils import get_app_name_from_pyproject
6
+ from .utils import get_app_info_from_pyproject
7
7
 
8
8
  # MARK: Core Settings
9
9
 
10
10
  DEBUG: bool = False
11
11
 
12
- APP_NAME: str = get_app_name_from_pyproject()
12
+ name, version = get_app_info_from_pyproject()
13
+ APP_NAME: str = name
14
+ APP_VERSION: str = version
13
15
 
14
16
  # List of strings representing installed packages.
15
17
  INSTALLED_PACKAGES: list[str] = []
@@ -2,8 +2,8 @@ import tomllib
2
2
  from pathlib import Path
3
3
 
4
4
 
5
- def get_app_name_from_pyproject():
6
- """Get the project name from the nearest pyproject.toml file."""
5
+ def get_app_info_from_pyproject():
6
+ """Get the project name and version from the nearest pyproject.toml file."""
7
7
  current_path = Path.cwd()
8
8
 
9
9
  # Walk up the directory tree looking for pyproject.toml
@@ -13,8 +13,11 @@ def get_app_name_from_pyproject():
13
13
  try:
14
14
  with pyproject_path.open("rb") as f:
15
15
  pyproject = tomllib.load(f)
16
- return pyproject.get("project", {}).get("name", "App")
16
+ project = pyproject.get("project", {})
17
+ name = project.get("name", "App")
18
+ version = project.get("version", "dev")
19
+ return name, version
17
20
  except (tomllib.TOMLDecodeError, OSError):
18
21
  continue
19
22
 
20
- return "App"
23
+ return "App", "dev"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "plain"
3
- version = "0.59.0"
3
+ version = "0.60.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"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes