plain 0.8.0__tar.gz → 0.9.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 (147) hide show
  1. {plain-0.8.0 → plain-0.9.0}/PKG-INFO +1 -1
  2. {plain-0.8.0 → plain-0.9.0}/plain/cli/cli.py +1 -1
  3. {plain-0.8.0 → plain-0.9.0}/plain/runtime/__init__.py +5 -4
  4. {plain-0.8.0 → plain-0.9.0}/plain/runtime/global_settings.py +1 -1
  5. {plain-0.8.0 → plain-0.9.0}/plain/runtime/user_settings.py +1 -1
  6. {plain-0.8.0 → plain-0.9.0}/pyproject.toml +1 -1
  7. {plain-0.8.0 → plain-0.9.0}/LICENSE +0 -0
  8. {plain-0.8.0 → plain-0.9.0}/README.md +0 -0
  9. {plain-0.8.0 → plain-0.9.0}/plain/README.md +0 -0
  10. {plain-0.8.0 → plain-0.9.0}/plain/__main__.py +0 -0
  11. {plain-0.8.0 → plain-0.9.0}/plain/assets/README.md +0 -0
  12. {plain-0.8.0 → plain-0.9.0}/plain/assets/__init__.py +0 -0
  13. {plain-0.8.0 → plain-0.9.0}/plain/assets/compile.py +0 -0
  14. {plain-0.8.0 → plain-0.9.0}/plain/assets/finders.py +0 -0
  15. {plain-0.8.0 → plain-0.9.0}/plain/assets/fingerprints.py +0 -0
  16. {plain-0.8.0 → plain-0.9.0}/plain/assets/urls.py +0 -0
  17. {plain-0.8.0 → plain-0.9.0}/plain/assets/views.py +0 -0
  18. {plain-0.8.0 → plain-0.9.0}/plain/cli/README.md +0 -0
  19. {plain-0.8.0 → plain-0.9.0}/plain/cli/__init__.py +0 -0
  20. {plain-0.8.0 → plain-0.9.0}/plain/cli/formatting.py +0 -0
  21. {plain-0.8.0 → plain-0.9.0}/plain/cli/packages.py +0 -0
  22. {plain-0.8.0 → plain-0.9.0}/plain/cli/print.py +0 -0
  23. {plain-0.8.0 → plain-0.9.0}/plain/cli/startup.py +0 -0
  24. {plain-0.8.0 → plain-0.9.0}/plain/csrf/README.md +0 -0
  25. {plain-0.8.0 → plain-0.9.0}/plain/csrf/middleware.py +0 -0
  26. {plain-0.8.0 → plain-0.9.0}/plain/csrf/views.py +0 -0
  27. {plain-0.8.0 → plain-0.9.0}/plain/debug.py +0 -0
  28. {plain-0.8.0 → plain-0.9.0}/plain/exceptions.py +0 -0
  29. {plain-0.8.0 → plain-0.9.0}/plain/forms/README.md +0 -0
  30. {plain-0.8.0 → plain-0.9.0}/plain/forms/__init__.py +0 -0
  31. {plain-0.8.0 → plain-0.9.0}/plain/forms/boundfield.py +0 -0
  32. {plain-0.8.0 → plain-0.9.0}/plain/forms/exceptions.py +0 -0
  33. {plain-0.8.0 → plain-0.9.0}/plain/forms/fields.py +0 -0
  34. {plain-0.8.0 → plain-0.9.0}/plain/forms/forms.py +0 -0
  35. {plain-0.8.0 → plain-0.9.0}/plain/http/README.md +0 -0
  36. {plain-0.8.0 → plain-0.9.0}/plain/http/__init__.py +0 -0
  37. {plain-0.8.0 → plain-0.9.0}/plain/http/cookie.py +0 -0
  38. {plain-0.8.0 → plain-0.9.0}/plain/http/multipartparser.py +0 -0
  39. {plain-0.8.0 → plain-0.9.0}/plain/http/request.py +0 -0
  40. {plain-0.8.0 → plain-0.9.0}/plain/http/response.py +0 -0
  41. {plain-0.8.0 → plain-0.9.0}/plain/internal/__init__.py +0 -0
  42. {plain-0.8.0 → plain-0.9.0}/plain/internal/files/README.md +0 -0
  43. {plain-0.8.0 → plain-0.9.0}/plain/internal/files/__init__.py +0 -0
  44. {plain-0.8.0 → plain-0.9.0}/plain/internal/files/base.py +0 -0
  45. {plain-0.8.0 → plain-0.9.0}/plain/internal/files/locks.py +0 -0
  46. {plain-0.8.0 → plain-0.9.0}/plain/internal/files/move.py +0 -0
  47. {plain-0.8.0 → plain-0.9.0}/plain/internal/files/temp.py +0 -0
  48. {plain-0.8.0 → plain-0.9.0}/plain/internal/files/uploadedfile.py +0 -0
  49. {plain-0.8.0 → plain-0.9.0}/plain/internal/files/uploadhandler.py +0 -0
  50. {plain-0.8.0 → plain-0.9.0}/plain/internal/files/utils.py +0 -0
  51. {plain-0.8.0 → plain-0.9.0}/plain/internal/handlers/__init__.py +0 -0
  52. {plain-0.8.0 → plain-0.9.0}/plain/internal/handlers/base.py +0 -0
  53. {plain-0.8.0 → plain-0.9.0}/plain/internal/handlers/exception.py +0 -0
  54. {plain-0.8.0 → plain-0.9.0}/plain/internal/handlers/wsgi.py +0 -0
  55. {plain-0.8.0 → plain-0.9.0}/plain/internal/middleware/__init__.py +0 -0
  56. {plain-0.8.0 → plain-0.9.0}/plain/internal/middleware/headers.py +0 -0
  57. {plain-0.8.0 → plain-0.9.0}/plain/internal/middleware/https.py +0 -0
  58. {plain-0.8.0 → plain-0.9.0}/plain/internal/middleware/slash.py +0 -0
  59. {plain-0.8.0 → plain-0.9.0}/plain/json.py +0 -0
  60. {plain-0.8.0 → plain-0.9.0}/plain/logs/README.md +0 -0
  61. {plain-0.8.0 → plain-0.9.0}/plain/logs/__init__.py +0 -0
  62. {plain-0.8.0 → plain-0.9.0}/plain/logs/configure.py +0 -0
  63. {plain-0.8.0 → plain-0.9.0}/plain/logs/loggers.py +0 -0
  64. {plain-0.8.0 → plain-0.9.0}/plain/logs/utils.py +0 -0
  65. {plain-0.8.0 → plain-0.9.0}/plain/packages/README.md +0 -0
  66. {plain-0.8.0 → plain-0.9.0}/plain/packages/__init__.py +0 -0
  67. {plain-0.8.0 → plain-0.9.0}/plain/packages/config.py +0 -0
  68. {plain-0.8.0 → plain-0.9.0}/plain/packages/registry.py +0 -0
  69. {plain-0.8.0 → plain-0.9.0}/plain/paginator.py +0 -0
  70. {plain-0.8.0 → plain-0.9.0}/plain/preflight/README.md +0 -0
  71. {plain-0.8.0 → plain-0.9.0}/plain/preflight/__init__.py +0 -0
  72. {plain-0.8.0 → plain-0.9.0}/plain/preflight/files.py +0 -0
  73. {plain-0.8.0 → plain-0.9.0}/plain/preflight/messages.py +0 -0
  74. {plain-0.8.0 → plain-0.9.0}/plain/preflight/registry.py +0 -0
  75. {plain-0.8.0 → plain-0.9.0}/plain/preflight/security/__init__.py +0 -0
  76. {plain-0.8.0 → plain-0.9.0}/plain/preflight/security/base.py +0 -0
  77. {plain-0.8.0 → plain-0.9.0}/plain/preflight/security/csrf.py +0 -0
  78. {plain-0.8.0 → plain-0.9.0}/plain/preflight/urls.py +0 -0
  79. {plain-0.8.0 → plain-0.9.0}/plain/runtime/README.md +0 -0
  80. {plain-0.8.0 → plain-0.9.0}/plain/signals/README.md +0 -0
  81. {plain-0.8.0 → plain-0.9.0}/plain/signals/__init__.py +0 -0
  82. {plain-0.8.0 → plain-0.9.0}/plain/signals/dispatch/__init__.py +0 -0
  83. {plain-0.8.0 → plain-0.9.0}/plain/signals/dispatch/dispatcher.py +0 -0
  84. {plain-0.8.0 → plain-0.9.0}/plain/signals/dispatch/license.txt +0 -0
  85. {plain-0.8.0 → plain-0.9.0}/plain/signing.py +0 -0
  86. {plain-0.8.0 → plain-0.9.0}/plain/templates/README.md +0 -0
  87. {plain-0.8.0 → plain-0.9.0}/plain/templates/__init__.py +0 -0
  88. {plain-0.8.0 → plain-0.9.0}/plain/templates/core.py +0 -0
  89. {plain-0.8.0 → plain-0.9.0}/plain/templates/jinja/README.md +0 -0
  90. {plain-0.8.0 → plain-0.9.0}/plain/templates/jinja/__init__.py +0 -0
  91. {plain-0.8.0 → plain-0.9.0}/plain/templates/jinja/defaults.py +0 -0
  92. {plain-0.8.0 → plain-0.9.0}/plain/templates/jinja/extensions.py +0 -0
  93. {plain-0.8.0 → plain-0.9.0}/plain/templates/jinja/filters.py +0 -0
  94. {plain-0.8.0 → plain-0.9.0}/plain/templates/jinja/globals.py +0 -0
  95. {plain-0.8.0 → plain-0.9.0}/plain/test/README.md +0 -0
  96. {plain-0.8.0 → plain-0.9.0}/plain/test/__init__.py +0 -0
  97. {plain-0.8.0 → plain-0.9.0}/plain/test/client.py +0 -0
  98. {plain-0.8.0 → plain-0.9.0}/plain/urls/README.md +0 -0
  99. {plain-0.8.0 → plain-0.9.0}/plain/urls/__init__.py +0 -0
  100. {plain-0.8.0 → plain-0.9.0}/plain/urls/base.py +0 -0
  101. {plain-0.8.0 → plain-0.9.0}/plain/urls/conf.py +0 -0
  102. {plain-0.8.0 → plain-0.9.0}/plain/urls/converters.py +0 -0
  103. {plain-0.8.0 → plain-0.9.0}/plain/urls/exceptions.py +0 -0
  104. {plain-0.8.0 → plain-0.9.0}/plain/urls/resolvers.py +0 -0
  105. {plain-0.8.0 → plain-0.9.0}/plain/utils/README.md +0 -0
  106. {plain-0.8.0 → plain-0.9.0}/plain/utils/__init__.py +0 -0
  107. {plain-0.8.0 → plain-0.9.0}/plain/utils/_os.py +0 -0
  108. {plain-0.8.0 → plain-0.9.0}/plain/utils/cache.py +0 -0
  109. {plain-0.8.0 → plain-0.9.0}/plain/utils/connection.py +0 -0
  110. {plain-0.8.0 → plain-0.9.0}/plain/utils/crypto.py +0 -0
  111. {plain-0.8.0 → plain-0.9.0}/plain/utils/datastructures.py +0 -0
  112. {plain-0.8.0 → plain-0.9.0}/plain/utils/dateformat.py +0 -0
  113. {plain-0.8.0 → plain-0.9.0}/plain/utils/dateparse.py +0 -0
  114. {plain-0.8.0 → plain-0.9.0}/plain/utils/dates.py +0 -0
  115. {plain-0.8.0 → plain-0.9.0}/plain/utils/deconstruct.py +0 -0
  116. {plain-0.8.0 → plain-0.9.0}/plain/utils/decorators.py +0 -0
  117. {plain-0.8.0 → plain-0.9.0}/plain/utils/deprecation.py +0 -0
  118. {plain-0.8.0 → plain-0.9.0}/plain/utils/duration.py +0 -0
  119. {plain-0.8.0 → plain-0.9.0}/plain/utils/email.py +0 -0
  120. {plain-0.8.0 → plain-0.9.0}/plain/utils/encoding.py +0 -0
  121. {plain-0.8.0 → plain-0.9.0}/plain/utils/functional.py +0 -0
  122. {plain-0.8.0 → plain-0.9.0}/plain/utils/hashable.py +0 -0
  123. {plain-0.8.0 → plain-0.9.0}/plain/utils/html.py +0 -0
  124. {plain-0.8.0 → plain-0.9.0}/plain/utils/http.py +0 -0
  125. {plain-0.8.0 → plain-0.9.0}/plain/utils/inspect.py +0 -0
  126. {plain-0.8.0 → plain-0.9.0}/plain/utils/ipv6.py +0 -0
  127. {plain-0.8.0 → plain-0.9.0}/plain/utils/itercompat.py +0 -0
  128. {plain-0.8.0 → plain-0.9.0}/plain/utils/module_loading.py +0 -0
  129. {plain-0.8.0 → plain-0.9.0}/plain/utils/regex_helper.py +0 -0
  130. {plain-0.8.0 → plain-0.9.0}/plain/utils/safestring.py +0 -0
  131. {plain-0.8.0 → plain-0.9.0}/plain/utils/termcolors.py +0 -0
  132. {plain-0.8.0 → plain-0.9.0}/plain/utils/text.py +0 -0
  133. {plain-0.8.0 → plain-0.9.0}/plain/utils/timesince.py +0 -0
  134. {plain-0.8.0 → plain-0.9.0}/plain/utils/timezone.py +0 -0
  135. {plain-0.8.0 → plain-0.9.0}/plain/utils/tree.py +0 -0
  136. {plain-0.8.0 → plain-0.9.0}/plain/validators.py +0 -0
  137. {plain-0.8.0 → plain-0.9.0}/plain/views/README.md +0 -0
  138. {plain-0.8.0 → plain-0.9.0}/plain/views/__init__.py +0 -0
  139. {plain-0.8.0 → plain-0.9.0}/plain/views/base.py +0 -0
  140. {plain-0.8.0 → plain-0.9.0}/plain/views/csrf.py +0 -0
  141. {plain-0.8.0 → plain-0.9.0}/plain/views/errors.py +0 -0
  142. {plain-0.8.0 → plain-0.9.0}/plain/views/exceptions.py +0 -0
  143. {plain-0.8.0 → plain-0.9.0}/plain/views/forms.py +0 -0
  144. {plain-0.8.0 → plain-0.9.0}/plain/views/objects.py +0 -0
  145. {plain-0.8.0 → plain-0.9.0}/plain/views/redirect.py +0 -0
  146. {plain-0.8.0 → plain-0.9.0}/plain/views/templates.py +0 -0
  147. {plain-0.8.0 → plain-0.9.0}/plain/wsgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: plain
3
- Version: 0.8.0
3
+ Version: 0.9.0
4
4
  Summary: A web framework for building products with Python.
5
5
  Author: Dave Gaeddert
6
6
  Author-email: dave.gaeddert@dropseed.dev
@@ -251,7 +251,7 @@ def preflight_checks(package_label, deploy, fail_level, databases):
251
251
  msg = header + body + footer
252
252
  click.echo(msg, err=True)
253
253
  else:
254
- click.echo("Preflight check identified no issues.", err=True)
254
+ click.secho("Preflight check identified no issues.", err=True, fg="green")
255
255
 
256
256
 
257
257
  @plain_cli.command()
@@ -16,7 +16,6 @@ except importlib.metadata.PackageNotFoundError:
16
16
  # Made available without setup or settings
17
17
  APP_PATH = Path.cwd() / "app"
18
18
 
19
-
20
19
  # from plain.runtime import settings
21
20
  settings = Settings()
22
21
 
@@ -38,9 +37,11 @@ def setup():
38
37
  "No app directory found. Are you sure you're in a Plain project?"
39
38
  )
40
39
 
41
- # Automatically put the app dir on the Python path for convenience
42
- if APP_PATH not in sys.path:
43
- sys.path.insert(0, APP_PATH.as_posix())
40
+ # Automatically put the project dir on the Python path
41
+ # which doesn't otherwise happen when you run `plain` commands.
42
+ # This makes "app.<module>" imports and relative imports work.
43
+ if APP_PATH.parent not in sys.path:
44
+ sys.path.insert(0, APP_PATH.parent.as_posix())
44
45
 
45
46
  # Load .env files automatically before settings
46
47
  if app_env := environ.get("PLAIN_ENV", ""):
@@ -59,7 +59,7 @@ SECRET_KEY: str
59
59
  # secret key rotation.
60
60
  SECRET_KEY_FALLBACKS: list[str] = []
61
61
 
62
- ROOT_URLCONF = "urls"
62
+ ROOT_URLCONF = "app.urls"
63
63
 
64
64
  # List of upload handler classes to be applied in order.
65
65
  FILE_UPLOAD_HANDLERS = [
@@ -41,7 +41,7 @@ class Settings:
41
41
 
42
42
  # Determine the settings module
43
43
  if self._settings_module is None:
44
- self._settings_module = os.environ.get(ENVIRONMENT_VARIABLE, "settings")
44
+ self._settings_module = os.environ.get(ENVIRONMENT_VARIABLE, "app.settings")
45
45
 
46
46
  # First load the global settings from plain
47
47
  self._load_module_settings(
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "plain"
3
- version = "0.8.0"
3
+ version = "0.9.0"
4
4
  description = "A web framework for building products with Python."
5
5
  authors = ["Dave Gaeddert <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