Metadata-Version: 2.4
Name: mic-core
Version: 0.1.2
Summary: MIC — fondations agnostiques (contracts, model, http, auth, client, observability, healthcheck, resilience, cli, grpc).
License-Expression: MIT
Requires-Python: >=3.14
Requires-Dist: pydantic>=2.6
Provides-Extra: auth
Requires-Dist: pyjwt<3,>=2.13; extra == 'auth'
Provides-Extra: cli
Provides-Extra: client
Requires-Dist: httpx<1,>=0.27; extra == 'client'
Provides-Extra: fastapi
Requires-Dist: fastapi<1,>=0.115; extra == 'fastapi'
Requires-Dist: starlette<2,>=1.0.1; extra == 'fastapi'
Requires-Dist: uvicorn[standard]<1,>=0.30; extra == 'fastapi'
Provides-Extra: full-observability
Requires-Dist: opentelemetry-api<2,>=1.27; extra == 'full-observability'
Requires-Dist: opentelemetry-exporter-otlp-proto-http<2,>=1.27; extra == 'full-observability'
Requires-Dist: opentelemetry-sdk<2,>=1.27; extra == 'full-observability'
Requires-Dist: prometheus-client<1,>=0.20; extra == 'full-observability'
Requires-Dist: sentry-sdk<3,>=2.20; extra == 'full-observability'
Requires-Dist: urllib3<3,>=2.7; extra == 'full-observability'
Provides-Extra: grpc
Requires-Dist: grpcio-health-checking<2,>=1.66; extra == 'grpc'
Requires-Dist: grpcio<2,>=1.66; extra == 'grpc'
Provides-Extra: litestar
Requires-Dist: litestar<3,>=2.13; extra == 'litestar'
Provides-Extra: observability
Requires-Dist: opentelemetry-api<2,>=1.27; extra == 'observability'
Requires-Dist: prometheus-client<1,>=0.20; extra == 'observability'
Provides-Extra: sentry
Requires-Dist: sentry-sdk<3,>=2.20; extra == 'sentry'
Requires-Dist: urllib3<3,>=2.7; extra == 'sentry'
Provides-Extra: tracing
Requires-Dist: opentelemetry-exporter-otlp-proto-http<2,>=1.27; extra == 'tracing'
Requires-Dist: opentelemetry-sdk<2,>=1.27; extra == 'tracing'
Description-Content-Type: text/markdown

# mic-core

Fondations agnostiques du framework **MIC** (Model / Interface / Controller).
`mic-core` est le socle : il ne dépend d'aucune brique de persistance ni de
plateforme (voir le DAG `platform → data → core` dans
[`../README.md`](../README.md)).

## Modules

| Module | Rôle |
| -- | -- |
| `mic.contracts` | Contrats / DTO partagés inter-couches |
| `mic.model` | Erreurs de domaine (`DomainError`, `TransientError`), value objects |
| `mic.http` | Spécifications HTTP **agnostiques** (`HttpRouteSpec`, `HttpResponseSpec`, `HttpCookieSpec`, `HttpRequestContext`) |
| `mic.fastapi` | Adaptateur FastAPI (router builder, middlewares) — extra `[fastapi]` |
| `mic.litestar` | Adaptateur Litestar — extra `[litestar]` |
| `mic.auth` | JWT service-to-service (signer/verifier) — extra `[auth]` |
| `mic.client` | Client HTTP inter-services (httpx) — extra `[client]` |
| `mic.observability` | Logs JSON, métriques Prometheus, traces OTel — extra `[observability]` / `[full-observability]` |
| `mic.healthcheck` | Sondes liveness/readiness |
| `mic.resilience` | Circuit breaker, retry, timeouts |
| `mic.cli` | Squelette CLI (argparse stdlib) — extra `[cli]` |
| `mic.grpc` | Transport gRPC — extra `[grpc]` |

Le paquet est un **namespace PEP 420** (pas de `mic/__init__.py`) : `import mic.*`
reste identique côté consommateur, qu'on installe `mic-core` seul ou avec
`mic-datastore` / `mic-platform`.

## Installation

```bash
pip install "mic-core[fastapi,auth,client,observability]"
```

## Extras

| Extra | Tire |
| -- | -- |
| `fastapi` | fastapi + uvicorn[standard] + starlette |
| `litestar` | litestar |
| `auth` | pyjwt |
| `client` | httpx |
| `observability` | prometheus-client + opentelemetry-api |
| `sentry` | sentry-sdk (+ urllib3 patché) |
| `tracing` | opentelemetry-sdk + exporter OTLP |
| `full-observability` | `observability` + `sentry` + `tracing` |
| `grpc` | grpcio + grpcio-health-checking |
| `cli` | (rien — argparse stdlib) |

## Versionnage

`mic-core` démarre en `0.x` (pré-releases `dev`/`rc` sur TestPyPI). Il **graduera
en `1.0`** une fois les frontières prouvées et les services migrés (fin du split,
cf. [ADR-0001](../../docs/decisions/ADR-0001-split-mic-struct-into-three-packages.md)).
En `0.x`, un bump *minor* peut porter un changement cassant (SemVer 0.x) —
contraindre avec `>=0.1,<1`.

## Release

Voir [`../../RELEASING.md`](../../RELEASING.md) § « Release par paquet »
(`make release-pkg PKG=core VERSION=x.y.z` → tag `core-vX.Y.Z`).
