csrd-utils 0.3.26__tar.gz → 0.3.27__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 (88) hide show
  1. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/PKG-INFO +1 -1
  2. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/pyproject.toml +1 -1
  3. csrd_utils-0.3.27/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/tests/unit/test_settings_contracts.py +73 -0
  4. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/.gitignore +0 -0
  5. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/README.md +0 -0
  6. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/__init__.py +0 -0
  7. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/__main__.py +0 -0
  8. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/audit.py +0 -0
  9. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/augmentor.py +0 -0
  10. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/cluster.py +0 -0
  11. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/doctor.py +0 -0
  12. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/caching/conftest.fragment.py +0 -0
  13. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/caching/docker-compose.fragment.yaml +0 -0
  14. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/caching/manifest.yaml +0 -0
  15. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/caching/requirements.fragment +0 -0
  16. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/caching/settings.fragment.py +0 -0
  17. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/caching/src/app/cache.py +0 -0
  18. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/caching/tests/test_cache.py +0 -0
  19. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/logging/conftest.fragment.py +0 -0
  20. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/logging/manifest.yaml +0 -0
  21. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/logging/requirements.fragment +0 -0
  22. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/logging/settings.fragment.py +0 -0
  23. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/logging/src/app/middleware/logging.py +0 -0
  24. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/logging/tests/test_logging_middleware.py +0 -0
  25. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/metrics/conftest.fragment.py +0 -0
  26. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/metrics/docker-compose.fragment.yaml +0 -0
  27. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/metrics/manifest.yaml +0 -0
  28. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/metrics/requirements.fragment +0 -0
  29. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/metrics/settings.fragment.py +0 -0
  30. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/metrics/src/app/middleware/metrics.py +0 -0
  31. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/metrics/tests/test_metrics_middleware.py +0 -0
  32. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/tracing/conftest.fragment.py +0 -0
  33. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/tracing/manifest.yaml +0 -0
  34. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/tracing/requirements.fragment +0 -0
  35. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/tracing/settings.fragment.py +0 -0
  36. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/tracing/src/app/middleware/tracing.py +0 -0
  37. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/tracing/tests/test_tracing_middleware.py +0 -0
  38. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/workers/conftest.fragment.py +0 -0
  39. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/workers/docker-compose.fragment.yaml +0 -0
  40. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/workers/manifest.yaml +0 -0
  41. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/workers/requirements.fragment +0 -0
  42. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/workers/settings.fragment.py +0 -0
  43. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/workers/src/app/workers/__init__.py +0 -0
  44. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/workers/src/app/workers/celery_app.py +0 -0
  45. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/workers/src/app/workers/tasks.py +0 -0
  46. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/features/workers/tests/test_workers.py +0 -0
  47. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/fragments.py +0 -0
  48. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/generator.py +0 -0
  49. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/resources.py +0 -0
  50. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/README.md +0 -0
  51. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/cookiecutter.json +0 -0
  52. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/hooks/post_gen_project.py +0 -0
  53. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/.dockerignore +0 -0
  54. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/.env.example +0 -0
  55. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/.gitignore +0 -0
  56. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/Dockerfile +0 -0
  57. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/README.md +0 -0
  58. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/docker-compose.yml +0 -0
  59. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/pyproject.toml +0 -0
  60. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/requirements.txt +0 -0
  61. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/__init__.py +0 -0
  62. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/cache.py +0 -0
  63. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/delegates/__init__.py +0 -0
  64. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/delegates/upstreams.py +0 -0
  65. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/dependencies/__init__.py +0 -0
  66. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/dependencies/delegates.py +0 -0
  67. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/dependencies/item_repository.py +0 -0
  68. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/dependencies/worker_broker.py +0 -0
  69. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/middleware/__init__.py +0 -0
  70. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/middleware/logging.py +0 -0
  71. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/py.typed +0 -0
  72. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/repositories/__init__.py +0 -0
  73. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/repositories/item_repository.py +0 -0
  74. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/settings.py +0 -0
  75. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/views/__init__.py +0 -0
  76. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/views/unversioned/__init__.py +0 -0
  77. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/views/unversioned/health_view.py +0 -0
  78. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/views/unversioned/items_view.py +0 -0
  79. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/workers/__init__.py +0 -0
  80. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/src/app/workers/tasks.py +0 -0
  81. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/tests/__init__.py +0 -0
  82. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/tests/acceptance/test_logging_middleware.py +0 -0
  83. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/tests/conftest.py +0 -0
  84. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/tests/test_items.py +0 -0
  85. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/tests/unit/test_cache.py +0 -0
  86. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/tests/unit/test_database_settings.py +0 -0
  87. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/tests/unit/test_delegates.py +0 -0
  88. {csrd_utils-0.3.26 → csrd_utils-0.3.27}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/tests/unit/test_worker_broker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: csrd-utils
3
- Version: 0.3.26
3
+ Version: 0.3.27
4
4
  Summary: CLI utilities for csrd service generation and feature augmentation
5
5
  Project-URL: Repository, https://github.com/csrd-api/fastapi-common
6
6
  Project-URL: Documentation, https://github.com/csrd-api/fastapi-common/tree/main/packages/utils
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "csrd-utils"
3
- version = "0.3.26"
3
+ version = "0.3.27"
4
4
  description = "CLI utilities for csrd service generation and feature augmentation"
5
5
  license = { text = "MIT" }
6
6
  requires-python = ">=3.12"
@@ -0,0 +1,73 @@
1
+ """Unit tests for settings validator branches and package exports."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import importlib
6
+ from types import SimpleNamespace
7
+
8
+ import pytest
9
+
10
+ from app.settings import Settings
11
+
12
+
13
+ def test_validate_db_credentials_returns_self_without_database() -> None:
14
+ candidate = SimpleNamespace(has_database=False)
15
+ assert Settings.validate_db_credentials(candidate) is candidate
16
+
17
+
18
+ def test_validate_db_credentials_returns_self_for_sqlite() -> None:
19
+ candidate = SimpleNamespace(has_database=True, db_kind="sqlite")
20
+ assert Settings.validate_db_credentials(candidate) is candidate
21
+
22
+
23
+ def test_validate_db_credentials_skips_non_production_when_not_enforced() -> None:
24
+ candidate = SimpleNamespace(
25
+ has_database=True,
26
+ db_kind="postgres",
27
+ enforce_strong_db_credentials=False,
28
+ app_env="development",
29
+ )
30
+ assert Settings.validate_db_credentials(candidate) is candidate
31
+
32
+
33
+ @pytest.mark.parametrize(
34
+ ("field", "value", "expected"),
35
+ [
36
+ ("db_user", "service_user", "DB_USER"),
37
+ ("db_password", "change_me", "DB_PASSWORD"),
38
+ ("db_name", "service_db", "DB_NAME"),
39
+ ],
40
+ )
41
+ def test_validate_db_credentials_rejects_weak_defaults(
42
+ field: str,
43
+ value: str,
44
+ expected: str,
45
+ ) -> None:
46
+ candidate = SimpleNamespace(
47
+ has_database=True,
48
+ db_kind="postgres",
49
+ enforce_strong_db_credentials=True,
50
+ app_env="production",
51
+ db_user="app_user",
52
+ db_password="StrongPass123!",
53
+ db_name="inventory_db",
54
+ )
55
+ setattr(candidate, field, value)
56
+
57
+ with pytest.raises(ValueError, match=expected):
58
+ Settings.validate_db_credentials(candidate)
59
+
60
+
61
+ def test_app_package_init_modules_expose_tuple_all() -> None:
62
+ for module_name in [
63
+ "app.delegates",
64
+ "app.dependencies",
65
+ "app.middleware",
66
+ "app.repositories",
67
+ "app.workers",
68
+ ]:
69
+ module = importlib.import_module(module_name)
70
+ exports = getattr(module, "__all__", ())
71
+ assert isinstance(exports, tuple)
72
+ for exported_name in exports:
73
+ assert hasattr(module, exported_name)
File without changes
File without changes