Metadata-Version: 2.4
Name: pybasedb-json
Version: 0.3.0
Summary: Banco de dados local com JSON — schemas, server REST, media, zero dependencias
Author-email: Marcos Gomes <marcosgabrielgomes110@gmail.com>
Maintainer-email: Marcos Gomes <marcosgabrielgomes110@gmail.com>
License: MIT
Project-URL: Homepage, https://github.com/marcosgabrielgomes110-collab/Pybase
Project-URL: Documentation, https://github.com/marcosgabrielgomes110-collab/Pybase/tree/main/docs
Project-URL: Repository, https://github.com/marcosgabrielgomes110-collab/Pybase
Keywords: database,json,local,embedded,nosql,thread-safe,rest-api,schema,media
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Database
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
Requires-Python: >=3.10
Description-Content-Type: text/markdown

<p align="center">
  <img src="assets/logo/logo.png" width="120" alt="Pybase logo">
</p>

# Pybase

Base para criacao de bancos de dados locais com JSON. Zero dependencias, 100% stdlib.
Operacoes de escrita atomicas, thread-safe.

Filosofia **Lego**: cada modulo e independente — voce monta o que precisa.

## Instalacao

```bash
pip install pybasedb-json
```

Para o servidor REST (opcional):
```bash
pip install Flask
```

## Uso rapido

```python
from pybase import Database, Query, Server
from pybase.validation import Schema

# Banco de dados
db = Database("./data", "mydb", "senha").open("senha")

# Colecao com schema (opcional)
db.schema("users", Schema({
    "id": str, "name": str, "email": str,
    "age": (int, 0), "active": (bool, True),
}))
users = db.collection("users")
users.add({"id": "1", "name": "marcos", "email": "m@m.com"})

# SDK client
doc = users.doc("1").get()
users.where("age", "==", 30).get()

# Consultas
q = Query(users)
q.sort("name").limit(10).find(active=True)
q.find_one(name="ana")
q.exists(name="joao")

# Servidor REST (requer Flask)
Server(db).route("users").run(port=4560)
# Swagger UI: http://localhost:4560/mydb/docs/
```

## Modulos

| Modulo | Arquivo | Descricao | Deps |
|--------|---------|-----------|------|
| Database | `pybase/database.py` | Gerencia diretorio de tabelas JSON | 0 |
| Collection | `pybase/collections.py` | CRUD atomico thread-safe | 0 |
| Query | `pybase/query.py` | Consultas com sort/limit/offset | 0 |
| Schema | `pybase/validation.py` | Validacao de documentos | 0 |
| Server | `pybase/server.py` | REST API automatica + Swagger UI | Flask |
| Media | `pybase/media.py` | Upload/download de imagens | 0 |
| Backup | `pybase/backup.py` | Snapshot e restore | 0 |

## Estrutura

```
Pybase/
  pybase/
    __init__.py       # Database, Collection, Query, Server, ...
    database.py       # Database: init, open, collection, schema, drop
    collections.py    # Collection, SchemaCollection, DocRef, QueryBuilder
    query.py          # Query: find/find_one/exists + sort/limit/offset
    exceptions.py     # PybaseError > DatabaseError, CollectionError
    validation.py     # Schema, ValidationError
    server.py         # Server REST (Flask)
    media.py          # MediaManager
    index.py          # Index (hash O(1))
    hooks.py          # HooksCollection
    backup.py         # take, restore
    utils.py          # Utils: sha256 encode
  docs/               # Documentacao completa
  pyproject.toml
```

## Novidades da versao (0.3+)

- **Schema validation** — defina schemas opcionais por colecao, persistidos em disco, validacao automatica em `add`/`add_many`/`actualize`
- **Server REST** — `Server(db).route("x").run()` gera CRUD automatico com Swagger UI e OpenAPI spec
- **MediaManager** — upload de imagens (path, bytes, base64), CRUD de metadados, serve files via HTTP
- **SDK client** — `doc("id").get()`, `where("f", "==", "v").get()`
- **SchemaCollection** — auto-wrap quando schema existe, validacao parcial em updates
- **Backup** — `take()`/`restore()` com snapshot gzip atomico
- **Escrita atomica** — `.tmp` + `os.replace()` protege contra corrupcao
- **Path traversal fix** — nomes de colecao sanitizados com regex
- **Sort seguro** — tipos mistos (int + str) nao quebram mais
- **Indices em memoria** — `Index(field)` para lookups O(1)
- **Lifecycle hooks** — `HooksCollection` com callbacks before/after

## Documentacao

Veja [docs/](docs/index.md) com referencia completa de cada classe e metodo.

## Licenca

MIT
