simple-module-settings 0.0.34__tar.gz → 0.0.35__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.
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/PKG-INFO +4 -4
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/package.json +2 -2
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/pyproject.toml +4 -4
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/endpoints/views.py +1 -1
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/Browse.tsx +1 -1
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/Create.tsx +1 -1
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/Edit.tsx +1 -1
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/ModulesEdit.tsx +1 -1
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/StoreTable.tsx +8 -1
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_cli_import.py +18 -8
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/.gitignore +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/LICENSE +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/README.md +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/__init__.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/_field_meta.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/_module_settings.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/_module_settings_props.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/_row_masking.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/_secrets.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/browse_query.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/cli.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/constants.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/contracts/__init__.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/contracts/accessor.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/contracts/events.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/contracts/registry.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/contracts/schemas.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/deps.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/endpoints/__init__.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/endpoints/api.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/endpoints/module_api.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/env_vars.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/hydrate.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/known_keys.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/locales/en.json +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/models.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/module.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/module_registry.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/FieldInput.tsx +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/FieldSource.tsx +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/KeyField.tsx +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/ModuleFieldRow.tsx +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/ModuleForm.tsx +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/ResolvedValue.tsx +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/ScopeTabs.tsx +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/StoreCards.tsx +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/TestConnectionButton.tsx +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/ValueInput.tsx +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/last-test.ts +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/routes.ts +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/types.ts +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/py.typed +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/registration.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/reload.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/service.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/services.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/settings.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/store.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_concurrent_overrides.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_hydrate.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_known_keys_meta.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_module_api.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_module_registry.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_module_settings.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_module_settings_render.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_module_settings_serialize.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_registration.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_reload.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_accessor.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_api.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_events.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_field_sources.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_module.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_schemas.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_secret_masking.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_secret_urls.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_service.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_view_authz.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_store.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_store_filters.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_store_secret_masking.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_testable_checks.py +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests-js/ModuleForm.test.tsx +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests-js/ScopeTabs.test.tsx +0 -0
- {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tsconfig.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: simple_module_settings
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.35
|
|
4
4
|
Summary: Runtime settings UI — modules plug their own settings panels into a shared admin view
|
|
5
5
|
Project-URL: Homepage, https://github.com/antosubash/simple_module_python
|
|
6
6
|
Project-URL: Repository, https://github.com/antosubash/simple_module_python
|
|
@@ -21,9 +21,9 @@ Classifier: Topic :: Internet :: WWW/HTTP
|
|
|
21
21
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
22
22
|
Classifier: Typing :: Typed
|
|
23
23
|
Requires-Python: >=3.12
|
|
24
|
-
Requires-Dist: simple-module-core==0.0.
|
|
25
|
-
Requires-Dist: simple-module-db==0.0.
|
|
26
|
-
Requires-Dist: simple-module-hosting==0.0.
|
|
24
|
+
Requires-Dist: simple-module-core==0.0.35
|
|
25
|
+
Requires-Dist: simple-module-db==0.0.35
|
|
26
|
+
Requires-Dist: simple-module-hosting==0.0.35
|
|
27
27
|
Requires-Dist: typer>=0.12
|
|
28
28
|
Description-Content-Type: text/markdown
|
|
29
29
|
|
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
"peerDependencies": {
|
|
7
7
|
"react": "^19.0.0",
|
|
8
8
|
"react-dom": "^19.0.0",
|
|
9
|
-
"@inertiajs/react": "^
|
|
9
|
+
"@inertiajs/react": "^3.7.0",
|
|
10
10
|
"@simple-module-py/ui": "*"
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
13
|
"@simple-module-py/tsconfig": "*"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"sonner": "^2.0.
|
|
16
|
+
"sonner": "^2.0.8"
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "simple_module_settings"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.35"
|
|
4
4
|
description = "Runtime settings UI — modules plug their own settings panels into a shared admin view"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "MIT"
|
|
@@ -21,9 +21,9 @@ classifiers = [
|
|
|
21
21
|
"Typing :: Typed",
|
|
22
22
|
]
|
|
23
23
|
dependencies = [
|
|
24
|
-
"simple_module_core==0.0.
|
|
25
|
-
"simple_module_db==0.0.
|
|
26
|
-
"simple_module_hosting==0.0.
|
|
24
|
+
"simple_module_core==0.0.35",
|
|
25
|
+
"simple_module_db==0.0.35",
|
|
26
|
+
"simple_module_hosting==0.0.35",
|
|
27
27
|
"typer>=0.12",
|
|
28
28
|
]
|
|
29
29
|
|
|
@@ -13,11 +13,11 @@ import asyncio
|
|
|
13
13
|
import math
|
|
14
14
|
|
|
15
15
|
from fastapi import APIRouter, Depends, HTTPException, Request
|
|
16
|
-
from inertia import InertiaResponse
|
|
17
16
|
from pydantic import ValidationError
|
|
18
17
|
from simple_module_hosting.inertia_deps import InertiaDep
|
|
19
18
|
from simple_module_hosting.inertia_utils import redirect_back_with_errors, validation_errors_to_dict
|
|
20
19
|
from simple_module_hosting.permissions import RequiresPermission
|
|
20
|
+
from simple_module_inertia import InertiaResponse
|
|
21
21
|
from starlette.responses import RedirectResponse
|
|
22
22
|
|
|
23
23
|
from settings import browse_query, known_keys
|
|
@@ -85,7 +85,14 @@ export function StoreTable({ settings, onDelete }: Props) {
|
|
|
85
85
|
style={{ background: setting.value }}
|
|
86
86
|
/>
|
|
87
87
|
)}
|
|
88
|
-
|
|
88
|
+
{/* `title` carries the full text: the cell clips most of a
|
|
89
|
+
realistic value (a connection string measured 66% hidden at
|
|
90
|
+
1440px, not just on phones) and the row's only other route
|
|
91
|
+
to it is opening the editor. It repeats what is rendered,
|
|
92
|
+
so a masked secret stays masked here too. */}
|
|
93
|
+
<code title={setting.value} className="font-mono text-[13px] truncate">
|
|
94
|
+
{setting.value}
|
|
95
|
+
</code>
|
|
89
96
|
</div>
|
|
90
97
|
</TableCell>
|
|
91
98
|
<TableCell>
|
|
@@ -8,14 +8,24 @@ from __future__ import annotations
|
|
|
8
8
|
|
|
9
9
|
import pytest
|
|
10
10
|
|
|
11
|
+
#: Set by suite-wide fixtures rather than by any test here, and each one a real
|
|
12
|
+
#: settings field that ``import-from-env`` would rightly pick up.
|
|
13
|
+
_FIXTURE_ENV = ("SM_AUTH_PROVIDER", "SM_BG_TASKS_BROADCAST_INVALIDATIONS")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _drop_fixture_env(monkeypatch) -> None:
|
|
17
|
+
for name in _FIXTURE_ENV:
|
|
18
|
+
monkeypatch.delenv(name, raising=False)
|
|
19
|
+
|
|
11
20
|
|
|
12
21
|
@pytest.mark.asyncio
|
|
13
22
|
async def test_import_from_env_writes_overrides(db_session, monkeypatch, app) -> None:
|
|
14
|
-
# The suite-wide
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
|
|
23
|
+
# The suite-wide fixtures set SM_AUTH_PROVIDER (host's `auth_provider`) and
|
|
24
|
+
# SM_BG_TASKS_BROADCAST_INVALIDATIONS (to keep the test run off Redis).
|
|
25
|
+
# Both are real settings fields, so both would import and make the count
|
|
26
|
+
# below about the fixtures rather than about this test. Dropping them keeps
|
|
27
|
+
# the assertion exact as the settings surface grows.
|
|
28
|
+
_drop_fixture_env(monkeypatch)
|
|
19
29
|
monkeypatch.setenv("SM_USERS_ALLOW_SIGNUP", "true")
|
|
20
30
|
monkeypatch.setenv("SM_USERS_SMTP_PORT", "2525")
|
|
21
31
|
monkeypatch.setenv("SM_BG_TASKS_RETENTION_DAYS", "30")
|
|
@@ -37,9 +47,9 @@ async def test_import_from_env_writes_overrides(db_session, monkeypatch, app) ->
|
|
|
37
47
|
|
|
38
48
|
@pytest.mark.asyncio
|
|
39
49
|
async def test_import_ignores_unknown_env(db_session, monkeypatch, app) -> None:
|
|
40
|
-
# See the note in test_import_from_env_writes_overrides:
|
|
41
|
-
#
|
|
42
|
-
monkeypatch
|
|
50
|
+
# See the note in test_import_from_env_writes_overrides: both would be
|
|
51
|
+
# legitimate imports and neither is this test's subject.
|
|
52
|
+
_drop_fixture_env(monkeypatch)
|
|
43
53
|
monkeypatch.setenv("SM_USERS_DOES_NOT_EXIST", "value")
|
|
44
54
|
|
|
45
55
|
from settings.cli import import_from_env_impl
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/_module_settings.py
RENAMED
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/_module_settings_props.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/contracts/__init__.py
RENAMED
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/contracts/accessor.py
RENAMED
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/contracts/events.py
RENAMED
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/contracts/registry.py
RENAMED
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/contracts/schemas.py
RENAMED
|
File without changes
|
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/endpoints/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/endpoints/module_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_concurrent_overrides.py
RENAMED
|
File without changes
|
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_known_keys_meta.py
RENAMED
|
File without changes
|
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_module_registry.py
RENAMED
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_module_settings.py
RENAMED
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_module_settings_render.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_accessor.py
RENAMED
|
File without changes
|
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_events.py
RENAMED
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_field_sources.py
RENAMED
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_module.py
RENAMED
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_schemas.py
RENAMED
|
File without changes
|
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_secret_urls.py
RENAMED
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_service.py
RENAMED
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_view_authz.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_store_secret_masking.py
RENAMED
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_testable_checks.py
RENAMED
|
File without changes
|
{simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests-js/ModuleForm.test.tsx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|