Metadata-Version: 2.4
Name: pybasedb-json
Version: 0.2.0
Summary: Banco de dados local com JSON — zero dependencias, 100% stdlib, thread-safe
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
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: Topic :: Database
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.10
Description-Content-Type: text/markdown

<p align="center">
  <img src="site/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.

## Instalacao

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

## Uso

```python
from pybase import Database, Query

db = Database("./data", "mydb", "minha-senha").open("minha-senha")

users = db.collection("users")

users.add({"id": "a1", "name": "marcos", "age": 25})
users.add_many([
    {"id": "a2", "name": "ana",    "age": 30},
    {"id": "a3", "name": "marcos", "age": 40},
])

print(len(users))                    # 3
print(users.count(name="marcos"))    # 2

for doc in users:
    print(doc["name"])               # marcos, ana, marcos

doc = users.get("a1")                # por id
print(doc)                           # {"id": "a1", "name": "marcos", "age": 25}

q = Query(users)
print(q.find(name="marcos"))                       # [doc_a1, doc_a3]
print(q.sort("age", reverse=True).limit(1).find()) # [doc_a3]
print(q.find_one(name="ana"))                      # {"id": "a2", ...}
print(q.exists(name="joao"))                       # False

users.actualize({"age": 26}, name="marcos")
users.rem(id="a3")

users.drop()    # limpa colecao
# db.drop("minha-senha")  # deleta banco inteiro
```

## Estrutura

```
Pybase/
  pybase/
    __init__.py       # exports: Database, Collection, Query, PybaseError, ...
    database.py       # Database: gerencia diretorio de tabelas JSON
    collections.py    # Collection: CRUD atomico com lock por colecao
    query.py          # Query: find/find_one/exists + sort/limit/offset
    exceptions.py     # PybaseError > DatabaseError, CollectionError
    utils.py          # Utils: sha256 encode
  pyproject.toml
```

## Documentacao

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