csrd-utils 0.3.26__tar.gz → 0.3.28__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.28}/PKG-INFO +1 -1
  2. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/pyproject.toml +1 -1
  3. csrd_utils-0.3.28/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/tests/unit/test_settings_contracts.py +86 -0
  4. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/.gitignore +0 -0
  5. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/README.md +0 -0
  6. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/__init__.py +0 -0
  7. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/__main__.py +0 -0
  8. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/audit.py +0 -0
  9. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/augmentor.py +0 -0
  10. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/cluster.py +0 -0
  11. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/doctor.py +0 -0
  12. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/caching/conftest.fragment.py +0 -0
  13. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/caching/docker-compose.fragment.yaml +0 -0
  14. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/caching/manifest.yaml +0 -0
  15. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/caching/requirements.fragment +0 -0
  16. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/caching/settings.fragment.py +0 -0
  17. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/caching/src/app/cache.py +0 -0
  18. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/caching/tests/test_cache.py +0 -0
  19. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/logging/conftest.fragment.py +0 -0
  20. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/logging/manifest.yaml +0 -0
  21. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/logging/requirements.fragment +0 -0
  22. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/logging/settings.fragment.py +0 -0
  23. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/logging/src/app/middleware/logging.py +0 -0
  24. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/logging/tests/test_logging_middleware.py +0 -0
  25. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/metrics/conftest.fragment.py +0 -0
  26. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/metrics/docker-compose.fragment.yaml +0 -0
  27. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/metrics/manifest.yaml +0 -0
  28. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/metrics/requirements.fragment +0 -0
  29. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/metrics/settings.fragment.py +0 -0
  30. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/metrics/src/app/middleware/metrics.py +0 -0
  31. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/metrics/tests/test_metrics_middleware.py +0 -0
  32. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/tracing/conftest.fragment.py +0 -0
  33. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/tracing/manifest.yaml +0 -0
  34. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/tracing/requirements.fragment +0 -0
  35. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/tracing/settings.fragment.py +0 -0
  36. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/tracing/src/app/middleware/tracing.py +0 -0
  37. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/tracing/tests/test_tracing_middleware.py +0 -0
  38. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/workers/conftest.fragment.py +0 -0
  39. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/workers/docker-compose.fragment.yaml +0 -0
  40. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/workers/manifest.yaml +0 -0
  41. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/workers/requirements.fragment +0 -0
  42. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/workers/settings.fragment.py +0 -0
  43. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/workers/src/app/workers/__init__.py +0 -0
  44. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/workers/src/app/workers/celery_app.py +0 -0
  45. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/workers/src/app/workers/tasks.py +0 -0
  46. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/features/workers/tests/test_workers.py +0 -0
  47. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/fragments.py +0 -0
  48. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/generator.py +0 -0
  49. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/resources.py +0 -0
  50. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/templates/cookiecutter-service/README.md +0 -0
  51. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/templates/cookiecutter-service/cookiecutter.json +0 -0
  52. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/templates/cookiecutter-service/hooks/post_gen_project.py +0 -0
  53. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/.dockerignore +0 -0
  54. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/.env.example +0 -0
  55. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/.gitignore +0 -0
  56. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/Dockerfile +0 -0
  57. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/README.md +0 -0
  58. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/docker-compose.yml +0 -0
  59. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/pyproject.toml +0 -0
  60. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/requirements.txt +0 -0
  61. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/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.28}/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.28}/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.28}/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.28}/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.28}/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.28}/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.28}/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.28}/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.28}/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.28}/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.28}/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.28}/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.28}/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.28}/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.28}/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.28}/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.28}/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.28}/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.28}/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.28}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/tests/__init__.py +0 -0
  82. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/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.28}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}}/tests/conftest.py +0 -0
  84. {csrd_utils-0.3.26 → csrd_utils-0.3.28}/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.28}/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.28}/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.28}/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.28}/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.28
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.28"
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,86 @@
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
+ def test_validate_db_credentials_accepts_strong_values_in_production() -> None:
34
+ candidate = SimpleNamespace(
35
+ has_database=True,
36
+ db_kind="postgres",
37
+ enforce_strong_db_credentials=True,
38
+ app_env="production",
39
+ db_user="inventory_user",
40
+ db_password="StrongPass123!",
41
+ db_name="inventory_db",
42
+ )
43
+ assert Settings.validate_db_credentials(candidate) is candidate
44
+
45
+
46
+ @pytest.mark.parametrize(
47
+ ("field", "value", "expected"),
48
+ [
49
+ ("db_user", "service_user", "DB_USER"),
50
+ ("db_password", "change_me", "DB_PASSWORD"),
51
+ ("db_name", "service_db", "DB_NAME"),
52
+ ],
53
+ )
54
+ def test_validate_db_credentials_rejects_weak_defaults(
55
+ field: str,
56
+ value: str,
57
+ expected: str,
58
+ ) -> None:
59
+ candidate = SimpleNamespace(
60
+ has_database=True,
61
+ db_kind="postgres",
62
+ enforce_strong_db_credentials=True,
63
+ app_env="production",
64
+ db_user="app_user",
65
+ db_password="StrongPass123!",
66
+ db_name="inventory_db",
67
+ )
68
+ setattr(candidate, field, value)
69
+
70
+ with pytest.raises(ValueError, match=expected):
71
+ Settings.validate_db_credentials(candidate)
72
+
73
+
74
+ def test_app_package_init_modules_expose_tuple_all() -> None:
75
+ for module_name in [
76
+ "app.delegates",
77
+ "app.dependencies",
78
+ "app.middleware",
79
+ "app.repositories",
80
+ "app.workers",
81
+ ]:
82
+ module = importlib.import_module(module_name)
83
+ exports = getattr(module, "__all__", ())
84
+ assert isinstance(exports, tuple)
85
+ for exported_name in exports:
86
+ assert hasattr(module, exported_name)
File without changes
File without changes