mic-struct 0.0.1__tar.gz → 0.0.2__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.
- {mic_struct-0.0.1 → mic_struct-0.0.2}/CHANGELOG.md +18 -1
- {mic_struct-0.0.1 → mic_struct-0.0.2}/PKG-INFO +1 -1
- {mic_struct-0.0.1 → mic_struct-0.0.2}/pyproject.toml +1 -1
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/__init__.py +1 -1
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/healthcheck/readiness.py +33 -4
- {mic_struct-0.0.1 → mic_struct-0.0.2}/.gitignore +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/LICENSE +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/README.md +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/_lazy.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/auth/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/auth/revoke_blacklist.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/auth/service_auth.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/authz/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/authz/base.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/authz/errors.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/authz/in_memory.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/authz/opa.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/authz/openfga.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/cache/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/cache/backends.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/cache/cluster/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/cache/cluster/consistent_hash.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/cache/cluster/redis_cluster.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/cli/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/cli/builder.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/cli/spec.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/client/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/client/async_service_client.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/client/service_client.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/contracts/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/contracts/envelope.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/contracts/strict_schema.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/datastorage/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/datastorage/base.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/datastorage/document/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/datastorage/document/engine.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/datastorage/document/in_memory.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/datastorage/graph/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/datastorage/graph/engine.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/datastorage/keyvalue/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/datastorage/keyvalue/in_memory.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/datastorage/sql/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/datastorage/sql/engine.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/eventbus/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/eventbus/base.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/eventbus/in_memory.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/eventbus/redis_streams.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/fastapi/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/fastapi/_resolve.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/fastapi/middlewares.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/fastapi/router.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/grpc/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/grpc/client.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/grpc/errors.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/grpc/interceptors.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/grpc/rpc_spec.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/grpc/server.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/grpc/spec.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/healthcheck/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/http/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/http/api_key.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/http/auth_gate.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/http/basic_auth.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/http/bearer.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/http/correlation.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/http/csrf.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/http/request_context.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/http/route_spec.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/idempotency/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/idempotency/store.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/litestar/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/litestar/_resolve.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/litestar/middlewares.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/litestar/router.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/locking/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/locking/base.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/locking/in_memory.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/locking/lock_handle.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/locking/redis_backend.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/locking/scope.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/model/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/model/errors.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/observability/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/observability/caller.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/observability/circuit_breaker_metrics.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/observability/log_context_middleware.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/observability/logging.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/observability/metrics.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/observability/metrics_backend.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/observability/metrics_guard.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/observability/redact_logs.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/observability/redact_traces.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/observability/sentry.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/observability/tracing.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/observability/tracing_middleware.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/outbox/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/outbox/base.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/outbox/dispatcher.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/outbox/event.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/outbox/in_memory.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/outbox/sanitize.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/outbox/sql.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/py.typed +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/queue/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/queue/base.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/queue/in_memory.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/queue/kafka.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/queue/nats.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/ratelimit/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/ratelimit/base.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/ratelimit/in_memory.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/ratelimit/middleware.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/ratelimit/redis_backend.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/ratelimit/spec.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/read_models/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/read_models/counter.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/read_models/leaderboard.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/read_models/membership_set.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/read_models/timeline.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/read_models/unique_count.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/realtime/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/realtime/auth.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/realtime/backend.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/realtime/endpoint.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/realtime/redis_streams.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/realtime/room.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/resilience/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/resilience/circuit_breaker.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/response_cache/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/response_cache/_stampede.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/response_cache/_storage.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/response_cache/middleware.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/response_cache/rule.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/shard/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/shard/selector.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/src/mic/shard/session_factory.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/cookiecutter.json +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/hooks/post_gen_project.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/hooks/pre_gen_project.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/.gitignore +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/.python-version +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/README.md +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/alembic/env.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/alembic/script.py.mako +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/alembic/versions/20260507_baseline_widgets.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/alembic.ini +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/bootstrap/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/bootstrap/config/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/bootstrap/config/settings.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/bootstrap/context/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/bootstrap/context/execution_context.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/bootstrap/providers/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/bootstrap/providers/auth.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/bootstrap/providers/database.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/bootstrap/startup/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/bootstrap/startup/http_routes.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/bootstrap/startup/http_runtime.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/bootstrap/wiring/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/bootstrap/wiring/system.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/bootstrap/wiring/widgets.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/entrypoints/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/entrypoints/cli/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/entrypoints/http/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/entrypoints/http/main.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/frameworks/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/frameworks/cli/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/frameworks/fastapi/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/frameworks/fastapi/middlewares/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/frameworks/fastapi/middlewares/auth.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/frameworks/litestar/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/system/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/system/controller/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/system/controller/health.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/system/controller/readiness.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/system/interface/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/system/interface/http/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/system/interface/http/routes.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/widgets/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/widgets/controller/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/widgets/controller/create_widget.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/widgets/controller/read_widget.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/widgets/interface/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/widgets/interface/http/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/widgets/interface/http/payloads.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/widgets/interface/http/routes.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/widgets/model/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/widgets/model/persistence/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/widgets/model/persistence/widget.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/widgets/model/repositories/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/platform/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/platform/services/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/shared/__init__.py +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/pyproject.toml +0 -0
- {mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/tools/bump_service.py +0 -0
|
@@ -5,7 +5,24 @@ All notable changes to **mic-struct** are documented in this file.
|
|
|
5
5
|
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.0.2] — 2026-05-22
|
|
11
|
+
|
|
12
|
+
### Fixed — `mic.healthcheck` : préservation du nom du probe sur exception (RDL-627)
|
|
13
|
+
|
|
14
|
+
`make_db_probe` et `make_callable_probe` capturent désormais l'exception
|
|
15
|
+
**à l'intérieur** du probe et retournent un `ProbeResult` unhealthy en
|
|
16
|
+
**préservant le `name`** canonique (+ `latency_ms`), au lieu de laisser
|
|
17
|
+
l'erreur remonter à `ReadinessChecker._run_probe_safely`, qui retombait sur
|
|
18
|
+
`getattr(probe, "__name__", "unknown_probe")` = `"_probe"` (nom perdu).
|
|
19
|
+
`make_cache_probe` avait déjà ce comportement — les trois factories sont
|
|
20
|
+
maintenant cohérentes.
|
|
21
|
+
|
|
22
|
+
Permet aux consumers (ex. rdlink-api `providers/readiness.py`, qui écrivait
|
|
23
|
+
ses probes `database`/`schema` à la main *uniquement* pour garder le nom)
|
|
24
|
+
d'utiliser directement les factories mic comme socle. Rétro-compatible : un
|
|
25
|
+
probe sain est inchangé ; seul le chemin d'exception gagne le nom correct.
|
|
9
26
|
|
|
10
27
|
First public release of `mic-struct` — the building blocks below have
|
|
11
28
|
been consolidated, hardened, and locked behind a 100 % line + branch
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mic-struct
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.2
|
|
4
4
|
Summary: Model/Interface/Controller boilerplate for Python services — FastAPI/Litestar parity, JWT service auth, SQLModel storage, Prometheus + JSON logs, cookiecutter scaffold
|
|
5
5
|
Project-URL: Homepage, https://gitlab.com/mic-struct/mic-struct
|
|
6
6
|
Project-URL: Documentation, https://gitlab.com/mic-struct/mic-struct/-/blob/master/README.md
|
|
@@ -7,7 +7,7 @@ name = "mic-struct"
|
|
|
7
7
|
# First public release. Pre-1.0 (0.x) : per semver, minor bumps may carry
|
|
8
8
|
# breaking changes. Consumers constrain with ">=0.0.1,<1.0.0" (the existing
|
|
9
9
|
# ">=0.0.1.dev0,<1.0.0" pins also accept this release).
|
|
10
|
-
version = "0.0.
|
|
10
|
+
version = "0.0.2"
|
|
11
11
|
description = "Model/Interface/Controller boilerplate for Python services — FastAPI/Litestar parity, JWT service auth, SQLModel storage, Prometheus + JSON logs, cookiecutter scaffold"
|
|
12
12
|
readme = "README.md"
|
|
13
13
|
requires-python = ">=3.14"
|
|
@@ -147,11 +147,27 @@ def make_db_probe(
|
|
|
147
147
|
Accepte n'importe quel :class:`mic.datastorage.DataStorage` (``SqlDataStorage``,
|
|
148
148
|
``DocumentDataStorage``, ``GraphDataStorage``, ...) — tous ont la méthode
|
|
149
149
|
``check_health`` par contrat ABC.
|
|
150
|
+
|
|
151
|
+
Si ``check_health()`` **lève** (engine raise-based plutôt que bool), le
|
|
152
|
+
probe capture l'exception et retourne un ``ProbeResult`` unhealthy en
|
|
153
|
+
**préservant le ``name``** (sans laisser l'erreur remonter à
|
|
154
|
+
:func:`_run_probe_safely`, qui perdrait le nom canonique). Un consumer
|
|
155
|
+
n'a donc plus besoin d'écrire un probe try/except à la main juste pour
|
|
156
|
+
garder le nom.
|
|
150
157
|
"""
|
|
151
158
|
|
|
152
159
|
def _probe() -> ProbeResult:
|
|
153
160
|
t0 = time_fn()
|
|
154
|
-
|
|
161
|
+
try:
|
|
162
|
+
ok = storage.check_health()
|
|
163
|
+
except Exception as exc:
|
|
164
|
+
elapsed_ms = (time_fn() - t0) * 1000.0
|
|
165
|
+
return ProbeResult(
|
|
166
|
+
name=name,
|
|
167
|
+
healthy=False,
|
|
168
|
+
message=f"{type(exc).__name__}: {exc}",
|
|
169
|
+
latency_ms=round(elapsed_ms, 2),
|
|
170
|
+
)
|
|
155
171
|
elapsed_ms = (time_fn() - t0) * 1000.0
|
|
156
172
|
return ProbeResult(
|
|
157
173
|
name=name,
|
|
@@ -210,13 +226,26 @@ def make_callable_probe(
|
|
|
210
226
|
"""Construit un probe à partir d'un callable bool. Pour les cas
|
|
211
227
|
custom (upstream HTTP, message broker, ...).
|
|
212
228
|
|
|
213
|
-
``fn`` retourne ``True`` si OK, ``False`` sinon. Si ``fn`` lève
|
|
214
|
-
|
|
229
|
+
``fn`` retourne ``True`` si OK, ``False`` sinon. Si ``fn`` **lève**, le
|
|
230
|
+
probe capture l'exception et retourne ``healthy=False`` en **préservant
|
|
231
|
+
le ``name``** (l'erreur ne remonte pas à :func:`_run_probe_safely`, qui
|
|
232
|
+
retomberait sur ``"_probe"``). Le nom canonique est donc garanti dans le
|
|
233
|
+
``ProbeResult``, succès comme échec — plus besoin d'un probe maison juste
|
|
234
|
+
pour ça.
|
|
215
235
|
"""
|
|
216
236
|
|
|
217
237
|
def _probe() -> ProbeResult:
|
|
218
238
|
t0 = time_fn()
|
|
219
|
-
|
|
239
|
+
try:
|
|
240
|
+
ok = fn()
|
|
241
|
+
except Exception as exc:
|
|
242
|
+
elapsed_ms = (time_fn() - t0) * 1000.0
|
|
243
|
+
return ProbeResult(
|
|
244
|
+
name=name,
|
|
245
|
+
healthy=False,
|
|
246
|
+
message=f"{type(exc).__name__}: {exc}",
|
|
247
|
+
latency_ms=round(elapsed_ms, 2),
|
|
248
|
+
)
|
|
220
249
|
elapsed_ms = (time_fn() - t0) * 1000.0
|
|
221
250
|
return ProbeResult(
|
|
222
251
|
name=name,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/.python-version
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/alembic/script.py.mako
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/modules/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/app/shared/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{mic_struct-0.0.1 → mic_struct-0.0.2}/template/{{cookiecutter.service_name}}/tools/bump_service.py
RENAMED
|
File without changes
|