plain 0.21.3__tar.gz → 0.21.5__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.21.3 → plain-0.21.5}/PKG-INFO +1 -1
- {plain-0.21.3 → plain-0.21.5}/plain/cli/packages.py +25 -8
- {plain-0.21.3 → plain-0.21.5}/plain/packages/config.py +5 -5
- {plain-0.21.3 → plain-0.21.5}/plain/packages/registry.py +1 -1
- {plain-0.21.3 → plain-0.21.5}/pyproject.toml +1 -1
- {plain-0.21.3 → plain-0.21.5}/.gitignore +0 -0
- {plain-0.21.3 → plain-0.21.5}/LICENSE +0 -0
- {plain-0.21.3 → plain-0.21.5}/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/__main__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/assets/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/assets/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/assets/compile.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/assets/finders.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/assets/fingerprints.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/assets/urls.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/assets/views.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/cli/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/cli/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/cli/cli.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/cli/formatting.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/cli/print.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/cli/startup.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/csrf/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/csrf/middleware.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/csrf/views.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/debug.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/exceptions.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/forms/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/forms/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/forms/boundfield.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/forms/exceptions.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/forms/fields.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/forms/forms.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/http/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/http/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/http/cookie.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/http/multipartparser.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/http/request.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/http/response.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/files/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/files/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/files/base.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/files/locks.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/files/move.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/files/temp.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/files/uploadedfile.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/files/uploadhandler.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/files/utils.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/handlers/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/handlers/base.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/handlers/exception.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/handlers/wsgi.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/middleware/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/middleware/headers.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/middleware/https.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/internal/middleware/slash.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/json.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/logs/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/logs/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/logs/configure.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/logs/loggers.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/logs/utils.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/packages/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/packages/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/paginator.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/preflight/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/preflight/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/preflight/files.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/preflight/messages.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/preflight/registry.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/preflight/security.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/preflight/urls.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/runtime/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/runtime/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/runtime/global_settings.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/runtime/user_settings.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/signals/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/signals/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/signals/dispatch/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/signals/dispatch/dispatcher.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/signals/dispatch/license.txt +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/signing.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/templates/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/templates/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/templates/core.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/templates/jinja/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/templates/jinja/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/templates/jinja/environments.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/templates/jinja/extensions.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/templates/jinja/filters.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/templates/jinja/globals.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/test/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/test/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/test/client.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/urls/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/urls/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/urls/base.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/urls/conf.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/urls/converters.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/urls/exceptions.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/urls/resolvers.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/_os.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/cache.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/connection.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/crypto.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/datastructures.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/dateformat.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/dateparse.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/dates.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/deconstruct.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/decorators.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/deprecation.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/duration.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/email.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/encoding.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/functional.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/hashable.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/html.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/http.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/inspect.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/ipv6.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/itercompat.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/module_loading.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/regex_helper.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/safestring.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/text.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/timesince.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/timezone.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/utils/tree.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/validators.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/views/README.md +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/views/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/views/base.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/views/csrf.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/views/errors.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/views/exceptions.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/views/forms.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/views/objects.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/views/redirect.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/views/templates.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/plain/wsgi.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/tests/.bolt/assets_collected/assets.json +0 -0
- {plain-0.21.3 → plain-0.21.5}/tests/.gitignore +0 -0
- {plain-0.21.3 → plain-0.21.5}/tests/app/.gitignore +0 -0
- {plain-0.21.3 → plain-0.21.5}/tests/app/settings.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/tests/app/test/__init__.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/tests/app/test/default_settings.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/tests/app/urls.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/tests/conftest.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/tests/test_cli.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/tests/test_runtime.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/tests/test_wsgi.py +0 -0
- {plain-0.21.3 → plain-0.21.5}/uv.lock +0 -0
@@ -14,10 +14,11 @@ class InstalledPackagesGroup(click.Group):
|
|
14
14
|
"""
|
15
15
|
|
16
16
|
PLAIN_APPS_PREFIX = "plain."
|
17
|
+
APP_PREFIX = "app."
|
17
18
|
MODULE_NAME = "cli"
|
18
19
|
|
19
20
|
def list_commands(self, ctx):
|
20
|
-
|
21
|
+
command_names = []
|
21
22
|
|
22
23
|
# Get installed packages with a cli.py module
|
23
24
|
for app in packages.get_package_configs():
|
@@ -26,21 +27,37 @@ class InstalledPackagesGroup(click.Group):
|
|
26
27
|
|
27
28
|
cli_name = app.name
|
28
29
|
|
30
|
+
# Change plain.{pkg} to just {pkg}
|
29
31
|
if cli_name.startswith(self.PLAIN_APPS_PREFIX):
|
30
32
|
cli_name = cli_name[len(self.PLAIN_APPS_PREFIX) :]
|
31
33
|
|
32
|
-
|
34
|
+
# Change app.{pkg} to just {pkg}
|
35
|
+
if cli_name.startswith(self.APP_PREFIX):
|
36
|
+
cli_name = cli_name[len(self.APP_PREFIX) :]
|
33
37
|
|
34
|
-
|
38
|
+
if cli_name in command_names:
|
39
|
+
raise ValueError(
|
40
|
+
f"Duplicate command name {cli_name} found in installed packages."
|
41
|
+
)
|
42
|
+
|
43
|
+
command_names.append(cli_name)
|
44
|
+
|
45
|
+
return command_names
|
35
46
|
|
36
47
|
def get_command(self, ctx, name):
|
37
|
-
# Try it as plain.x and just x (we don't know ahead of time which it is
|
38
|
-
for n in [self.PLAIN_APPS_PREFIX + name, name]:
|
39
|
-
|
40
|
-
|
48
|
+
# Try it as plain.x, app.x, and just x (we don't know ahead of time which it is)
|
49
|
+
for n in [self.PLAIN_APPS_PREFIX + name, self.APP_PREFIX + name, name]:
|
50
|
+
try:
|
51
|
+
if not find_spec(n):
|
52
|
+
# plain.<name> doesn't exist at all
|
53
|
+
continue
|
54
|
+
except ModuleNotFoundError:
|
41
55
|
continue
|
42
56
|
|
43
|
-
|
57
|
+
try:
|
58
|
+
if not find_spec(f"{n}.{self.MODULE_NAME}"):
|
59
|
+
continue
|
60
|
+
except ModuleNotFoundError:
|
44
61
|
continue
|
45
62
|
|
46
63
|
cli = importlib.import_module(f"{n}.{self.MODULE_NAME}")
|
@@ -15,11 +15,11 @@ class PackageConfig:
|
|
15
15
|
migrations_module = "migrations"
|
16
16
|
|
17
17
|
def __init__(self, package_name, package_module):
|
18
|
-
# Full Python path to the application e.g. 'plain.
|
18
|
+
# Full Python path to the application e.g. 'plain.admin.admin'.
|
19
19
|
self.name = package_name
|
20
20
|
|
21
|
-
# Root module for the application e.g. <module 'plain.
|
22
|
-
# from '
|
21
|
+
# Root module for the application e.g. <module 'plain.admin.admin'
|
22
|
+
# from 'admin/__init__.py'>.
|
23
23
|
self.module = package_module
|
24
24
|
|
25
25
|
# Reference to the Packages registry that holds this PackageConfig. Set by the
|
@@ -43,8 +43,8 @@ class PackageConfig:
|
|
43
43
|
if not hasattr(self, "path"):
|
44
44
|
self.path = self._path_from_module(package_module)
|
45
45
|
|
46
|
-
# Module containing models e.g. <module 'plain.
|
47
|
-
# from '
|
46
|
+
# Module containing models e.g. <module 'plain.admin.models'
|
47
|
+
# from 'admin/models.py'>. Set by import_models().
|
48
48
|
# None if the application doesn't have a models module.
|
49
49
|
self.models_module = None
|
50
50
|
|
@@ -242,7 +242,7 @@ class Packages:
|
|
242
242
|
"""
|
243
243
|
Check whether an application with this name exists in the registry.
|
244
244
|
|
245
|
-
package_name is the full name of the app e.g. 'plain.
|
245
|
+
package_name is the full name of the app e.g. 'plain.admin'.
|
246
246
|
"""
|
247
247
|
self.check_packages_ready()
|
248
248
|
return any(ac.name == package_name for ac in self.package_configs.values())
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|