Metadata-Version: 2.4
Name: fakedb
Version: 0.1.0
Summary: Asynchronous fake PostgreSQL and MongoDB interfaces backed by local or remote storage.
Author: Fake GCS DB Maintainers
License: MIT
Project-URL: Home, https://github.com/eduardo/fakedb
Project-URL: Source, https://github.com/eduardo/fakedb
Keywords: gcs,postgresql,mongodb,asyncio,testing
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Provides-Extra: extras
Requires-Dist: pydantic>=1.10; extra == "extras"
Requires-Dist: sqlmodel>=0.0.8; extra == "extras"
Requires-Dist: sqlalchemy>=1.4; extra == "extras"
Provides-Extra: cloud
Requires-Dist: google-cloud-storage>=2.0; extra == "cloud"
Provides-Extra: dev
Requires-Dist: pytest>=7; extra == "dev"
Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
Requires-Dist: pytest-cov>=4; extra == "dev"

# fakedb

`fakedb` oferece implementações assíncronas de bancos de dados fake inspirados
em PostgreSQL e MongoDB, persistindo dados em sistemas de arquivos locais ou em
backends compatíveis com Google Cloud Storage. Ele é útil para protótipos,
testes e ambientes onde provisionar um banco real seria custoso ou demorado.

## Recursos principais

- `FakePostgresDB`: API parecida com SQLAlchemy/SQLModel, com suporte opcional a
  validação por Pydantic e materialização de resultados em modelos tipados.
- `FakeMongoDB`: coleções estilo MongoDB com binding opcional a modelos
  Pydantic.
- Backends plugáveis via `StorageBackend`, incluindo uma implementação local e
  uma variante para GCS.
- Locking distribuído simples para coordenar operações concorrentes.

## Instalação

```bash
pip install fakedb
```

Dependências opcionais:

```bash
pip install "fakedb[extras]"      # Pydantic, SQLModel, SQLAlchemy
pip install "fakedb[cloud]"       # google-cloud-storage
```

## Exemplos rápidos

```python
import asyncio
from fakedb import FakePostgresDB, LocalStorageBackend

async def demo():
    backend = LocalStorageBackend("/tmp/fake-db")
    db = FakePostgresDB(backend, "analytics")
    await db.create_table("users", {"id": "int", "name": "str"})
    await db.insert("users", [{"id": 1, "name": "Alice"}])
    rows = await db.query("users")
    print(rows)

asyncio.run(demo())
```

## Desenvolvimento

```bash
make test          # executa a suíte com pytest
make coverage      # relatórios de cobertura
```

Sinta-se à vontade para abrir issues e PRs com melhorias.
