Metadata-Version: 2.4
Name: mic-datastore
Version: 0.1.0
Summary: MIC — persistance & messaging (datastorage, cache, shard, locking, outbox, eventbus, queue, idempotency, response_cache, read_models, realtime).
License-Expression: MIT
Requires-Python: >=3.14
Requires-Dist: mic-core
Provides-Extra: document
Requires-Dist: pymongo<5,>=4.10; extra == 'document'
Provides-Extra: graph
Requires-Dist: neo4j<6,>=5.27; extra == 'graph'
Provides-Extra: kafka
Requires-Dist: aiokafka<1,>=0.12; extra == 'kafka'
Provides-Extra: messaging
Requires-Dist: aiokafka<1,>=0.12; extra == 'messaging'
Requires-Dist: nats-py<3,>=2.7; extra == 'messaging'
Provides-Extra: mongo
Requires-Dist: pymongo<5,>=4.10; extra == 'mongo'
Provides-Extra: mysql
Requires-Dist: alembic<2,>=1.13; extra == 'mysql'
Requires-Dist: pymysql<2,>=1.1; extra == 'mysql'
Requires-Dist: sqlmodel<0.1,>=0.0.38; extra == 'mysql'
Provides-Extra: nats
Requires-Dist: nats-py<3,>=2.7; extra == 'nats'
Provides-Extra: neo4j
Requires-Dist: neo4j<6,>=5.27; extra == 'neo4j'
Provides-Extra: oracle
Requires-Dist: alembic<2,>=1.13; extra == 'oracle'
Requires-Dist: oracledb<3,>=2.5; extra == 'oracle'
Requires-Dist: sqlmodel<0.1,>=0.0.38; extra == 'oracle'
Provides-Extra: postgres
Requires-Dist: alembic<2,>=1.13; extra == 'postgres'
Requires-Dist: psycopg[binary]<4,>=3.2; extra == 'postgres'
Requires-Dist: sqlmodel<0.1,>=0.0.38; extra == 'postgres'
Provides-Extra: redis
Requires-Dist: redis<7,>=5.2; extra == 'redis'
Provides-Extra: sql
Requires-Dist: alembic<2,>=1.13; extra == 'sql'
Requires-Dist: sqlmodel<0.1,>=0.0.38; extra == 'sql'
Provides-Extra: ws
Requires-Dist: mic-core[auth]; extra == 'ws'
Requires-Dist: redis<7,>=5.2; extra == 'ws'
Description-Content-Type: text/markdown

# mic-datastore

Briques de **persistance & messaging** du framework MIC. Dépend de `mic-core`
(DAG `platform → data → core` — jamais l'inverse).

## Modules

| Module | Rôle |
| -- | -- |
| `mic.datastorage` | Backends de données : `SqlDataStorage`, `DocumentDataStorage` (MongoDB), `GraphDataStorage` (Neo4j), variantes in-memory |
| `mic.cache` | Cache (in-memory / Redis) + `RevokeBlacklist` (révocation JWT) |
| `mic.shard` | Sélection de shard / session factory |
| `mic.locking` | Verrous distribués (in-memory / Redis) |
| `mic.outbox` | Pattern transactional outbox + dispatcher |
| `mic.eventbus` | Pub/sub synchrone (in-memory / Redis Streams) |
| `mic.queue` | Event bus async durable (NATS JetStream / Kafka) |
| `mic.idempotency` | Store d'idempotence |
| `mic.response_cache` | Middleware de cache de réponses HTTP |
| `mic.read_models` | Read-models (compteurs, leaderboards, timelines, HLL) |
| `mic.realtime` | WebSocket realtime (backend Redis Streams) |

Namespace **PEP 420** (pas de `mic/__init__.py`).

## Installation

```bash
pip install "mic-datastore[postgres,redis]"
```

## Extras

| Extra | Tire |
| -- | -- |
| `sql` | sqlmodel + alembic |
| `postgres` / `mysql` / `oracle` | `sql` + driver (psycopg / PyMySQL / oracledb) |
| `mongo` (alias `document`) | pymongo |
| `neo4j` (alias `graph`) | neo4j |
| `redis` | redis |
| `nats` / `kafka` | nats-py / aiokafka |
| `messaging` | `nats` + `kafka` |
| `ws` | `redis` + `mic-core[auth]` |

## Versionnage

Brique volatile — reste en `0.x` plus longtemps que `mic-core`. Contraindre
avec `>=0.1,<1`. Release : `make release-pkg PKG=data VERSION=x.y.z` → tag
`data-vX.Y.Z` (cf. [`../../RELEASING.md`](../../RELEASING.md)).
