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.
- celerity_sdk-0.2.0/.env.test +5 -0
- celerity_sdk-0.2.0/.githooks/commit-msg +35 -0
- celerity_sdk-0.2.0/.githooks/pre-commit +29 -0
- celerity_sdk-0.2.0/.github/dependabot.yml +23 -0
- celerity_sdk-0.2.0/.github/pull_request_template.md +21 -0
- celerity_sdk-0.2.0/.github/workflows/ci.yml +54 -0
- celerity_sdk-0.2.0/.github/workflows/codeql.yml +34 -0
- celerity_sdk-0.2.0/.github/workflows/release-please.yml +52 -0
- celerity_sdk-0.2.0/.github/workflows/security.yml +24 -0
- celerity_sdk-0.2.0/.gitignore +53 -0
- celerity_sdk-0.2.0/.python-version +1 -0
- celerity_sdk-0.2.0/.release-please-manifest.json +3 -0
- celerity_sdk-0.2.0/CHANGELOG.md +37 -0
- celerity_sdk-0.2.0/CONTRIBUTING.md +174 -0
- celerity_sdk-0.2.0/LICENSE +201 -0
- celerity_sdk-0.2.0/PKG-INFO +92 -0
- celerity_sdk-0.2.0/README.md +21 -0
- celerity_sdk-0.2.0/commitlint.config.js +49 -0
- celerity_sdk-0.2.0/docker-compose.yml +44 -0
- celerity_sdk-0.2.0/package.json +8 -0
- celerity_sdk-0.2.0/pyproject.toml +122 -0
- celerity_sdk-0.2.0/release-please-config.json +20 -0
- celerity_sdk-0.2.0/scripts/run-tests.sh +92 -0
- celerity_sdk-0.2.0/setup.cfg +3 -0
- celerity_sdk-0.2.0/sonar-project.properties +25 -0
- celerity_sdk-0.2.0/src/celerity/__init__.py +114 -0
- celerity_sdk-0.2.0/src/celerity/application.py +83 -0
- celerity_sdk-0.2.0/src/celerity/bootstrap/__init__.py +13 -0
- celerity_sdk-0.2.0/src/celerity/bootstrap/bootstrap.py +70 -0
- celerity_sdk-0.2.0/src/celerity/bootstrap/discovery.py +67 -0
- celerity_sdk-0.2.0/src/celerity/bootstrap/module_graph.py +158 -0
- celerity_sdk-0.2.0/src/celerity/bootstrap/runtime_entry.py +311 -0
- celerity_sdk-0.2.0/src/celerity/bootstrap/runtime_mapper.py +210 -0
- celerity_sdk-0.2.0/src/celerity/bootstrap/runtime_orchestrator.py +200 -0
- celerity_sdk-0.2.0/src/celerity/cli/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/cli/extract.py +97 -0
- celerity_sdk-0.2.0/src/celerity/cli/identity.py +89 -0
- celerity_sdk-0.2.0/src/celerity/cli/metadata_app.py +338 -0
- celerity_sdk-0.2.0/src/celerity/cli/serializer.py +460 -0
- celerity_sdk-0.2.0/src/celerity/cli/types.py +151 -0
- celerity_sdk-0.2.0/src/celerity/common/__init__.py +6 -0
- celerity_sdk-0.2.0/src/celerity/common/debug.py +146 -0
- celerity_sdk-0.2.0/src/celerity/common/path_utils.py +30 -0
- celerity_sdk-0.2.0/src/celerity/config/__init__.py +27 -0
- celerity_sdk-0.2.0/src/celerity/config/backends/__init__.py +1 -0
- celerity_sdk-0.2.0/src/celerity/config/backends/aws/__init__.py +1 -0
- celerity_sdk-0.2.0/src/celerity/config/backends/aws/lambda_extension.py +62 -0
- celerity_sdk-0.2.0/src/celerity/config/backends/aws/parameter_store.py +39 -0
- celerity_sdk-0.2.0/src/celerity/config/backends/aws/secrets_manager.py +39 -0
- celerity_sdk-0.2.0/src/celerity/config/backends/empty.py +16 -0
- celerity_sdk-0.2.0/src/celerity/config/backends/local.py +48 -0
- celerity_sdk-0.2.0/src/celerity/config/backends/types.py +21 -0
- celerity_sdk-0.2.0/src/celerity/config/layer.py +132 -0
- celerity_sdk-0.2.0/src/celerity/config/params.py +88 -0
- celerity_sdk-0.2.0/src/celerity/config/service.py +104 -0
- celerity_sdk-0.2.0/src/celerity/decorators/__init__.py +98 -0
- celerity_sdk-0.2.0/src/celerity/decorators/consumer.py +86 -0
- celerity_sdk-0.2.0/src/celerity/decorators/consumer_params.py +71 -0
- celerity_sdk-0.2.0/src/celerity/decorators/controller.py +46 -0
- celerity_sdk-0.2.0/src/celerity/decorators/guards.py +121 -0
- celerity_sdk-0.2.0/src/celerity/decorators/http.py +152 -0
- celerity_sdk-0.2.0/src/celerity/decorators/injectable.py +110 -0
- celerity_sdk-0.2.0/src/celerity/decorators/invoke.py +36 -0
- celerity_sdk-0.2.0/src/celerity/decorators/invoke_params.py +47 -0
- celerity_sdk-0.2.0/src/celerity/decorators/layer.py +73 -0
- celerity_sdk-0.2.0/src/celerity/decorators/metadata.py +62 -0
- celerity_sdk-0.2.0/src/celerity/decorators/module.py +74 -0
- celerity_sdk-0.2.0/src/celerity/decorators/params.py +200 -0
- celerity_sdk-0.2.0/src/celerity/decorators/resource.py +45 -0
- celerity_sdk-0.2.0/src/celerity/decorators/schedule.py +70 -0
- celerity_sdk-0.2.0/src/celerity/decorators/schedule_params.py +71 -0
- celerity_sdk-0.2.0/src/celerity/decorators/websocket.py +135 -0
- celerity_sdk-0.2.0/src/celerity/decorators/websocket_params.py +83 -0
- celerity_sdk-0.2.0/src/celerity/di/__init__.py +12 -0
- celerity_sdk-0.2.0/src/celerity/di/container.py +311 -0
- celerity_sdk-0.2.0/src/celerity/di/dependency_tokens.py +95 -0
- celerity_sdk-0.2.0/src/celerity/di/tokens.py +7 -0
- celerity_sdk-0.2.0/src/celerity/errors/__init__.py +35 -0
- celerity_sdk-0.2.0/src/celerity/errors/http_exception.py +83 -0
- celerity_sdk-0.2.0/src/celerity/functions/__init__.py +29 -0
- celerity_sdk-0.2.0/src/celerity/functions/consumer.py +60 -0
- celerity_sdk-0.2.0/src/celerity/functions/context.py +81 -0
- celerity_sdk-0.2.0/src/celerity/functions/custom.py +53 -0
- celerity_sdk-0.2.0/src/celerity/functions/guard.py +46 -0
- celerity_sdk-0.2.0/src/celerity/functions/http.py +80 -0
- celerity_sdk-0.2.0/src/celerity/functions/schedule.py +62 -0
- celerity_sdk-0.2.0/src/celerity/functions/websocket.py +56 -0
- celerity_sdk-0.2.0/src/celerity/handlers/__init__.py +5 -0
- celerity_sdk-0.2.0/src/celerity/handlers/consumer_pipeline.py +71 -0
- celerity_sdk-0.2.0/src/celerity/handlers/custom_pipeline.py +65 -0
- celerity_sdk-0.2.0/src/celerity/handlers/guard_pipeline.py +207 -0
- celerity_sdk-0.2.0/src/celerity/handlers/http_pipeline.py +123 -0
- celerity_sdk-0.2.0/src/celerity/handlers/module_resolver.py +52 -0
- celerity_sdk-0.2.0/src/celerity/handlers/param_extractor.py +258 -0
- celerity_sdk-0.2.0/src/celerity/handlers/registry.py +232 -0
- celerity_sdk-0.2.0/src/celerity/handlers/scanners/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/handlers/scanners/_utils.py +49 -0
- celerity_sdk-0.2.0/src/celerity/handlers/scanners/consumer.py +79 -0
- celerity_sdk-0.2.0/src/celerity/handlers/scanners/custom.py +74 -0
- celerity_sdk-0.2.0/src/celerity/handlers/scanners/http.py +155 -0
- celerity_sdk-0.2.0/src/celerity/handlers/scanners/schedule.py +78 -0
- celerity_sdk-0.2.0/src/celerity/handlers/scanners/websocket.py +71 -0
- celerity_sdk-0.2.0/src/celerity/handlers/schedule_pipeline.py +69 -0
- celerity_sdk-0.2.0/src/celerity/handlers/websocket_pipeline.py +53 -0
- celerity_sdk-0.2.0/src/celerity/layers/__init__.py +7 -0
- celerity_sdk-0.2.0/src/celerity/layers/dispose.py +26 -0
- celerity_sdk-0.2.0/src/celerity/layers/pipeline.py +80 -0
- celerity_sdk-0.2.0/src/celerity/layers/system.py +78 -0
- celerity_sdk-0.2.0/src/celerity/layers/validate.py +108 -0
- celerity_sdk-0.2.0/src/celerity/metadata/__init__.py +6 -0
- celerity_sdk-0.2.0/src/celerity/metadata/keys.py +77 -0
- celerity_sdk-0.2.0/src/celerity/metadata/store.py +48 -0
- celerity_sdk-0.2.0/src/celerity/py.typed +0 -0
- celerity_sdk-0.2.0/src/celerity/resources/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/resources/_common.py +104 -0
- celerity_sdk-0.2.0/src/celerity/resources/_tokens.py +80 -0
- celerity_sdk-0.2.0/src/celerity/resources/bucket/__init__.py +41 -0
- celerity_sdk-0.2.0/src/celerity/resources/bucket/errors.py +21 -0
- celerity_sdk-0.2.0/src/celerity/resources/bucket/factory.py +71 -0
- celerity_sdk-0.2.0/src/celerity/resources/bucket/layer.py +82 -0
- celerity_sdk-0.2.0/src/celerity/resources/bucket/params.py +65 -0
- celerity_sdk-0.2.0/src/celerity/resources/bucket/providers/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/resources/bucket/providers/s3/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/resources/bucket/providers/s3/client.py +360 -0
- celerity_sdk-0.2.0/src/celerity/resources/bucket/providers/s3/config.py +39 -0
- celerity_sdk-0.2.0/src/celerity/resources/bucket/providers/s3/listing.py +137 -0
- celerity_sdk-0.2.0/src/celerity/resources/bucket/providers/s3/types.py +18 -0
- celerity_sdk-0.2.0/src/celerity/resources/bucket/types.py +178 -0
- celerity_sdk-0.2.0/src/celerity/resources/cache/__init__.py +33 -0
- celerity_sdk-0.2.0/src/celerity/resources/cache/config.py +85 -0
- celerity_sdk-0.2.0/src/celerity/resources/cache/credentials.py +153 -0
- celerity_sdk-0.2.0/src/celerity/resources/cache/errors.py +14 -0
- celerity_sdk-0.2.0/src/celerity/resources/cache/factory.py +52 -0
- celerity_sdk-0.2.0/src/celerity/resources/cache/layer.py +96 -0
- celerity_sdk-0.2.0/src/celerity/resources/cache/params.py +65 -0
- celerity_sdk-0.2.0/src/celerity/resources/cache/providers/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/resources/cache/providers/redis/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/resources/cache/providers/redis/cache.py +651 -0
- celerity_sdk-0.2.0/src/celerity/resources/cache/providers/redis/client.py +138 -0
- celerity_sdk-0.2.0/src/celerity/resources/cache/providers/redis/cluster.py +105 -0
- celerity_sdk-0.2.0/src/celerity/resources/cache/providers/redis/iam/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/resources/cache/providers/redis/iam/elasticache_token.py +57 -0
- celerity_sdk-0.2.0/src/celerity/resources/cache/providers/redis/types.py +24 -0
- celerity_sdk-0.2.0/src/celerity/resources/cache/types.py +246 -0
- celerity_sdk-0.2.0/src/celerity/resources/datastore/__init__.py +61 -0
- celerity_sdk-0.2.0/src/celerity/resources/datastore/errors.py +29 -0
- celerity_sdk-0.2.0/src/celerity/resources/datastore/factory.py +100 -0
- celerity_sdk-0.2.0/src/celerity/resources/datastore/layer.py +84 -0
- celerity_sdk-0.2.0/src/celerity/resources/datastore/params.py +65 -0
- celerity_sdk-0.2.0/src/celerity/resources/datastore/providers/__init__.py +1 -0
- celerity_sdk-0.2.0/src/celerity/resources/datastore/providers/dynamodb/__init__.py +1 -0
- celerity_sdk-0.2.0/src/celerity/resources/datastore/providers/dynamodb/client.py +480 -0
- celerity_sdk-0.2.0/src/celerity/resources/datastore/providers/dynamodb/config.py +25 -0
- celerity_sdk-0.2.0/src/celerity/resources/datastore/providers/dynamodb/expressions.py +227 -0
- celerity_sdk-0.2.0/src/celerity/resources/datastore/providers/dynamodb/listing.py +96 -0
- celerity_sdk-0.2.0/src/celerity/resources/datastore/providers/dynamodb/marshall.py +27 -0
- celerity_sdk-0.2.0/src/celerity/resources/datastore/providers/dynamodb/types.py +17 -0
- celerity_sdk-0.2.0/src/celerity/resources/datastore/types.py +251 -0
- celerity_sdk-0.2.0/src/celerity/resources/queue/__init__.py +35 -0
- celerity_sdk-0.2.0/src/celerity/resources/queue/errors.py +22 -0
- celerity_sdk-0.2.0/src/celerity/resources/queue/factory.py +87 -0
- celerity_sdk-0.2.0/src/celerity/resources/queue/layer.py +84 -0
- celerity_sdk-0.2.0/src/celerity/resources/queue/params.py +65 -0
- celerity_sdk-0.2.0/src/celerity/resources/queue/providers/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/resources/queue/providers/redis/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/resources/queue/providers/redis/client.py +186 -0
- celerity_sdk-0.2.0/src/celerity/resources/queue/providers/redis/types.py +12 -0
- celerity_sdk-0.2.0/src/celerity/resources/queue/providers/sqs/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/resources/queue/providers/sqs/client.py +225 -0
- celerity_sdk-0.2.0/src/celerity/resources/queue/providers/sqs/config.py +25 -0
- celerity_sdk-0.2.0/src/celerity/resources/queue/providers/sqs/types.py +17 -0
- celerity_sdk-0.2.0/src/celerity/resources/queue/types.py +103 -0
- celerity_sdk-0.2.0/src/celerity/resources/sql_database/__init__.py +61 -0
- celerity_sdk-0.2.0/src/celerity/resources/sql_database/config.py +132 -0
- celerity_sdk-0.2.0/src/celerity/resources/sql_database/credentials.py +150 -0
- celerity_sdk-0.2.0/src/celerity/resources/sql_database/errors.py +21 -0
- celerity_sdk-0.2.0/src/celerity/resources/sql_database/factory.py +123 -0
- celerity_sdk-0.2.0/src/celerity/resources/sql_database/layer.py +89 -0
- celerity_sdk-0.2.0/src/celerity/resources/sql_database/params.py +160 -0
- celerity_sdk-0.2.0/src/celerity/resources/sql_database/providers/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/resources/sql_database/providers/rds/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/resources/sql_database/providers/rds/iam.py +71 -0
- celerity_sdk-0.2.0/src/celerity/resources/sql_database/types.py +85 -0
- celerity_sdk-0.2.0/src/celerity/resources/topic/__init__.py +35 -0
- celerity_sdk-0.2.0/src/celerity/resources/topic/errors.py +22 -0
- celerity_sdk-0.2.0/src/celerity/resources/topic/factory.py +86 -0
- celerity_sdk-0.2.0/src/celerity/resources/topic/layer.py +84 -0
- celerity_sdk-0.2.0/src/celerity/resources/topic/params.py +54 -0
- celerity_sdk-0.2.0/src/celerity/resources/topic/providers/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/resources/topic/providers/redis/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/resources/topic/providers/redis/client.py +185 -0
- celerity_sdk-0.2.0/src/celerity/resources/topic/providers/redis/types.py +12 -0
- celerity_sdk-0.2.0/src/celerity/resources/topic/providers/sns/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/resources/topic/providers/sns/client.py +225 -0
- celerity_sdk-0.2.0/src/celerity/resources/topic/providers/sns/config.py +25 -0
- celerity_sdk-0.2.0/src/celerity/resources/topic/providers/sns/types.py +17 -0
- celerity_sdk-0.2.0/src/celerity/resources/topic/types.py +102 -0
- celerity_sdk-0.2.0/src/celerity/serverless/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/serverless/aws/__init__.py +5 -0
- celerity_sdk-0.2.0/src/celerity/serverless/aws/adapter.py +313 -0
- celerity_sdk-0.2.0/src/celerity/serverless/aws/event_mapper.py +330 -0
- celerity_sdk-0.2.0/src/celerity/serverless/aws/websocket_sender.py +54 -0
- celerity_sdk-0.2.0/src/celerity/serverless/azure/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/serverless/gcp/__init__.py +0 -0
- celerity_sdk-0.2.0/src/celerity/telemetry/__init__.py +45 -0
- celerity_sdk-0.2.0/src/celerity/telemetry/context.py +29 -0
- celerity_sdk-0.2.0/src/celerity/telemetry/env.py +67 -0
- celerity_sdk-0.2.0/src/celerity/telemetry/helpers.py +22 -0
- celerity_sdk-0.2.0/src/celerity/telemetry/init.py +121 -0
- celerity_sdk-0.2.0/src/celerity/telemetry/instrumentations.py +79 -0
- celerity_sdk-0.2.0/src/celerity/telemetry/logger.py +122 -0
- celerity_sdk-0.2.0/src/celerity/telemetry/noop.py +48 -0
- celerity_sdk-0.2.0/src/celerity/telemetry/request_context.py +68 -0
- celerity_sdk-0.2.0/src/celerity/telemetry/telemetry_layer.py +195 -0
- celerity_sdk-0.2.0/src/celerity/telemetry/tracer.py +59 -0
- celerity_sdk-0.2.0/src/celerity/testing/__init__.py +17 -0
- celerity_sdk-0.2.0/src/celerity/testing/mocks.py +146 -0
- celerity_sdk-0.2.0/src/celerity/testing/test_app.py +278 -0
- celerity_sdk-0.2.0/src/celerity/types/__init__.py +106 -0
- celerity_sdk-0.2.0/src/celerity/types/common.py +36 -0
- celerity_sdk-0.2.0/src/celerity/types/consumer.py +98 -0
- celerity_sdk-0.2.0/src/celerity/types/container.py +56 -0
- celerity_sdk-0.2.0/src/celerity/types/context.py +81 -0
- celerity_sdk-0.2.0/src/celerity/types/guard.py +46 -0
- celerity_sdk-0.2.0/src/celerity/types/handler.py +108 -0
- celerity_sdk-0.2.0/src/celerity/types/http.py +40 -0
- celerity_sdk-0.2.0/src/celerity/types/layer.py +40 -0
- celerity_sdk-0.2.0/src/celerity/types/module.py +44 -0
- celerity_sdk-0.2.0/src/celerity/types/schedule.py +17 -0
- celerity_sdk-0.2.0/src/celerity/types/telemetry.py +74 -0
- celerity_sdk-0.2.0/src/celerity/types/websocket.py +72 -0
- celerity_sdk-0.2.0/tests/__init__.py +0 -0
- celerity_sdk-0.2.0/tests/conftest.py +1 -0
- celerity_sdk-0.2.0/tests/fixtures/sample_app/__init__.py +0 -0
- celerity_sdk-0.2.0/tests/integration/__init__.py +0 -0
- celerity_sdk-0.2.0/tests/integration/conftest.py +29 -0
- celerity_sdk-0.2.0/tests/integration/test_bucket_s3.py +322 -0
- celerity_sdk-0.2.0/tests/integration/test_cache_redis.py +275 -0
- celerity_sdk-0.2.0/tests/integration/test_config_aws_backends.py +119 -0
- celerity_sdk-0.2.0/tests/integration/test_config_layer_integration.py +147 -0
- celerity_sdk-0.2.0/tests/integration/test_config_local_backend.py +68 -0
- celerity_sdk-0.2.0/tests/integration/test_datastore_dynamodb.py +362 -0
- celerity_sdk-0.2.0/tests/integration/test_queue_redis.py +154 -0
- celerity_sdk-0.2.0/tests/integration/test_queue_sqs.py +208 -0
- celerity_sdk-0.2.0/tests/integration/test_sql_postgres.py +332 -0
- celerity_sdk-0.2.0/tests/integration/test_topic_redis.py +161 -0
- celerity_sdk-0.2.0/tests/integration/test_topic_sns.py +190 -0
- celerity_sdk-0.2.0/tests/test_application.py +78 -0
- celerity_sdk-0.2.0/tests/test_bootstrap_integration.py +223 -0
- celerity_sdk-0.2.0/tests/test_bucket_config.py +83 -0
- celerity_sdk-0.2.0/tests/test_bucket_factory.py +33 -0
- celerity_sdk-0.2.0/tests/test_bucket_helpers.py +43 -0
- celerity_sdk-0.2.0/tests/test_bucket_layer.py +203 -0
- celerity_sdk-0.2.0/tests/test_bucket_listing.py +215 -0
- celerity_sdk-0.2.0/tests/test_bucket_object_storage.py +101 -0
- celerity_sdk-0.2.0/tests/test_bucket_params.py +57 -0
- celerity_sdk-0.2.0/tests/test_bucket_provider.py +329 -0
- celerity_sdk-0.2.0/tests/test_bucket_types.py +169 -0
- celerity_sdk-0.2.0/tests/test_cache_cluster.py +77 -0
- celerity_sdk-0.2.0/tests/test_cache_config.py +69 -0
- celerity_sdk-0.2.0/tests/test_cache_credentials.py +161 -0
- celerity_sdk-0.2.0/tests/test_cache_layer.py +211 -0
- celerity_sdk-0.2.0/tests/test_cache_params.py +89 -0
- celerity_sdk-0.2.0/tests/test_cache_provider.py +165 -0
- celerity_sdk-0.2.0/tests/test_cache_types.py +63 -0
- celerity_sdk-0.2.0/tests/test_config_layer.py +117 -0
- celerity_sdk-0.2.0/tests/test_config_service.py +70 -0
- celerity_sdk-0.2.0/tests/test_container.py +342 -0
- celerity_sdk-0.2.0/tests/test_datastore_config.py +60 -0
- celerity_sdk-0.2.0/tests/test_datastore_expressions.py +299 -0
- celerity_sdk-0.2.0/tests/test_datastore_factory.py +62 -0
- celerity_sdk-0.2.0/tests/test_datastore_layer.py +192 -0
- celerity_sdk-0.2.0/tests/test_datastore_listing.py +155 -0
- celerity_sdk-0.2.0/tests/test_datastore_params.py +73 -0
- celerity_sdk-0.2.0/tests/test_datastore_provider.py +425 -0
- celerity_sdk-0.2.0/tests/test_datastore_types.py +231 -0
- celerity_sdk-0.2.0/tests/test_decorators.py +552 -0
- celerity_sdk-0.2.0/tests/test_dependency_tokens.py +83 -0
- celerity_sdk-0.2.0/tests/test_discovery.py +57 -0
- celerity_sdk-0.2.0/tests/test_errors.py +82 -0
- celerity_sdk-0.2.0/tests/test_extraction.py +419 -0
- celerity_sdk-0.2.0/tests/test_function_handlers.py +106 -0
- celerity_sdk-0.2.0/tests/test_layer_pipeline.py +114 -0
- celerity_sdk-0.2.0/tests/test_metadata.py +117 -0
- celerity_sdk-0.2.0/tests/test_mocks.py +129 -0
- celerity_sdk-0.2.0/tests/test_module_graph.py +231 -0
- celerity_sdk-0.2.0/tests/test_param_extractor.py +120 -0
- celerity_sdk-0.2.0/tests/test_param_extractor_extended.py +281 -0
- celerity_sdk-0.2.0/tests/test_path_utils.py +22 -0
- celerity_sdk-0.2.0/tests/test_queue_config.py +48 -0
- celerity_sdk-0.2.0/tests/test_queue_factory.py +26 -0
- celerity_sdk-0.2.0/tests/test_queue_helpers.py +44 -0
- celerity_sdk-0.2.0/tests/test_queue_layer.py +203 -0
- celerity_sdk-0.2.0/tests/test_queue_params.py +60 -0
- celerity_sdk-0.2.0/tests/test_queue_redis_provider.py +204 -0
- celerity_sdk-0.2.0/tests/test_queue_sqs_provider.py +238 -0
- celerity_sdk-0.2.0/tests/test_queue_types.py +119 -0
- celerity_sdk-0.2.0/tests/test_registry.py +141 -0
- celerity_sdk-0.2.0/tests/test_resource_common.py +141 -0
- celerity_sdk-0.2.0/tests/test_runtime_mapper.py +227 -0
- celerity_sdk-0.2.0/tests/test_serverless_aws.py +307 -0
- celerity_sdk-0.2.0/tests/test_serverless_aws_adapter.py +264 -0
- celerity_sdk-0.2.0/tests/test_sql_config.py +164 -0
- celerity_sdk-0.2.0/tests/test_sql_credentials.py +318 -0
- celerity_sdk-0.2.0/tests/test_sql_factory.py +214 -0
- celerity_sdk-0.2.0/tests/test_sql_helpers.py +121 -0
- celerity_sdk-0.2.0/tests/test_sql_instance.py +66 -0
- celerity_sdk-0.2.0/tests/test_sql_layer.py +243 -0
- celerity_sdk-0.2.0/tests/test_sql_params.py +181 -0
- celerity_sdk-0.2.0/tests/test_sql_types.py +118 -0
- celerity_sdk-0.2.0/tests/test_telemetry_context.py +21 -0
- celerity_sdk-0.2.0/tests/test_telemetry_env.py +120 -0
- celerity_sdk-0.2.0/tests/test_telemetry_helpers.py +55 -0
- celerity_sdk-0.2.0/tests/test_telemetry_init.py +79 -0
- celerity_sdk-0.2.0/tests/test_telemetry_instrumentations.py +17 -0
- celerity_sdk-0.2.0/tests/test_telemetry_layer.py +245 -0
- celerity_sdk-0.2.0/tests/test_telemetry_logger.py +154 -0
- celerity_sdk-0.2.0/tests/test_telemetry_noop.py +69 -0
- celerity_sdk-0.2.0/tests/test_telemetry_request_context.py +112 -0
- celerity_sdk-0.2.0/tests/test_telemetry_tracer.py +127 -0
- celerity_sdk-0.2.0/tests/test_test_app.py +194 -0
- celerity_sdk-0.2.0/tests/test_topic_config.py +48 -0
- celerity_sdk-0.2.0/tests/test_topic_factory.py +26 -0
- celerity_sdk-0.2.0/tests/test_topic_helpers.py +44 -0
- celerity_sdk-0.2.0/tests/test_topic_layer.py +202 -0
- celerity_sdk-0.2.0/tests/test_topic_params.py +60 -0
- celerity_sdk-0.2.0/tests/test_topic_redis_provider.py +199 -0
- celerity_sdk-0.2.0/tests/test_topic_sns_provider.py +222 -0
- celerity_sdk-0.2.0/tests/test_topic_types.py +116 -0
- celerity_sdk-0.2.0/tests/test_types.py +200 -0
- celerity_sdk-0.2.0/tests/test_validation_layer.py +228 -0
- celerity_sdk-0.2.0/yarn.lock +668 -0
|
@@ -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,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.
|