celerity-sdk 0.2.0__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 (332) hide show
  1. celerity_sdk-0.2.0/.env.test +5 -0
  2. celerity_sdk-0.2.0/.githooks/commit-msg +35 -0
  3. celerity_sdk-0.2.0/.githooks/pre-commit +29 -0
  4. celerity_sdk-0.2.0/.github/dependabot.yml +23 -0
  5. celerity_sdk-0.2.0/.github/pull_request_template.md +21 -0
  6. celerity_sdk-0.2.0/.github/workflows/ci.yml +54 -0
  7. celerity_sdk-0.2.0/.github/workflows/codeql.yml +34 -0
  8. celerity_sdk-0.2.0/.github/workflows/release-please.yml +52 -0
  9. celerity_sdk-0.2.0/.github/workflows/security.yml +24 -0
  10. celerity_sdk-0.2.0/.gitignore +53 -0
  11. celerity_sdk-0.2.0/.python-version +1 -0
  12. celerity_sdk-0.2.0/.release-please-manifest.json +3 -0
  13. celerity_sdk-0.2.0/CHANGELOG.md +37 -0
  14. celerity_sdk-0.2.0/CONTRIBUTING.md +174 -0
  15. celerity_sdk-0.2.0/LICENSE +201 -0
  16. celerity_sdk-0.2.0/PKG-INFO +92 -0
  17. celerity_sdk-0.2.0/README.md +21 -0
  18. celerity_sdk-0.2.0/commitlint.config.js +49 -0
  19. celerity_sdk-0.2.0/docker-compose.yml +44 -0
  20. celerity_sdk-0.2.0/package.json +8 -0
  21. celerity_sdk-0.2.0/pyproject.toml +122 -0
  22. celerity_sdk-0.2.0/release-please-config.json +20 -0
  23. celerity_sdk-0.2.0/scripts/run-tests.sh +92 -0
  24. celerity_sdk-0.2.0/setup.cfg +3 -0
  25. celerity_sdk-0.2.0/sonar-project.properties +25 -0
  26. celerity_sdk-0.2.0/src/celerity/__init__.py +114 -0
  27. celerity_sdk-0.2.0/src/celerity/application.py +83 -0
  28. celerity_sdk-0.2.0/src/celerity/bootstrap/__init__.py +13 -0
  29. celerity_sdk-0.2.0/src/celerity/bootstrap/bootstrap.py +70 -0
  30. celerity_sdk-0.2.0/src/celerity/bootstrap/discovery.py +67 -0
  31. celerity_sdk-0.2.0/src/celerity/bootstrap/module_graph.py +158 -0
  32. celerity_sdk-0.2.0/src/celerity/bootstrap/runtime_entry.py +311 -0
  33. celerity_sdk-0.2.0/src/celerity/bootstrap/runtime_mapper.py +210 -0
  34. celerity_sdk-0.2.0/src/celerity/bootstrap/runtime_orchestrator.py +200 -0
  35. celerity_sdk-0.2.0/src/celerity/cli/__init__.py +0 -0
  36. celerity_sdk-0.2.0/src/celerity/cli/extract.py +97 -0
  37. celerity_sdk-0.2.0/src/celerity/cli/identity.py +89 -0
  38. celerity_sdk-0.2.0/src/celerity/cli/metadata_app.py +338 -0
  39. celerity_sdk-0.2.0/src/celerity/cli/serializer.py +460 -0
  40. celerity_sdk-0.2.0/src/celerity/cli/types.py +151 -0
  41. celerity_sdk-0.2.0/src/celerity/common/__init__.py +6 -0
  42. celerity_sdk-0.2.0/src/celerity/common/debug.py +146 -0
  43. celerity_sdk-0.2.0/src/celerity/common/path_utils.py +30 -0
  44. celerity_sdk-0.2.0/src/celerity/config/__init__.py +27 -0
  45. celerity_sdk-0.2.0/src/celerity/config/backends/__init__.py +1 -0
  46. celerity_sdk-0.2.0/src/celerity/config/backends/aws/__init__.py +1 -0
  47. celerity_sdk-0.2.0/src/celerity/config/backends/aws/lambda_extension.py +62 -0
  48. celerity_sdk-0.2.0/src/celerity/config/backends/aws/parameter_store.py +39 -0
  49. celerity_sdk-0.2.0/src/celerity/config/backends/aws/secrets_manager.py +39 -0
  50. celerity_sdk-0.2.0/src/celerity/config/backends/empty.py +16 -0
  51. celerity_sdk-0.2.0/src/celerity/config/backends/local.py +48 -0
  52. celerity_sdk-0.2.0/src/celerity/config/backends/types.py +21 -0
  53. celerity_sdk-0.2.0/src/celerity/config/layer.py +132 -0
  54. celerity_sdk-0.2.0/src/celerity/config/params.py +88 -0
  55. celerity_sdk-0.2.0/src/celerity/config/service.py +104 -0
  56. celerity_sdk-0.2.0/src/celerity/decorators/__init__.py +98 -0
  57. celerity_sdk-0.2.0/src/celerity/decorators/consumer.py +86 -0
  58. celerity_sdk-0.2.0/src/celerity/decorators/consumer_params.py +71 -0
  59. celerity_sdk-0.2.0/src/celerity/decorators/controller.py +46 -0
  60. celerity_sdk-0.2.0/src/celerity/decorators/guards.py +121 -0
  61. celerity_sdk-0.2.0/src/celerity/decorators/http.py +152 -0
  62. celerity_sdk-0.2.0/src/celerity/decorators/injectable.py +110 -0
  63. celerity_sdk-0.2.0/src/celerity/decorators/invoke.py +36 -0
  64. celerity_sdk-0.2.0/src/celerity/decorators/invoke_params.py +47 -0
  65. celerity_sdk-0.2.0/src/celerity/decorators/layer.py +73 -0
  66. celerity_sdk-0.2.0/src/celerity/decorators/metadata.py +62 -0
  67. celerity_sdk-0.2.0/src/celerity/decorators/module.py +74 -0
  68. celerity_sdk-0.2.0/src/celerity/decorators/params.py +200 -0
  69. celerity_sdk-0.2.0/src/celerity/decorators/resource.py +45 -0
  70. celerity_sdk-0.2.0/src/celerity/decorators/schedule.py +70 -0
  71. celerity_sdk-0.2.0/src/celerity/decorators/schedule_params.py +71 -0
  72. celerity_sdk-0.2.0/src/celerity/decorators/websocket.py +135 -0
  73. celerity_sdk-0.2.0/src/celerity/decorators/websocket_params.py +83 -0
  74. celerity_sdk-0.2.0/src/celerity/di/__init__.py +12 -0
  75. celerity_sdk-0.2.0/src/celerity/di/container.py +311 -0
  76. celerity_sdk-0.2.0/src/celerity/di/dependency_tokens.py +95 -0
  77. celerity_sdk-0.2.0/src/celerity/di/tokens.py +7 -0
  78. celerity_sdk-0.2.0/src/celerity/errors/__init__.py +35 -0
  79. celerity_sdk-0.2.0/src/celerity/errors/http_exception.py +83 -0
  80. celerity_sdk-0.2.0/src/celerity/functions/__init__.py +29 -0
  81. celerity_sdk-0.2.0/src/celerity/functions/consumer.py +60 -0
  82. celerity_sdk-0.2.0/src/celerity/functions/context.py +81 -0
  83. celerity_sdk-0.2.0/src/celerity/functions/custom.py +53 -0
  84. celerity_sdk-0.2.0/src/celerity/functions/guard.py +46 -0
  85. celerity_sdk-0.2.0/src/celerity/functions/http.py +80 -0
  86. celerity_sdk-0.2.0/src/celerity/functions/schedule.py +62 -0
  87. celerity_sdk-0.2.0/src/celerity/functions/websocket.py +56 -0
  88. celerity_sdk-0.2.0/src/celerity/handlers/__init__.py +5 -0
  89. celerity_sdk-0.2.0/src/celerity/handlers/consumer_pipeline.py +71 -0
  90. celerity_sdk-0.2.0/src/celerity/handlers/custom_pipeline.py +65 -0
  91. celerity_sdk-0.2.0/src/celerity/handlers/guard_pipeline.py +207 -0
  92. celerity_sdk-0.2.0/src/celerity/handlers/http_pipeline.py +123 -0
  93. celerity_sdk-0.2.0/src/celerity/handlers/module_resolver.py +52 -0
  94. celerity_sdk-0.2.0/src/celerity/handlers/param_extractor.py +258 -0
  95. celerity_sdk-0.2.0/src/celerity/handlers/registry.py +232 -0
  96. celerity_sdk-0.2.0/src/celerity/handlers/scanners/__init__.py +0 -0
  97. celerity_sdk-0.2.0/src/celerity/handlers/scanners/_utils.py +49 -0
  98. celerity_sdk-0.2.0/src/celerity/handlers/scanners/consumer.py +79 -0
  99. celerity_sdk-0.2.0/src/celerity/handlers/scanners/custom.py +74 -0
  100. celerity_sdk-0.2.0/src/celerity/handlers/scanners/http.py +155 -0
  101. celerity_sdk-0.2.0/src/celerity/handlers/scanners/schedule.py +78 -0
  102. celerity_sdk-0.2.0/src/celerity/handlers/scanners/websocket.py +71 -0
  103. celerity_sdk-0.2.0/src/celerity/handlers/schedule_pipeline.py +69 -0
  104. celerity_sdk-0.2.0/src/celerity/handlers/websocket_pipeline.py +53 -0
  105. celerity_sdk-0.2.0/src/celerity/layers/__init__.py +7 -0
  106. celerity_sdk-0.2.0/src/celerity/layers/dispose.py +26 -0
  107. celerity_sdk-0.2.0/src/celerity/layers/pipeline.py +80 -0
  108. celerity_sdk-0.2.0/src/celerity/layers/system.py +78 -0
  109. celerity_sdk-0.2.0/src/celerity/layers/validate.py +108 -0
  110. celerity_sdk-0.2.0/src/celerity/metadata/__init__.py +6 -0
  111. celerity_sdk-0.2.0/src/celerity/metadata/keys.py +77 -0
  112. celerity_sdk-0.2.0/src/celerity/metadata/store.py +48 -0
  113. celerity_sdk-0.2.0/src/celerity/py.typed +0 -0
  114. celerity_sdk-0.2.0/src/celerity/resources/__init__.py +0 -0
  115. celerity_sdk-0.2.0/src/celerity/resources/_common.py +104 -0
  116. celerity_sdk-0.2.0/src/celerity/resources/_tokens.py +80 -0
  117. celerity_sdk-0.2.0/src/celerity/resources/bucket/__init__.py +41 -0
  118. celerity_sdk-0.2.0/src/celerity/resources/bucket/errors.py +21 -0
  119. celerity_sdk-0.2.0/src/celerity/resources/bucket/factory.py +71 -0
  120. celerity_sdk-0.2.0/src/celerity/resources/bucket/layer.py +82 -0
  121. celerity_sdk-0.2.0/src/celerity/resources/bucket/params.py +65 -0
  122. celerity_sdk-0.2.0/src/celerity/resources/bucket/providers/__init__.py +0 -0
  123. celerity_sdk-0.2.0/src/celerity/resources/bucket/providers/s3/__init__.py +0 -0
  124. celerity_sdk-0.2.0/src/celerity/resources/bucket/providers/s3/client.py +360 -0
  125. celerity_sdk-0.2.0/src/celerity/resources/bucket/providers/s3/config.py +39 -0
  126. celerity_sdk-0.2.0/src/celerity/resources/bucket/providers/s3/listing.py +137 -0
  127. celerity_sdk-0.2.0/src/celerity/resources/bucket/providers/s3/types.py +18 -0
  128. celerity_sdk-0.2.0/src/celerity/resources/bucket/types.py +178 -0
  129. celerity_sdk-0.2.0/src/celerity/resources/cache/__init__.py +33 -0
  130. celerity_sdk-0.2.0/src/celerity/resources/cache/config.py +85 -0
  131. celerity_sdk-0.2.0/src/celerity/resources/cache/credentials.py +153 -0
  132. celerity_sdk-0.2.0/src/celerity/resources/cache/errors.py +14 -0
  133. celerity_sdk-0.2.0/src/celerity/resources/cache/factory.py +52 -0
  134. celerity_sdk-0.2.0/src/celerity/resources/cache/layer.py +96 -0
  135. celerity_sdk-0.2.0/src/celerity/resources/cache/params.py +65 -0
  136. celerity_sdk-0.2.0/src/celerity/resources/cache/providers/__init__.py +0 -0
  137. celerity_sdk-0.2.0/src/celerity/resources/cache/providers/redis/__init__.py +0 -0
  138. celerity_sdk-0.2.0/src/celerity/resources/cache/providers/redis/cache.py +651 -0
  139. celerity_sdk-0.2.0/src/celerity/resources/cache/providers/redis/client.py +138 -0
  140. celerity_sdk-0.2.0/src/celerity/resources/cache/providers/redis/cluster.py +105 -0
  141. celerity_sdk-0.2.0/src/celerity/resources/cache/providers/redis/iam/__init__.py +0 -0
  142. celerity_sdk-0.2.0/src/celerity/resources/cache/providers/redis/iam/elasticache_token.py +57 -0
  143. celerity_sdk-0.2.0/src/celerity/resources/cache/providers/redis/types.py +24 -0
  144. celerity_sdk-0.2.0/src/celerity/resources/cache/types.py +246 -0
  145. celerity_sdk-0.2.0/src/celerity/resources/datastore/__init__.py +61 -0
  146. celerity_sdk-0.2.0/src/celerity/resources/datastore/errors.py +29 -0
  147. celerity_sdk-0.2.0/src/celerity/resources/datastore/factory.py +100 -0
  148. celerity_sdk-0.2.0/src/celerity/resources/datastore/layer.py +84 -0
  149. celerity_sdk-0.2.0/src/celerity/resources/datastore/params.py +65 -0
  150. celerity_sdk-0.2.0/src/celerity/resources/datastore/providers/__init__.py +1 -0
  151. celerity_sdk-0.2.0/src/celerity/resources/datastore/providers/dynamodb/__init__.py +1 -0
  152. celerity_sdk-0.2.0/src/celerity/resources/datastore/providers/dynamodb/client.py +480 -0
  153. celerity_sdk-0.2.0/src/celerity/resources/datastore/providers/dynamodb/config.py +25 -0
  154. celerity_sdk-0.2.0/src/celerity/resources/datastore/providers/dynamodb/expressions.py +227 -0
  155. celerity_sdk-0.2.0/src/celerity/resources/datastore/providers/dynamodb/listing.py +96 -0
  156. celerity_sdk-0.2.0/src/celerity/resources/datastore/providers/dynamodb/marshall.py +27 -0
  157. celerity_sdk-0.2.0/src/celerity/resources/datastore/providers/dynamodb/types.py +17 -0
  158. celerity_sdk-0.2.0/src/celerity/resources/datastore/types.py +251 -0
  159. celerity_sdk-0.2.0/src/celerity/resources/queue/__init__.py +35 -0
  160. celerity_sdk-0.2.0/src/celerity/resources/queue/errors.py +22 -0
  161. celerity_sdk-0.2.0/src/celerity/resources/queue/factory.py +87 -0
  162. celerity_sdk-0.2.0/src/celerity/resources/queue/layer.py +84 -0
  163. celerity_sdk-0.2.0/src/celerity/resources/queue/params.py +65 -0
  164. celerity_sdk-0.2.0/src/celerity/resources/queue/providers/__init__.py +0 -0
  165. celerity_sdk-0.2.0/src/celerity/resources/queue/providers/redis/__init__.py +0 -0
  166. celerity_sdk-0.2.0/src/celerity/resources/queue/providers/redis/client.py +186 -0
  167. celerity_sdk-0.2.0/src/celerity/resources/queue/providers/redis/types.py +12 -0
  168. celerity_sdk-0.2.0/src/celerity/resources/queue/providers/sqs/__init__.py +0 -0
  169. celerity_sdk-0.2.0/src/celerity/resources/queue/providers/sqs/client.py +225 -0
  170. celerity_sdk-0.2.0/src/celerity/resources/queue/providers/sqs/config.py +25 -0
  171. celerity_sdk-0.2.0/src/celerity/resources/queue/providers/sqs/types.py +17 -0
  172. celerity_sdk-0.2.0/src/celerity/resources/queue/types.py +103 -0
  173. celerity_sdk-0.2.0/src/celerity/resources/sql_database/__init__.py +61 -0
  174. celerity_sdk-0.2.0/src/celerity/resources/sql_database/config.py +132 -0
  175. celerity_sdk-0.2.0/src/celerity/resources/sql_database/credentials.py +150 -0
  176. celerity_sdk-0.2.0/src/celerity/resources/sql_database/errors.py +21 -0
  177. celerity_sdk-0.2.0/src/celerity/resources/sql_database/factory.py +123 -0
  178. celerity_sdk-0.2.0/src/celerity/resources/sql_database/layer.py +89 -0
  179. celerity_sdk-0.2.0/src/celerity/resources/sql_database/params.py +160 -0
  180. celerity_sdk-0.2.0/src/celerity/resources/sql_database/providers/__init__.py +0 -0
  181. celerity_sdk-0.2.0/src/celerity/resources/sql_database/providers/rds/__init__.py +0 -0
  182. celerity_sdk-0.2.0/src/celerity/resources/sql_database/providers/rds/iam.py +71 -0
  183. celerity_sdk-0.2.0/src/celerity/resources/sql_database/types.py +85 -0
  184. celerity_sdk-0.2.0/src/celerity/resources/topic/__init__.py +35 -0
  185. celerity_sdk-0.2.0/src/celerity/resources/topic/errors.py +22 -0
  186. celerity_sdk-0.2.0/src/celerity/resources/topic/factory.py +86 -0
  187. celerity_sdk-0.2.0/src/celerity/resources/topic/layer.py +84 -0
  188. celerity_sdk-0.2.0/src/celerity/resources/topic/params.py +54 -0
  189. celerity_sdk-0.2.0/src/celerity/resources/topic/providers/__init__.py +0 -0
  190. celerity_sdk-0.2.0/src/celerity/resources/topic/providers/redis/__init__.py +0 -0
  191. celerity_sdk-0.2.0/src/celerity/resources/topic/providers/redis/client.py +185 -0
  192. celerity_sdk-0.2.0/src/celerity/resources/topic/providers/redis/types.py +12 -0
  193. celerity_sdk-0.2.0/src/celerity/resources/topic/providers/sns/__init__.py +0 -0
  194. celerity_sdk-0.2.0/src/celerity/resources/topic/providers/sns/client.py +225 -0
  195. celerity_sdk-0.2.0/src/celerity/resources/topic/providers/sns/config.py +25 -0
  196. celerity_sdk-0.2.0/src/celerity/resources/topic/providers/sns/types.py +17 -0
  197. celerity_sdk-0.2.0/src/celerity/resources/topic/types.py +102 -0
  198. celerity_sdk-0.2.0/src/celerity/serverless/__init__.py +0 -0
  199. celerity_sdk-0.2.0/src/celerity/serverless/aws/__init__.py +5 -0
  200. celerity_sdk-0.2.0/src/celerity/serverless/aws/adapter.py +313 -0
  201. celerity_sdk-0.2.0/src/celerity/serverless/aws/event_mapper.py +330 -0
  202. celerity_sdk-0.2.0/src/celerity/serverless/aws/websocket_sender.py +54 -0
  203. celerity_sdk-0.2.0/src/celerity/serverless/azure/__init__.py +0 -0
  204. celerity_sdk-0.2.0/src/celerity/serverless/gcp/__init__.py +0 -0
  205. celerity_sdk-0.2.0/src/celerity/telemetry/__init__.py +45 -0
  206. celerity_sdk-0.2.0/src/celerity/telemetry/context.py +29 -0
  207. celerity_sdk-0.2.0/src/celerity/telemetry/env.py +67 -0
  208. celerity_sdk-0.2.0/src/celerity/telemetry/helpers.py +22 -0
  209. celerity_sdk-0.2.0/src/celerity/telemetry/init.py +121 -0
  210. celerity_sdk-0.2.0/src/celerity/telemetry/instrumentations.py +79 -0
  211. celerity_sdk-0.2.0/src/celerity/telemetry/logger.py +122 -0
  212. celerity_sdk-0.2.0/src/celerity/telemetry/noop.py +48 -0
  213. celerity_sdk-0.2.0/src/celerity/telemetry/request_context.py +68 -0
  214. celerity_sdk-0.2.0/src/celerity/telemetry/telemetry_layer.py +195 -0
  215. celerity_sdk-0.2.0/src/celerity/telemetry/tracer.py +59 -0
  216. celerity_sdk-0.2.0/src/celerity/testing/__init__.py +17 -0
  217. celerity_sdk-0.2.0/src/celerity/testing/mocks.py +146 -0
  218. celerity_sdk-0.2.0/src/celerity/testing/test_app.py +278 -0
  219. celerity_sdk-0.2.0/src/celerity/types/__init__.py +106 -0
  220. celerity_sdk-0.2.0/src/celerity/types/common.py +36 -0
  221. celerity_sdk-0.2.0/src/celerity/types/consumer.py +98 -0
  222. celerity_sdk-0.2.0/src/celerity/types/container.py +56 -0
  223. celerity_sdk-0.2.0/src/celerity/types/context.py +81 -0
  224. celerity_sdk-0.2.0/src/celerity/types/guard.py +46 -0
  225. celerity_sdk-0.2.0/src/celerity/types/handler.py +108 -0
  226. celerity_sdk-0.2.0/src/celerity/types/http.py +40 -0
  227. celerity_sdk-0.2.0/src/celerity/types/layer.py +40 -0
  228. celerity_sdk-0.2.0/src/celerity/types/module.py +44 -0
  229. celerity_sdk-0.2.0/src/celerity/types/schedule.py +17 -0
  230. celerity_sdk-0.2.0/src/celerity/types/telemetry.py +74 -0
  231. celerity_sdk-0.2.0/src/celerity/types/websocket.py +72 -0
  232. celerity_sdk-0.2.0/tests/__init__.py +0 -0
  233. celerity_sdk-0.2.0/tests/conftest.py +1 -0
  234. celerity_sdk-0.2.0/tests/fixtures/sample_app/__init__.py +0 -0
  235. celerity_sdk-0.2.0/tests/integration/__init__.py +0 -0
  236. celerity_sdk-0.2.0/tests/integration/conftest.py +29 -0
  237. celerity_sdk-0.2.0/tests/integration/test_bucket_s3.py +322 -0
  238. celerity_sdk-0.2.0/tests/integration/test_cache_redis.py +275 -0
  239. celerity_sdk-0.2.0/tests/integration/test_config_aws_backends.py +119 -0
  240. celerity_sdk-0.2.0/tests/integration/test_config_layer_integration.py +147 -0
  241. celerity_sdk-0.2.0/tests/integration/test_config_local_backend.py +68 -0
  242. celerity_sdk-0.2.0/tests/integration/test_datastore_dynamodb.py +362 -0
  243. celerity_sdk-0.2.0/tests/integration/test_queue_redis.py +154 -0
  244. celerity_sdk-0.2.0/tests/integration/test_queue_sqs.py +208 -0
  245. celerity_sdk-0.2.0/tests/integration/test_sql_postgres.py +332 -0
  246. celerity_sdk-0.2.0/tests/integration/test_topic_redis.py +161 -0
  247. celerity_sdk-0.2.0/tests/integration/test_topic_sns.py +190 -0
  248. celerity_sdk-0.2.0/tests/test_application.py +78 -0
  249. celerity_sdk-0.2.0/tests/test_bootstrap_integration.py +223 -0
  250. celerity_sdk-0.2.0/tests/test_bucket_config.py +83 -0
  251. celerity_sdk-0.2.0/tests/test_bucket_factory.py +33 -0
  252. celerity_sdk-0.2.0/tests/test_bucket_helpers.py +43 -0
  253. celerity_sdk-0.2.0/tests/test_bucket_layer.py +203 -0
  254. celerity_sdk-0.2.0/tests/test_bucket_listing.py +215 -0
  255. celerity_sdk-0.2.0/tests/test_bucket_object_storage.py +101 -0
  256. celerity_sdk-0.2.0/tests/test_bucket_params.py +57 -0
  257. celerity_sdk-0.2.0/tests/test_bucket_provider.py +329 -0
  258. celerity_sdk-0.2.0/tests/test_bucket_types.py +169 -0
  259. celerity_sdk-0.2.0/tests/test_cache_cluster.py +77 -0
  260. celerity_sdk-0.2.0/tests/test_cache_config.py +69 -0
  261. celerity_sdk-0.2.0/tests/test_cache_credentials.py +161 -0
  262. celerity_sdk-0.2.0/tests/test_cache_layer.py +211 -0
  263. celerity_sdk-0.2.0/tests/test_cache_params.py +89 -0
  264. celerity_sdk-0.2.0/tests/test_cache_provider.py +165 -0
  265. celerity_sdk-0.2.0/tests/test_cache_types.py +63 -0
  266. celerity_sdk-0.2.0/tests/test_config_layer.py +117 -0
  267. celerity_sdk-0.2.0/tests/test_config_service.py +70 -0
  268. celerity_sdk-0.2.0/tests/test_container.py +342 -0
  269. celerity_sdk-0.2.0/tests/test_datastore_config.py +60 -0
  270. celerity_sdk-0.2.0/tests/test_datastore_expressions.py +299 -0
  271. celerity_sdk-0.2.0/tests/test_datastore_factory.py +62 -0
  272. celerity_sdk-0.2.0/tests/test_datastore_layer.py +192 -0
  273. celerity_sdk-0.2.0/tests/test_datastore_listing.py +155 -0
  274. celerity_sdk-0.2.0/tests/test_datastore_params.py +73 -0
  275. celerity_sdk-0.2.0/tests/test_datastore_provider.py +425 -0
  276. celerity_sdk-0.2.0/tests/test_datastore_types.py +231 -0
  277. celerity_sdk-0.2.0/tests/test_decorators.py +552 -0
  278. celerity_sdk-0.2.0/tests/test_dependency_tokens.py +83 -0
  279. celerity_sdk-0.2.0/tests/test_discovery.py +57 -0
  280. celerity_sdk-0.2.0/tests/test_errors.py +82 -0
  281. celerity_sdk-0.2.0/tests/test_extraction.py +419 -0
  282. celerity_sdk-0.2.0/tests/test_function_handlers.py +106 -0
  283. celerity_sdk-0.2.0/tests/test_layer_pipeline.py +114 -0
  284. celerity_sdk-0.2.0/tests/test_metadata.py +117 -0
  285. celerity_sdk-0.2.0/tests/test_mocks.py +129 -0
  286. celerity_sdk-0.2.0/tests/test_module_graph.py +231 -0
  287. celerity_sdk-0.2.0/tests/test_param_extractor.py +120 -0
  288. celerity_sdk-0.2.0/tests/test_param_extractor_extended.py +281 -0
  289. celerity_sdk-0.2.0/tests/test_path_utils.py +22 -0
  290. celerity_sdk-0.2.0/tests/test_queue_config.py +48 -0
  291. celerity_sdk-0.2.0/tests/test_queue_factory.py +26 -0
  292. celerity_sdk-0.2.0/tests/test_queue_helpers.py +44 -0
  293. celerity_sdk-0.2.0/tests/test_queue_layer.py +203 -0
  294. celerity_sdk-0.2.0/tests/test_queue_params.py +60 -0
  295. celerity_sdk-0.2.0/tests/test_queue_redis_provider.py +204 -0
  296. celerity_sdk-0.2.0/tests/test_queue_sqs_provider.py +238 -0
  297. celerity_sdk-0.2.0/tests/test_queue_types.py +119 -0
  298. celerity_sdk-0.2.0/tests/test_registry.py +141 -0
  299. celerity_sdk-0.2.0/tests/test_resource_common.py +141 -0
  300. celerity_sdk-0.2.0/tests/test_runtime_mapper.py +227 -0
  301. celerity_sdk-0.2.0/tests/test_serverless_aws.py +307 -0
  302. celerity_sdk-0.2.0/tests/test_serverless_aws_adapter.py +264 -0
  303. celerity_sdk-0.2.0/tests/test_sql_config.py +164 -0
  304. celerity_sdk-0.2.0/tests/test_sql_credentials.py +318 -0
  305. celerity_sdk-0.2.0/tests/test_sql_factory.py +214 -0
  306. celerity_sdk-0.2.0/tests/test_sql_helpers.py +121 -0
  307. celerity_sdk-0.2.0/tests/test_sql_instance.py +66 -0
  308. celerity_sdk-0.2.0/tests/test_sql_layer.py +243 -0
  309. celerity_sdk-0.2.0/tests/test_sql_params.py +181 -0
  310. celerity_sdk-0.2.0/tests/test_sql_types.py +118 -0
  311. celerity_sdk-0.2.0/tests/test_telemetry_context.py +21 -0
  312. celerity_sdk-0.2.0/tests/test_telemetry_env.py +120 -0
  313. celerity_sdk-0.2.0/tests/test_telemetry_helpers.py +55 -0
  314. celerity_sdk-0.2.0/tests/test_telemetry_init.py +79 -0
  315. celerity_sdk-0.2.0/tests/test_telemetry_instrumentations.py +17 -0
  316. celerity_sdk-0.2.0/tests/test_telemetry_layer.py +245 -0
  317. celerity_sdk-0.2.0/tests/test_telemetry_logger.py +154 -0
  318. celerity_sdk-0.2.0/tests/test_telemetry_noop.py +69 -0
  319. celerity_sdk-0.2.0/tests/test_telemetry_request_context.py +112 -0
  320. celerity_sdk-0.2.0/tests/test_telemetry_tracer.py +127 -0
  321. celerity_sdk-0.2.0/tests/test_test_app.py +194 -0
  322. celerity_sdk-0.2.0/tests/test_topic_config.py +48 -0
  323. celerity_sdk-0.2.0/tests/test_topic_factory.py +26 -0
  324. celerity_sdk-0.2.0/tests/test_topic_helpers.py +44 -0
  325. celerity_sdk-0.2.0/tests/test_topic_layer.py +202 -0
  326. celerity_sdk-0.2.0/tests/test_topic_params.py +60 -0
  327. celerity_sdk-0.2.0/tests/test_topic_redis_provider.py +199 -0
  328. celerity_sdk-0.2.0/tests/test_topic_sns_provider.py +222 -0
  329. celerity_sdk-0.2.0/tests/test_topic_types.py +116 -0
  330. celerity_sdk-0.2.0/tests/test_types.py +200 -0
  331. celerity_sdk-0.2.0/tests/test_validation_layer.py +228 -0
  332. celerity_sdk-0.2.0/yarn.lock +668 -0
@@ -0,0 +1,5 @@
1
+ AWS_ACCESS_KEY_ID=testing
2
+ AWS_SECRET_ACCESS_KEY=testing
3
+ AWS_DEFAULT_REGION=us-east-1
4
+ AWS_REGION=us-east-1
5
+ AWS_ENDPOINT_URL=http://localhost:4566
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ RED='\033[0;31m'
5
+ NC='\033[0m'
6
+
7
+ # Use commitlint if available (installed via yarn)
8
+ if command -v npx &> /dev/null && [ -f "node_modules/.bin/commitlint" ]; then
9
+ npx --no-install commitlint --edit "$1"
10
+ exit $?
11
+ fi
12
+
13
+ # Fallback to regex validation if commitlint is not installed
14
+ PATTERN='^(feat|fix|build|revert|wip|chore|ci|docs|style|refactor|perf|test|instr|deps)(\([a-zA-Z0-9_-]+\))?!?: .+'
15
+
16
+ COMMIT_MSG=$(cat "$1")
17
+
18
+ # Allow merge commits
19
+ if echo "$COMMIT_MSG" | grep -qE '^Merge '; then
20
+ exit 0
21
+ fi
22
+
23
+ if ! echo "$COMMIT_MSG" | grep -qE "$PATTERN"; then
24
+ echo -e "${RED}Invalid commit message format.${NC}"
25
+ echo ""
26
+ echo "Expected: type(scope): description"
27
+ echo "Types: feat, fix, build, revert, wip, chore, ci, docs, style, refactor, perf, test, instr, deps"
28
+ echo ""
29
+ echo "Examples:"
30
+ echo " feat: add handler pipeline"
31
+ echo " fix(di): resolve circular dependency detection"
32
+ echo " chore: update dependencies"
33
+ echo ""
34
+ exit 1
35
+ fi
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ RED='\033[0;31m'
5
+ GREEN='\033[0;32m'
6
+ NC='\033[0m'
7
+
8
+ echo "Running pre-commit checks..."
9
+
10
+ # Check if any Python files are staged
11
+ STAGED_PY=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.py$' || true)
12
+ if [ -z "$STAGED_PY" ]; then
13
+ echo -e "${GREEN}No Python files staged, skipping checks.${NC}"
14
+ exit 0
15
+ fi
16
+
17
+ echo "Checking formatting..."
18
+ if ! uv run ruff format --check src/ tests/ 2>/dev/null; then
19
+ echo -e "${RED}Formatting check failed. Run 'uv run ruff format src/ tests/' to fix.${NC}"
20
+ exit 1
21
+ fi
22
+
23
+ echo "Checking lint..."
24
+ if ! uv run ruff check src/ tests/ 2>/dev/null; then
25
+ echo -e "${RED}Lint check failed. Run 'uv run ruff check --fix src/ tests/' to fix.${NC}"
26
+ exit 1
27
+ fi
28
+
29
+ echo -e "${GREEN}Pre-commit checks passed.${NC}"
@@ -0,0 +1,23 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ day: "monday"
8
+ time: "04:00"
9
+ open-pull-requests-limit: 5
10
+ labels:
11
+ - "dependencies"
12
+ - "github-actions"
13
+
14
+ - package-ecosystem: "pip"
15
+ directory: "/"
16
+ schedule:
17
+ interval: "weekly"
18
+ day: "monday"
19
+ time: "04:00"
20
+ open-pull-requests-limit: 10
21
+ labels:
22
+ - "dependencies"
23
+ - "python"
@@ -0,0 +1,21 @@
1
+ ## Summary
2
+
3
+ <!-- Brief description of what this PR does and why. -->
4
+
5
+ ## Changes
6
+
7
+ -
8
+
9
+ ## Test Plan
10
+
11
+ - [ ] Unit tests added/updated
12
+ - [ ] Integration tests added/updated (if applicable)
13
+ - [ ] All tests pass locally (`./scripts/run-tests.sh all`)
14
+
15
+ ## Checklist
16
+
17
+ - [ ] Code follows project conventions (`uv run ruff check src/ tests/`)
18
+ - [ ] Types are correct (`uv run mypy src/`)
19
+ - [ ] No unnecessary `Any` types introduced
20
+ - [ ] Google-style docstrings on public APIs
21
+ - [ ] Commit messages follow conventional commits format
@@ -0,0 +1,54 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main]
6
+ push:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ ci:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ with:
15
+ fetch-depth: 0
16
+
17
+ - name: Install uv
18
+ uses: astral-sh/setup-uv@v5
19
+
20
+ - name: Set up Python
21
+ run: uv python install 3.13
22
+
23
+ - name: Install dependencies
24
+ run: uv sync --extra dev
25
+
26
+ - name: Security audit
27
+ run: uvx pip-audit
28
+
29
+ - name: Format check
30
+ run: uv run ruff format --check src/ tests/
31
+
32
+ - name: Lint
33
+ run: uv run ruff check src/ tests/
34
+
35
+ - name: Generate Ruff report for SonarCloud
36
+ run: uv run ruff check src/ tests/ --output-format json > ruff-report.json || true
37
+
38
+ - name: Type check
39
+ run: uv run mypy src/
40
+
41
+ - name: Run all tests with coverage
42
+ run: ./scripts/run-tests.sh all
43
+ env:
44
+ AWS_ACCESS_KEY_ID: testing
45
+ AWS_SECRET_ACCESS_KEY: testing
46
+ AWS_DEFAULT_REGION: us-east-1
47
+ AWS_REGION: us-east-1
48
+ AWS_ENDPOINT_URL: http://localhost:4566
49
+
50
+ - name: SonarCloud Scan
51
+ uses: SonarSource/sonarqube-scan-action@v7
52
+ env:
53
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
54
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
@@ -0,0 +1,34 @@
1
+ name: CodeQL
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ schedule:
9
+ - cron: "0 4 * * 1" # Weekly Monday 4:00 UTC
10
+
11
+ permissions:
12
+ contents: read
13
+ security-events: write
14
+
15
+ jobs:
16
+ analyze:
17
+ name: CodeQL Analysis
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+
22
+ - name: Initialize CodeQL
23
+ uses: github/codeql-action/init@v4
24
+ with:
25
+ languages: python
26
+ queries: +security-extended
27
+
28
+ - name: Autobuild
29
+ uses: github/codeql-action/autobuild@v4
30
+
31
+ - name: Perform CodeQL Analysis
32
+ uses: github/codeql-action/analyze@v4
33
+ with:
34
+ category: "codeql-python"
@@ -0,0 +1,52 @@
1
+ name: Release Please
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ workflow_dispatch:
8
+ inputs:
9
+ publish:
10
+ description: "Manually trigger publish (true/false)"
11
+ required: false
12
+ default: "false"
13
+
14
+ permissions:
15
+ contents: write
16
+ pull-requests: write
17
+ id-token: write
18
+
19
+ jobs:
20
+ release-please:
21
+ runs-on: ubuntu-latest
22
+ outputs:
23
+ release_created: ${{ steps.release.outputs.release_created }}
24
+ tag_name: ${{ steps.release.outputs.tag_name }}
25
+ steps:
26
+ - uses: googleapis/release-please-action@v4
27
+ id: release
28
+ with:
29
+ config-file: release-please-config.json
30
+ manifest-file: .release-please-manifest.json
31
+
32
+ publish:
33
+ needs: release-please
34
+ if: needs.release-please.outputs.release_created == 'true' || github.event.inputs.publish == 'true'
35
+ runs-on: ubuntu-latest
36
+ environment: pypi
37
+ steps:
38
+ - uses: actions/checkout@v6
39
+
40
+ - name: Install uv
41
+ uses: astral-sh/setup-uv@v7
42
+
43
+ - name: Set up Python
44
+ run: uv python install 3.13
45
+
46
+ - name: Build package
47
+ run: uv build
48
+
49
+ - name: Publish to PyPI
50
+ uses: pypa/gh-action-pypi-publish@release/v1
51
+ with:
52
+ attestations: true
@@ -0,0 +1,24 @@
1
+ name: Security
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ actionlint:
12
+ name: Actions Workflow Lint
13
+ runs-on: ubuntu-latest
14
+ permissions:
15
+ contents: read
16
+ pull-requests: write
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - name: Lint GitHub Actions workflows
21
+ uses: reviewdog/action-actionlint@v1
22
+ with:
23
+ reporter: github-pr-review
24
+ fail_level: error
@@ -0,0 +1,53 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # Virtual environments
7
+ .venv/
8
+ venv/
9
+
10
+ # Distribution / packaging
11
+ dist/
12
+ build/
13
+ *.egg-info/
14
+ *.egg
15
+
16
+ # Tool caches
17
+ .mypy_cache/
18
+ .ruff_cache/
19
+ .pytest_cache/
20
+
21
+ # Environment files
22
+ .env
23
+ .env.local
24
+
25
+ # Native extensions
26
+ *.so
27
+ *.dylib
28
+
29
+ # IDE
30
+ .idea/
31
+ .vscode/
32
+ *.swp
33
+ *.swo
34
+
35
+ # OS
36
+ .DS_Store
37
+ Thumbs.db
38
+
39
+ # uv
40
+ uv.lock
41
+
42
+ # Test reports
43
+ coverage.xml
44
+ test-results.xml
45
+ htmlcov/
46
+ .coverage
47
+
48
+ # Node (commitlint dev tooling)
49
+ node_modules/
50
+ yarn-error.log
51
+
52
+ CLAUDE.md
53
+ .claude
@@ -0,0 +1 @@
1
+ 3.13
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.2.0"
3
+ }
@@ -0,0 +1,37 @@
1
+ # Changelog
2
+
3
+ ## [0.2.0](https://github.com/newstack-cloud/celerity-python-sdk/compare/v0.1.0...v0.2.0) (2026-03-21)
4
+
5
+
6
+ ### Features
7
+
8
+ * add bucket resource implementation ([93ba36f](https://github.com/newstack-cloud/celerity-python-sdk/commit/93ba36f50e069ee85c128cb5220dbb46b069fa10))
9
+ * add cache resource implementation ([ddf8279](https://github.com/newstack-cloud/celerity-python-sdk/commit/ddf82792c2595971a9c3889726a2efb2d7e44010))
10
+ * add datastore implementation with dynamodb provider ([1890a8a](https://github.com/newstack-cloud/celerity-python-sdk/commit/1890a8a195ba823c5085b90bd311202d063f15b4))
11
+ * add decorators for all supported features ([1102fd1](https://github.com/newstack-cloud/celerity-python-sdk/commit/1102fd1248017d7a381bfc7646effc752a25ca81))
12
+ * add foundation types, metadata system and common utils ([6b49108](https://github.com/newstack-cloud/celerity-python-sdk/commit/6b491086ba6e400670712331b89ea1dcc4866d3c))
13
+ * add handler infra with registry, scanners, layers, pipelines and bootstrap ([529ca7c](https://github.com/newstack-cloud/celerity-python-sdk/commit/529ca7c3395eea3a5262ad932b8f949ec551fe0a))
14
+ * add handler manifest extraction cli ([f1fed1f](https://github.com/newstack-cloud/celerity-python-sdk/commit/f1fed1fe1123cae4a6b0fa62ddd0726d8593d55b))
15
+ * add instrumentation for dynamodb datastore implementation ([65ab6a5](https://github.com/newstack-cloud/celerity-python-sdk/commit/65ab6a5747efb4f88a238eb36b05602b9918ec95))
16
+ * add instrumentation to redis cache implementation ([99501a4](https://github.com/newstack-cloud/celerity-python-sdk/commit/99501a411b75463af0590d7d5fb81792ff76dc04))
17
+ * add queue resource implementation ([0101e6e](https://github.com/newstack-cloud/celerity-python-sdk/commit/0101e6ea55892738bd967c4ba1a8ff4e83912425))
18
+ * add resource type foundations and config implementation ([bb5b0c4](https://github.com/newstack-cloud/celerity-python-sdk/commit/bb5b0c473732f0079fbc61abcc0dae00b68e29e8))
19
+ * add runtime orchestrator and serverless adapters ([65f4750](https://github.com/newstack-cloud/celerity-python-sdk/commit/65f4750c8a3f55d72d6f111dc5ab6449fdca681b))
20
+ * add sql database resource implementation ([b19a225](https://github.com/newstack-cloud/celerity-python-sdk/commit/b19a22547818e8297d2675bd9070fec902ebfd90))
21
+ * add telemetry foundations ([200b509](https://github.com/newstack-cloud/celerity-python-sdk/commit/200b509fc20552cd08a6d8325a2837b0a2484345))
22
+ * add test utils for building celerity apps ([d4cd647](https://github.com/newstack-cloud/celerity-python-sdk/commit/d4cd647cd585a1ee9f25da7d94f6e744b4261952))
23
+ * add topic resource implementation ([e305526](https://github.com/newstack-cloud/celerity-python-sdk/commit/e3055268847ebf5a0ac40b5d26d6e051968c0f30))
24
+ * complete telemetry implementation ([25863e8](https://github.com/newstack-cloud/celerity-python-sdk/commit/25863e8b2ce68a31592ee60c02517a75b29a8a30))
25
+ * integrate module-level layers ([d0bd44f](https://github.com/newstack-cloud/celerity-python-sdk/commit/d0bd44f79cc60d89feb298d80d43c8cf4ee099cf))
26
+
27
+
28
+ ### Bug Fixes
29
+
30
+ * add fixes for ci integration tests and resource backend resolution ([9ee2eb6](https://github.com/newstack-cloud/celerity-python-sdk/commit/9ee2eb654b6856c724a922276da5a29d64a45e1a))
31
+ * add security fix for sql db factory to be secure when ssl is enabled ([939b9a0](https://github.com/newstack-cloud/celerity-python-sdk/commit/939b9a033ae50214928e48c961146d2538c969e5))
32
+ * add type fixes for telemetry ([75ca6c1](https://github.com/newstack-cloud/celerity-python-sdk/commit/75ca6c1c8d52ed86cfed1f915aafd1a9fc077d32))
33
+ * correct bucket resource to resolve bucket name from mappings ([548f3c8](https://github.com/newstack-cloud/celerity-python-sdk/commit/548f3c83a3e67cfb0dd7a4542f4a7d19efacc847))
34
+ * correct cache to take key prefix mappings in client constructor ([86b02b9](https://github.com/newstack-cloud/celerity-python-sdk/commit/86b02b9604f985fb7c9d89c6c801b589f2d5a813))
35
+ * correct data store resource to resolve table name from mappings ([85d8bef](https://github.com/newstack-cloud/celerity-python-sdk/commit/85d8bef3421da434cea7355782f55f161cf74996))
36
+ * correct missing type errors for sqlalchemy ([cfa6634](https://github.com/newstack-cloud/celerity-python-sdk/commit/cfa6634be9cdb778062fc916160b1b6880910460))
37
+ * correct resource injection to use annotated types ([ee60fa6](https://github.com/newstack-cloud/celerity-python-sdk/commit/ee60fa6366e61dea7d5a29447c69bb95681aa9b1))
@@ -0,0 +1,174 @@
1
+ # Contributing
2
+
3
+ ## Prerequisites
4
+
5
+ - Python >= 3.13
6
+ - [uv](https://docs.astral.sh/uv/) >= 0.5
7
+ - Node.js >= 22 (for commitlint only)
8
+ - yarn (for commitlint only)
9
+ - Docker (for integration tests)
10
+
11
+ ## Getting Started
12
+
13
+ ```bash
14
+ # Clone the repository
15
+ git clone git@github.com:newstack-cloud/celerity-python-sdk.git
16
+ cd celerity-python-sdk
17
+
18
+ # Install Python dependencies (all extras needed for development)
19
+ uv sync --extra dev --extra runtime --extra aws --extra cache
20
+
21
+ # Install commitlint (Node.js dev tooling)
22
+ yarn install
23
+
24
+ # Set up git hooks for conventional commits
25
+ git config core.hooksPath .githooks
26
+
27
+ # Run unit tests
28
+ ./scripts/run-tests.sh unit
29
+
30
+ # Run integration tests
31
+ ./scripts/run-tests.sh integration
32
+
33
+ # Run all tests (unit + integration)
34
+ ./scripts/run-tests.sh all
35
+
36
+ # Run linting and type checking
37
+ uv run ruff check src/ tests/
38
+ uv run mypy src/
39
+ ```
40
+
41
+ ## Development
42
+
43
+ ```bash
44
+ # Format code
45
+ uv run ruff format src/ tests/
46
+
47
+ # Lint with auto-fix
48
+ uv run ruff check --fix src/ tests/
49
+
50
+ # Type check
51
+ uv run mypy src/
52
+
53
+ # Run a specific test file
54
+ uv run pytest tests/test_types.py
55
+
56
+ # Run tests matching a keyword
57
+ uv run pytest -k "test_metadata"
58
+ ```
59
+
60
+ ## Managing Dependencies
61
+
62
+ ```bash
63
+ # Add a runtime dependency
64
+ uv add httpx
65
+
66
+ # Add a dev dependency
67
+ uv add --dev pytest-mock
68
+
69
+ # Add a dependency to an extra group
70
+ # (edit pyproject.toml [project.optional-dependencies] directly)
71
+
72
+ # Sync after editing pyproject.toml
73
+ uv sync --extra dev --extra runtime --extra aws --extra cache
74
+ ```
75
+
76
+ ## Conventional Commits
77
+
78
+ This project uses [conventional commits](https://www.conventionalcommits.org/) enforced by commitlint.
79
+
80
+ Format: `type(scope): description`
81
+
82
+ **Types**: `feat`, `fix`, `build`, `revert`, `wip`, `chore`, `ci`, `docs`, `style`, `refactor`, `perf`, `test`, `instr`, `deps`
83
+
84
+ **Scopes**: `types`, `common`, `metadata`, `decorators`, `di`, `bootstrap`, `handlers`, `layers`, `errors`, `functions`, `testing`, `cli`, `serverless`, `resources`, `telemetry`, `ci`, `repo`, `deps`
85
+
86
+ Examples:
87
+ ```
88
+ feat(handlers): add HTTP handler pipeline
89
+ fix(di): resolve circular dependency detection
90
+ chore: update dependencies
91
+ docs(resources): add datastore usage examples
92
+ test(bootstrap): add module graph integration tests
93
+ ```
94
+
95
+ ## Project Structure
96
+
97
+ ```
98
+ src/celerity/ SDK source code (src layout)
99
+ ├── types/ Shared data types and ABCs
100
+ ├── common/ Shared utilities
101
+ ├── metadata/ Metadata storage primitives
102
+ ├── decorators/ Handler and parameter decorators
103
+ ├── di/ Dependency injection container
104
+ ├── bootstrap/ Application bootstrap and module graph
105
+ ├── handlers/ Handler registry, scanners, pipelines
106
+ ├── layers/ Middleware layer pipeline
107
+ ├── errors/ HTTP exceptions
108
+ ├── functions/ Function handler factories
109
+ ├── testing/ Test utilities (TestApp, mocks)
110
+ ├── cli/ Handler manifest extraction CLI
111
+ ├── serverless/ Cloud adapters (AWS, GCP, Azure)
112
+ ├── resources/ Cloud-agnostic resource clients
113
+ └── telemetry/ Logging and tracing
114
+ tests/ Test suite
115
+ tests/integration/ Integration tests (require Docker services)
116
+ scripts/ Build and test scripts
117
+ docs/design/ Phase-by-phase design documents
118
+ ```
119
+
120
+ ## Testing
121
+
122
+ Use `scripts/run-tests.sh` to run tests. Coverage and JUnit XML reports are always generated.
123
+
124
+ ```bash
125
+ # Unit tests only (no Docker needed)
126
+ ./scripts/run-tests.sh unit
127
+
128
+ # Integration tests only (starts/stops Docker services)
129
+ ./scripts/run-tests.sh integration
130
+
131
+ # All tests — unit + integration (starts/stops Docker services)
132
+ ./scripts/run-tests.sh all
133
+
134
+ # Pass additional pytest args
135
+ ./scripts/run-tests.sh unit -k "test_metadata"
136
+ ```
137
+
138
+ All Docker-dependent commands (`integration`, `all`) handle the full Docker Compose lifecycle automatically — starting services, running tests, and tearing down — so you never need to manage Docker manually.
139
+
140
+ Reports generated:
141
+ - `coverage.xml` — Cobertura coverage report (consumed by SonarCloud)
142
+ - `test-results.xml` — JUnit test results
143
+
144
+ To manage Docker services manually for iterative development:
145
+
146
+ ```bash
147
+ # Start services in the background
148
+ docker compose up -d --wait
149
+
150
+ # Run integration tests directly (services already running)
151
+ uv run pytest tests/integration/
152
+
153
+ # Stop services
154
+ docker compose down -v
155
+ ```
156
+
157
+ ### Docker Services
158
+
159
+ The `docker-compose.yml` provides:
160
+
161
+ - **Valkey** (port 6399) — Redis-compatible cache, queue, and topic testing
162
+ - **LocalStack** (port 4566) — AWS service emulation (S3, SQS, SNS, DynamoDB, SSM, Secrets Manager)
163
+ - **PostgreSQL** (port 5499) — SQL database testing
164
+
165
+ ## Code Quality
166
+
167
+ All checks must pass before merging:
168
+
169
+ - **Formatting**: `uv run ruff format --check src/ tests/`
170
+ - **Linting**: `uv run ruff check src/ tests/`
171
+ - **Type checking**: `uv run mypy src/`
172
+ - **Tests**: `./scripts/run-tests.sh all`
173
+
174
+ The pre-commit hook runs format and lint checks automatically on staged Python files.