csrd-utils 0.3.40__tar.gz → 0.3.42__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 (87) hide show
  1. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/PKG-INFO +1 -1
  2. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/pyproject.toml +1 -1
  3. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/__main__.py +17 -4
  4. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/cluster.py +2 -2
  5. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/Dockerfile +1 -3
  6. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/.gitignore +0 -0
  7. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/README.md +0 -0
  8. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/__init__.py +0 -0
  9. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/audit.py +0 -0
  10. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/augmentor.py +0 -0
  11. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/doctor.py +0 -0
  12. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/caching/conftest.fragment.py +0 -0
  13. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/caching/docker-compose.fragment.yaml +0 -0
  14. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/caching/manifest.yaml +0 -0
  15. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/caching/requirements.fragment +0 -0
  16. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/caching/settings.fragment.py +0 -0
  17. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/caching/src/app/cache.py +0 -0
  18. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/caching/tests/test_cache.py +0 -0
  19. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/logging/conftest.fragment.py +0 -0
  20. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/logging/manifest.yaml +0 -0
  21. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/logging/requirements.fragment +0 -0
  22. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/logging/settings.fragment.py +0 -0
  23. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/logging/src/app/middleware/logging.py +0 -0
  24. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/logging/tests/test_logging_middleware.py +0 -0
  25. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/metrics/conftest.fragment.py +0 -0
  26. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/metrics/docker-compose.fragment.yaml +0 -0
  27. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/metrics/manifest.yaml +0 -0
  28. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/metrics/requirements.fragment +0 -0
  29. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/metrics/settings.fragment.py +0 -0
  30. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/metrics/src/app/middleware/metrics.py +0 -0
  31. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/metrics/tests/test_metrics_middleware.py +0 -0
  32. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/tracing/conftest.fragment.py +0 -0
  33. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/tracing/manifest.yaml +0 -0
  34. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/tracing/requirements.fragment +0 -0
  35. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/tracing/settings.fragment.py +0 -0
  36. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/tracing/src/app/middleware/tracing.py +0 -0
  37. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/tracing/tests/test_tracing_middleware.py +0 -0
  38. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/workers/conftest.fragment.py +0 -0
  39. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/workers/docker-compose.fragment.yaml +0 -0
  40. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/workers/manifest.yaml +0 -0
  41. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/workers/requirements.fragment +0 -0
  42. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/workers/settings.fragment.py +0 -0
  43. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/workers/src/app/workers/__init__.py +0 -0
  44. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/workers/src/app/workers/celery_app.py +0 -0
  45. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/workers/src/app/workers/tasks.py +0 -0
  46. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/features/workers/tests/test_workers.py +0 -0
  47. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/fragments.py +0 -0
  48. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/generator.py +0 -0
  49. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/resources.py +0 -0
  50. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/README.md +0 -0
  51. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/cookiecutter.json +0 -0
  52. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/hooks/post_gen_project.py +0 -0
  53. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/.cookiecutterignore +0 -0
  54. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
  55. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/README.md +0 -0
  56. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
  57. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/cache.py +0 -0
  58. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/delegates/__init__.py +0 -0
  59. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/delegates/upstreams.py +0 -0
  60. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -0
  61. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/delegates.py +0 -0
  62. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/item_repository.py +0 -0
  63. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/worker_broker.py +0 -0
  64. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/docker-compose.yml +0 -0
  65. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/middleware/__init__.py +0 -0
  66. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/middleware/logging.py +0 -0
  67. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/py.typed +0 -0
  68. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/pyproject.toml +0 -0
  69. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
  70. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/repositories/item_repository.py +0 -0
  71. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/requirements.txt +0 -0
  72. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/settings.py +0 -0
  73. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/__init__.py +0 -0
  74. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/acceptance/test_logging_middleware.py +0 -0
  75. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/conftest.py +0 -0
  76. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/test_items.py +0 -0
  77. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_cache.py +0 -0
  78. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_database_settings.py +0 -0
  79. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_delegates.py +0 -0
  80. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_settings_contracts.py +0 -0
  81. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_worker_broker.py +0 -0
  82. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
  83. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
  84. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
  85. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/unversioned/items_view.py +0 -0
  86. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/workers/__init__.py +0 -0
  87. {csrd_utils-0.3.40 → csrd_utils-0.3.42}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/workers/tasks.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: csrd-utils
3
- Version: 0.3.40
3
+ Version: 0.3.42
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.40"
3
+ version = "0.3.42"
4
4
  description = "CLI utilities for csrd service generation and feature augmentation"
5
5
  license = { text = "MIT" }
6
6
  requires-python = ">=3.12"
@@ -187,6 +187,14 @@ def _prompt_int(label: str, default: int) -> int:
187
187
  print("ERROR: Enter a valid integer")
188
188
 
189
189
 
190
+ def _normalize_service_name(name: str) -> str:
191
+ """Ensure service names consistently end with '-service'."""
192
+ normalized = name.strip()
193
+ if not normalized:
194
+ return normalized
195
+ return normalized if normalized.endswith("-service") else f"{normalized}-service"
196
+
197
+
190
198
  def _print_cancelled() -> None:
191
199
  # Avoid surfacing a traceback if a second Ctrl-C lands while printing.
192
200
  with suppress(KeyboardInterrupt):
@@ -204,9 +212,10 @@ def _collect_new_service_config(args: argparse.Namespace) -> GenerateServiceArgs
204
212
  if not interactive:
205
213
  has_database = args.database != "none"
206
214
  selected_database = "sqlite" if not has_database else args.database
215
+ normalized_name = _normalize_service_name(args.name)
207
216
  return GenerateServiceArgs(
208
217
  {
209
- "name": args.name,
218
+ "name": normalized_name,
210
219
  "output_dir": args.output,
211
220
  "description": args.description,
212
221
  "port": args.port,
@@ -227,8 +236,11 @@ def _collect_new_service_config(args: argparse.Namespace) -> GenerateServiceArgs
227
236
 
228
237
  print("Interactive mode: press Enter to accept defaults.")
229
238
 
230
- name = _prompt_text("Service name", args.name or "my-service")
231
- output_dir = Path(_prompt_text("Output directory", str(args.output)))
239
+ name = _normalize_service_name(_prompt_text("Service name", args.name or "my-service"))
240
+ if getattr(args, "output_locked", False):
241
+ output_dir = args.output
242
+ else:
243
+ output_dir = Path(_prompt_text("Output directory", str(args.output)))
232
244
  description = _prompt_text("Service description", args.description)
233
245
  port = _prompt_int("HTTP port", args.port)
234
246
  model_name = _prompt_text("Model name", args.model_name)
@@ -382,7 +394,7 @@ def _collect_new_workspace_config(args: argparse.Namespace) -> GenerateWorkspace
382
394
  else Path(_prompt_text("Output directory", str(args.output)))
383
395
  )
384
396
  generate = args.generate or _prompt_choice(
385
- "Generate in workspace now", ["none", "service", "cluster"], "none"
397
+ "Generate in workspace now", ["none", "service", "cluster"], "service"
386
398
  )
387
399
  return GenerateWorkspaceArgs(
388
400
  {
@@ -413,6 +425,7 @@ def _default_service_namespace(output_dir: Path) -> argparse.Namespace:
413
425
  return argparse.Namespace(
414
426
  interactive=True,
415
427
  name=None,
428
+ output_locked=True,
416
429
  output=output_dir,
417
430
  description="A microservice using the csrd library stack",
418
431
  port=8080,
@@ -319,8 +319,8 @@ def render_compose(spec: ClusterSpec) -> dict[str, Any]:
319
319
  app_service: dict[str, Any] = {
320
320
  "image": f"ghcr.io/csrd-api/{name}:latest",
321
321
  "build": {
322
- "context": f"./src/{name}",
323
- "dockerfile": "Dockerfile",
322
+ "context": ".",
323
+ "dockerfile": f"Dockerfile.{name}",
324
324
  },
325
325
  "ports": [f"{service['port']}:{service['port']}"],
326
326
  "environment": _service_environment(service, services),
@@ -2,10 +2,8 @@ FROM python:3.12-slim
2
2
 
3
3
  WORKDIR /app
4
4
 
5
- COPY requirements.txt /app/requirements.txt
6
- RUN pip install --no-cache-dir -r /app/requirements.txt
7
-
8
5
  COPY . /app
6
+ RUN pip install --no-cache-dir -r /app/requirements.txt
9
7
 
10
8
  ENV PORT={{ cookiecutter.port }}
11
9
 
File without changes
File without changes