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.
Files changed (85) hide show
  1. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/PKG-INFO +4 -4
  2. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/package.json +2 -2
  3. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/pyproject.toml +4 -4
  4. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/endpoints/views.py +1 -1
  5. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/Browse.tsx +1 -1
  6. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/Create.tsx +1 -1
  7. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/Edit.tsx +1 -1
  8. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/ModulesEdit.tsx +1 -1
  9. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/StoreTable.tsx +8 -1
  10. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_cli_import.py +18 -8
  11. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/.gitignore +0 -0
  12. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/LICENSE +0 -0
  13. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/README.md +0 -0
  14. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/__init__.py +0 -0
  15. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/_field_meta.py +0 -0
  16. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/_module_settings.py +0 -0
  17. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/_module_settings_props.py +0 -0
  18. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/_row_masking.py +0 -0
  19. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/_secrets.py +0 -0
  20. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/browse_query.py +0 -0
  21. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/cli.py +0 -0
  22. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/constants.py +0 -0
  23. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/contracts/__init__.py +0 -0
  24. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/contracts/accessor.py +0 -0
  25. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/contracts/events.py +0 -0
  26. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/contracts/registry.py +0 -0
  27. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/contracts/schemas.py +0 -0
  28. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/deps.py +0 -0
  29. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/endpoints/__init__.py +0 -0
  30. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/endpoints/api.py +0 -0
  31. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/endpoints/module_api.py +0 -0
  32. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/env_vars.py +0 -0
  33. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/hydrate.py +0 -0
  34. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/known_keys.py +0 -0
  35. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/locales/en.json +0 -0
  36. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/models.py +0 -0
  37. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/module.py +0 -0
  38. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/module_registry.py +0 -0
  39. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/FieldInput.tsx +0 -0
  40. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/FieldSource.tsx +0 -0
  41. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/KeyField.tsx +0 -0
  42. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/ModuleFieldRow.tsx +0 -0
  43. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/ModuleForm.tsx +0 -0
  44. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/ResolvedValue.tsx +0 -0
  45. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/ScopeTabs.tsx +0 -0
  46. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/StoreCards.tsx +0 -0
  47. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/TestConnectionButton.tsx +0 -0
  48. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/ValueInput.tsx +0 -0
  49. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/components/last-test.ts +0 -0
  50. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/routes.ts +0 -0
  51. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/pages/types.ts +0 -0
  52. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/py.typed +0 -0
  53. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/registration.py +0 -0
  54. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/reload.py +0 -0
  55. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/service.py +0 -0
  56. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/services.py +0 -0
  57. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/settings.py +0 -0
  58. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/settings/store.py +0 -0
  59. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_concurrent_overrides.py +0 -0
  60. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_hydrate.py +0 -0
  61. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_known_keys_meta.py +0 -0
  62. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_module_api.py +0 -0
  63. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_module_registry.py +0 -0
  64. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_module_settings.py +0 -0
  65. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_module_settings_render.py +0 -0
  66. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_module_settings_serialize.py +0 -0
  67. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_registration.py +0 -0
  68. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_reload.py +0 -0
  69. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_accessor.py +0 -0
  70. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_api.py +0 -0
  71. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_events.py +0 -0
  72. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_field_sources.py +0 -0
  73. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_module.py +0 -0
  74. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_schemas.py +0 -0
  75. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_secret_masking.py +0 -0
  76. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_secret_urls.py +0 -0
  77. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_service.py +0 -0
  78. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_settings_view_authz.py +0 -0
  79. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_store.py +0 -0
  80. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_store_filters.py +0 -0
  81. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_store_secret_masking.py +0 -0
  82. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests/test_testable_checks.py +0 -0
  83. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests-js/ModuleForm.test.tsx +0 -0
  84. {simple_module_settings-0.0.34 → simple_module_settings-0.0.35}/tests-js/ScopeTabs.test.tsx +0 -0
  85. {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.34
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.34
25
- Requires-Dist: simple-module-db==0.0.34
26
- Requires-Dist: simple-module-hosting==0.0.34
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": "^2.0.0",
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.7"
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.34"
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.34",
25
- "simple_module_db==0.0.34",
26
- "simple_module_hosting==0.0.34",
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
@@ -170,5 +170,5 @@ function Browse({ settings, pagination, counts, filters }: Props) {
170
170
  );
171
171
  }
172
172
 
173
- Browse.layout = (page: React.ReactNode) => <AdminLayout>{page}</AdminLayout>;
173
+ Browse.layout = [AdminLayout];
174
174
  export default Browse;
@@ -159,5 +159,5 @@ function Create({ known_keys }: Props) {
159
159
  );
160
160
  }
161
161
 
162
- Create.layout = (page: React.ReactNode) => <AdminLayout>{page}</AdminLayout>;
162
+ Create.layout = [AdminLayout];
163
163
  export default Create;
@@ -112,5 +112,5 @@ function Edit({ setting }: Props) {
112
112
  );
113
113
  }
114
114
 
115
- Edit.layout = (page: React.ReactNode) => <AdminLayout>{page}</AdminLayout>;
115
+ Edit.layout = [AdminLayout];
116
116
  export default Edit;
@@ -143,5 +143,5 @@ function ModulesEdit({ modules, testable = {} }: Props) {
143
143
  );
144
144
  }
145
145
 
146
- ModulesEdit.layout = (page: React.ReactNode) => <AdminLayout>{page}</AdminLayout>;
146
+ ModulesEdit.layout = [AdminLayout];
147
147
  export default ModulesEdit;
@@ -85,7 +85,14 @@ export function StoreTable({ settings, onDelete }: Props) {
85
85
  style={{ background: setting.value }}
86
86
  />
87
87
  )}
88
- <code className="font-mono text-[13px] truncate">{setting.value}</code>
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 `pinned_auth_provider` fixture sets SM_AUTH_PROVIDER, and
15
- # auth_provider is a host setting now, so it would import too and make the
16
- # count below about the fixture rather than about this test. Dropping it
17
- # keeps the assertion exact as host gains further fields.
18
- monkeypatch.delenv("SM_AUTH_PROVIDER", raising=False)
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: SM_AUTH_PROVIDER
41
- # is a real host setting now and would be a legitimate import.
42
- monkeypatch.delenv("SM_AUTH_PROVIDER", raising=False)
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