csrd-utils 0.3.37__tar.gz → 0.3.39__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.37 → csrd_utils-0.3.39}/PKG-INFO +1 -1
  2. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/pyproject.toml +1 -1
  3. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/augmentor.py +15 -2
  4. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/doctor.py +24 -12
  5. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/generator.py +35 -3
  6. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/templates/cookiecutter-service/hooks/post_gen_project.py +12 -12
  7. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}}/Dockerfile +1 -1
  8. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}}/README.md +1 -1
  9. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/.gitignore +0 -0
  10. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/README.md +0 -0
  11. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/__init__.py +0 -0
  12. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/__main__.py +0 -0
  13. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/audit.py +0 -0
  14. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/cluster.py +0 -0
  15. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/caching/conftest.fragment.py +0 -0
  16. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/caching/docker-compose.fragment.yaml +0 -0
  17. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/caching/manifest.yaml +0 -0
  18. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/caching/requirements.fragment +0 -0
  19. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/caching/settings.fragment.py +0 -0
  20. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/caching/src/app/cache.py +0 -0
  21. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/caching/tests/test_cache.py +0 -0
  22. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/logging/conftest.fragment.py +0 -0
  23. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/logging/manifest.yaml +0 -0
  24. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/logging/requirements.fragment +0 -0
  25. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/logging/settings.fragment.py +0 -0
  26. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/logging/src/app/middleware/logging.py +0 -0
  27. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/logging/tests/test_logging_middleware.py +0 -0
  28. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/metrics/conftest.fragment.py +0 -0
  29. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/metrics/docker-compose.fragment.yaml +0 -0
  30. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/metrics/manifest.yaml +0 -0
  31. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/metrics/requirements.fragment +0 -0
  32. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/metrics/settings.fragment.py +0 -0
  33. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/metrics/src/app/middleware/metrics.py +0 -0
  34. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/metrics/tests/test_metrics_middleware.py +0 -0
  35. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/tracing/conftest.fragment.py +0 -0
  36. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/tracing/manifest.yaml +0 -0
  37. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/tracing/requirements.fragment +0 -0
  38. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/tracing/settings.fragment.py +0 -0
  39. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/tracing/src/app/middleware/tracing.py +0 -0
  40. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/tracing/tests/test_tracing_middleware.py +0 -0
  41. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/workers/conftest.fragment.py +0 -0
  42. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/workers/docker-compose.fragment.yaml +0 -0
  43. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/workers/manifest.yaml +0 -0
  44. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/workers/requirements.fragment +0 -0
  45. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/workers/settings.fragment.py +0 -0
  46. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/workers/src/app/workers/__init__.py +0 -0
  47. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/workers/src/app/workers/celery_app.py +0 -0
  48. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/workers/src/app/workers/tasks.py +0 -0
  49. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/features/workers/tests/test_workers.py +0 -0
  50. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/fragments.py +0 -0
  51. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/resources.py +0 -0
  52. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/templates/cookiecutter-service/README.md +0 -0
  53. {csrd_utils-0.3.37 → csrd_utils-0.3.39}/src/csrd_utils/templates/cookiecutter-service/cookiecutter.json +0 -0
  54. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}}/.cookiecutterignore +0 -0
  55. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}}/.dockerignore +0 -0
  56. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
  57. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/cache.py +0 -0
  58. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/delegates/__init__.py +0 -0
  59. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/delegates/upstreams.py +0 -0
  60. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -0
  61. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/dependencies/delegates.py +0 -0
  62. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/dependencies/item_repository.py +0 -0
  63. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/dependencies/worker_broker.py +0 -0
  64. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}}/docker-compose.yml +0 -0
  65. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/middleware/__init__.py +0 -0
  66. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/middleware/logging.py +0 -0
  67. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/py.typed +0 -0
  68. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}}/pyproject.toml +0 -0
  69. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
  70. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/repositories/item_repository.py +0 -0
  71. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}}/requirements.txt +0 -0
  72. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/settings.py +0 -0
  73. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}}/tests/__init__.py +0 -0
  74. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}}/tests/acceptance/test_logging_middleware.py +0 -0
  75. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}}/tests/conftest.py +0 -0
  76. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}}/tests/test_items.py +0 -0
  77. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}}/tests/unit/test_cache.py +0 -0
  78. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}}/tests/unit/test_database_settings.py +0 -0
  79. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}}/tests/unit/test_delegates.py +0 -0
  80. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}}/tests/unit/test_settings_contracts.py +0 -0
  81. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}}/tests/unit/test_worker_broker.py +0 -0
  82. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
  83. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
  84. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
  85. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/views/unversioned/items_view.py +0 -0
  86. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/src/csrd_utils/templates/cookiecutter-service}/{{cookiecutter.__service_name_snake}}/workers/__init__.py +0 -0
  87. {csrd_utils-0.3.37/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.service_name}} → csrd_utils-0.3.39/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.37
3
+ Version: 0.3.39
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.37"
3
+ version = "0.3.39"
4
4
  description = "CLI utilities for csrd service generation and feature augmentation"
5
5
  license = { text = "MIT" }
6
6
  requires-python = ">=3.12"
@@ -39,14 +39,27 @@ class ServiceAugmentor:
39
39
 
40
40
  @property
41
41
  def _pkg_dir(self) -> Path:
42
- """Return the service package directory (flat layout: <service_root>/<pkg>)."""
42
+ """Return the service package directory src/ layout first, then flat."""
43
+ src_dir = self.service_root / "src"
44
+ if src_dir.is_dir():
45
+ candidate = next(
46
+ (
47
+ p
48
+ for p in src_dir.iterdir()
49
+ if p.is_dir() and not p.name.startswith(".") and (p / "__init__.py").is_file()
50
+ ),
51
+ None,
52
+ )
53
+ if candidate is not None:
54
+ return candidate
55
+ # Flat layout fallback
43
56
  candidate = next(
44
57
  (
45
58
  p
46
59
  for p in self.service_root.iterdir()
47
60
  if p.is_dir()
48
61
  and not p.name.startswith(".")
49
- and p.name != "tests"
62
+ and p.name not in {"tests", "src"}
50
63
  and (p / "__init__.py").is_file()
51
64
  ),
52
65
  None,
@@ -37,18 +37,30 @@ def run_doctor(service_root: Path) -> DoctorReport:
37
37
  if not any(path.is_file() for path in compose_candidates):
38
38
  errors.append("Missing required file: docker-compose.yml")
39
39
 
40
- # Find the service package dir (flat layout: <service_root>/<pkg>/__init__.py)
41
- pkg_dir = next(
42
- (
43
- p
44
- for p in root.iterdir()
45
- if p.is_dir()
46
- and not p.name.startswith(".")
47
- and p.name not in {"tests"}
48
- and (p / "__init__.py").is_file()
49
- ),
50
- None,
51
- )
40
+ # Find the service package dir — check src/ layout first, then flat layout
41
+ src_dir = root / "src"
42
+ pkg_dir = None
43
+ if src_dir.is_dir():
44
+ pkg_dir = next(
45
+ (
46
+ p
47
+ for p in src_dir.iterdir()
48
+ if p.is_dir() and not p.name.startswith(".") and (p / "__init__.py").is_file()
49
+ ),
50
+ None,
51
+ )
52
+ if pkg_dir is None:
53
+ pkg_dir = next(
54
+ (
55
+ p
56
+ for p in root.iterdir()
57
+ if p.is_dir()
58
+ and not p.name.startswith(".")
59
+ and p.name not in {"tests", "src"}
60
+ and (p / "__init__.py").is_file()
61
+ ),
62
+ None,
63
+ )
52
64
 
53
65
  marker_files: dict[str, str] = {}
54
66
  if pkg_dir is not None:
@@ -66,8 +66,9 @@ def generate_service(
66
66
  ) -> Path:
67
67
  """Generate a service from the bundled cookiecutter-service template."""
68
68
  output_root = output_dir.resolve()
69
- output_root.mkdir(parents=True, exist_ok=True)
70
- target = output_root / name
69
+ src_dir = output_root / "src"
70
+ src_dir.mkdir(parents=True, exist_ok=True)
71
+ target = src_dir / name.replace("-", "_")
71
72
 
72
73
  if target.exists() and any(target.iterdir()) and not overwrite_if_exists:
73
74
  raise FileExistsError(
@@ -104,7 +105,7 @@ def generate_service(
104
105
  str(template),
105
106
  no_input=True,
106
107
  extra_context=context,
107
- output_dir=str(output_root),
108
+ output_dir=str(src_dir),
108
109
  overwrite_if_exists=overwrite_if_exists,
109
110
  )
110
111
  finally:
@@ -118,4 +119,35 @@ def generate_service(
118
119
  for pycache_dir in generated_path.rglob("__pycache__"):
119
120
  shutil.rmtree(pycache_dir, ignore_errors=True)
120
121
 
122
+ # Move docker files to workspace root and update Dockerfile
123
+ _move_docker_files_to_workspace_root(generated_path, output_root, name)
124
+
121
125
  return generated_path
126
+
127
+
128
+ def _move_docker_files_to_workspace_root(
129
+ service_path: Path, workspace_root: Path, service_name: str
130
+ ) -> None:
131
+ """Move docker-compose.yml and Dockerfile to workspace root, updating paths in Dockerfile."""
132
+ service_name_snake = service_name.replace("-", "_")
133
+
134
+ # Move docker-compose.yml to workspace root (create if doesn't exist)
135
+ docker_compose_src = service_path / "docker-compose.yml"
136
+ docker_compose_dst = workspace_root / "docker-compose.yml"
137
+ if docker_compose_src.exists():
138
+ if not docker_compose_dst.exists():
139
+ shutil.copy2(docker_compose_src, docker_compose_dst)
140
+ docker_compose_src.unlink()
141
+
142
+ # Move Dockerfile to workspace root as Dockerfile.{service_name}
143
+ dockerfile_src = service_path / "Dockerfile"
144
+ dockerfile_dst = workspace_root / f"Dockerfile.{service_name}"
145
+ if dockerfile_src.exists():
146
+ # Read and update the Dockerfile to account for workspace root context
147
+ dockerfile_content = dockerfile_src.read_text()
148
+ # Update COPY . to COPY src/{service_name}/
149
+ dockerfile_content = dockerfile_content.replace(
150
+ "COPY . /app", f"COPY src/{service_name_snake} /app"
151
+ )
152
+ dockerfile_dst.write_text(dockerfile_content)
153
+ dockerfile_src.unlink()
@@ -31,32 +31,32 @@ def _prune_disabled_files() -> None:
31
31
  path.rmdir()
32
32
 
33
33
  if not HAS_DATABASE:
34
- _unlink(f"{PKG}/dependencies/item_repository.py")
35
- _unlink(f"{PKG}/repositories/item_repository.py")
34
+ _unlink("dependencies/item_repository.py")
35
+ _unlink("repositories/item_repository.py")
36
36
  _unlink("tests/unit/test_database_settings.py")
37
37
 
38
38
  if not HAS_DELEGATES:
39
- _unlink(f"{PKG}/dependencies/delegates.py")
40
- _unlink(f"{PKG}/delegates/upstreams.py")
39
+ _unlink("dependencies/delegates.py")
40
+ _unlink("delegates/upstreams.py")
41
41
  _unlink("tests/unit/test_delegates.py")
42
42
 
43
43
  if not HAS_WORKERS:
44
- _unlink(f"{PKG}/dependencies/worker_broker.py")
45
- _unlink(f"{PKG}/workers/tasks.py")
44
+ _unlink("dependencies/worker_broker.py")
45
+ _unlink("workers/tasks.py")
46
46
  _unlink("tests/unit/test_worker_broker.py")
47
47
 
48
48
  if not HAS_CACHING:
49
- _unlink(f"{PKG}/cache.py")
49
+ _unlink("cache.py")
50
50
  _unlink("tests/unit/test_cache.py")
51
51
 
52
52
  if not HAS_STRUCTURED_LOGGING:
53
- _unlink(f"{PKG}/middleware/logging.py")
53
+ _unlink("middleware/logging.py")
54
54
  _unlink("tests/acceptance/test_logging_middleware.py")
55
55
 
56
- _rmdir_if_empty(f"{PKG}/repositories")
57
- _rmdir_if_empty(f"{PKG}/delegates")
58
- _rmdir_if_empty(f"{PKG}/workers")
59
- _rmdir_if_empty(f"{PKG}/middleware")
56
+ _rmdir_if_empty("repositories")
57
+ _rmdir_if_empty("delegates")
58
+ _rmdir_if_empty("workers")
59
+ _rmdir_if_empty("middleware")
60
60
  _rmdir_if_empty("tests/unit")
61
61
  _rmdir_if_empty("tests/acceptance")
62
62
 
@@ -5,7 +5,7 @@ WORKDIR /app
5
5
  COPY requirements.txt /app/requirements.txt
6
6
  RUN pip install --no-cache-dir -r /app/requirements.txt
7
7
 
8
- COPY {{cookiecutter.__service_name_snake}} /app/{{cookiecutter.__service_name_snake}}
8
+ COPY . /app
9
9
 
10
10
  ENV PORT={{ cookiecutter.port }}
11
11
 
@@ -24,7 +24,7 @@
24
24
  ## Run locally
25
25
 
26
26
  ```bash
27
- uvicorn {{cookiecutter.__service_name_snake}}:build_app --factory --reload --port {{ cookiecutter.port }}
27
+ PYTHONPATH=src uvicorn {{cookiecutter.__service_name_snake}}:build_app --factory --reload --port {{ cookiecutter.port }}
28
28
  ```
29
29
 
30
30
  ## Run with compose
File without changes
File without changes