Metadata-Version: 2.4
Name: pancakes-orm
Version: 6.0.2
Summary: ORM sqlite3 based. Listo para integrar con frontend.
Author-email: Andres Alberto Lopez Mendoza <andres.lopez.full.dev@gmail.com>
License: Apache-2.0
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Intended Audience :: Developers
Classifier: Topic :: Database
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: python-dotenv
Requires-Dist: fastapi[standard]
Requires-Dist: pydantic
Dynamic: license-file

# PanCakesORM

![static](https://img.shields.io/badge/python-python?style=for-the-badge&logo=python&logoColor=white&labelColor=black&color=yellow)
![static](https://img.shields.io/badge/sqlite-sqlite?style=for-the-badge&logo=sqlite&logoColor=white&labelColor=black&color=yellow)
![static](https://img.shields.io/badge/pytest-pytest?style=for-the-badge&logo=pytest&logoColor=white&labelColor=black&color=yellow)
![static](https://img.shields.io/badge/git--hub-git--bun?style=for-the-badge&logo=github&logoColor=white&labelColor=black&color=yellow)
![static](https://img.shields.io/badge/pypi-pypi?style=for-the-badge&logo=pypi&logoColor=white&labelColor=black&color=yellow)
![static](https://img.shields.io/badge/ipdb-ipdb?style=for-the-badge&logoColor=white&label=debug&labelColor=black&color=yellow)
![static](https://img.shields.io/badge/fastapi-fastapi?style=for-the-badge&logo=fastapi&logoColor=white&labelColor=black&color=yellow)
![static](https://img.shields.io/badge/linux-linux?style=for-the-badge&logo=linux&logoColor=white&labelColor=black&color=yellow)
![static](https://img.shields.io/badge/macos-mac?style=for-the-badge&logo=apple&logoColor=white&labelColor=black&color=yellow)

![image](assets/banner.png)

# PanCakesORM 🥞

_Version 6.0.0_

- Metodo `container()` mejorado - Permite ser integrado rapidamente con flet. Entrega metadata mejor organizada.
- Campos compute="" - Definir funciones y asignarlas como valor a las celdas de un campo.
- Campos `Date`, `TimeStamp` & `One2Many` agregados. Metodo `container()` parsea los datos a `strings` y viceversa a `datetime`.

**Simplifica tu manejo de bases de datos**

PanCakesORM es una librería de mapeo objeto-relacional (ORM) para Python y SQLite3 que prioriza la legibilidad y la velocidad de desarrollo. Si buscas la potencia de SQL con la elegancia de una sintaxis declarativa y moderna, PanCakesORM es para ti.

Pancakes ORM se integra con facilidad con `pandas, streamlit, flet, fastapi` asi como con el framework modular ERP tambien desarrollado por el autor AeroGenCreator `ClayPy`.

---

## 🚀 Inicio Rápido

Obtener PanCakesORM es tan sencillo como un comando. Disponible directamente en **PyPI**:

```bash
# En tu directoriod e proyecto

# Crea entorno de desarrollo
python3 -m venv .venv

# Activa entorno
source .venv/bin/activate

# Instala PanCakesORM
pip install pancakes-orm

```

**Agrega tus rutas**

En la raiz de proyecto agrega el archivo .env "De esta manera controlas `directorio` base de datos y fichero `Sqlite3` -> Base de Datos."

```env
LOG=INFO
DB_DIR=data
DB_FILE=database.sqlite3
```

**Tu primera tabla en segundos**

```python
from pancakes.models.model import PanCakesORM
from pancakes.sql import datatype

class User(PanCakesORM):  # Tu fichero .env carga las rutas
    _table = "user"
    _depends = "self"
    
    name = datatype.Char(comment="User Name")
    age = datatype.Integer(comment="User Age")

# ¡Insertar!
User.i(user=[(None, "Omar", 30)])  # <- El primer elemento de tupla es el "id"
# ¡Sqlit3 Lo maneja por ti!

# ¡Actualiza!
User.u(user__user_name__user_id__same=["Juan", 1])

# ¡Listo para consultar!
users = User.filter(user__age__gt=18).all().dictionary()
```

![image](assets/application/mounted-module.png)

- [Repositorio Pypi](https://pypi.org/project/pancakes-orm/)

- [Documentacion Oficial](https://fringe-edge-3f8.notion.site/PanCakesORM-3408851a844d80a39dd9c813c88cfb16)

### 💪 Fortalezas y Robustez

PanCakesORM no es solo una cara bonita; está construido para ser el motor confiable de tus aplicaciones:

    Sintaxis Declarativa Fluida: Olvídate de concatenar strings de SQL. 
    Usa métodos encadenados (.filter(), .link(), .sort()) que se leen como lenguaje natural.

    Escalabilidad: Gracias a su gestión eficiente de esquemas y su sistema de inyección segura,
    puede crecer desde un pequeño script hasta aplicaciones empresariales complejas.

    Integración Moderna: Diseñado para brillar en ecosistemas de alto rendimiento:

        FastAPI: Tipado compatible para respuestas JSON rápidas.

        Streamlit: Ideal para aplicaciones de datos donde la velocidad de desarrollo es clave.

    Calidad Garantizada: La robustez de la librería está respaldada por una batería
    de más de 180 pruebas automatizadas utilizando pytest. Puedes consultar la suite completa en la carpeta /tests.

![image](assets/application/fastapi.png)

### 🏗️ Arquitectura de Consultas (QueryBox)

El corazón de PanCakesORM es el QueryBox, que permite realizar operaciones complejas de forma visual y estructurada:

    Joins Automáticos: Usa .link('tabla') y deja que el ORM gestione las llaves foráneas por ti.

    Agregaciones: Calcula SUM, AVG, COUNT directamente en el select con sufijos como __avg.

    Lógica Booleana: Encadena condiciones con __and y __or de forma nativa en los argumentos.

### 🗂️ Jerarquia de Directorios

```
        .
        └── pancakes/
            ├── models/
            │   └── model.py
            ├── sql/
            │   └── datatype.py
            ├── valid/
            │   ├── query_validator.py
            │   └── filter_validator.py
            ├── orm/
            │   ├── insert.py
            │   ├── update.py
            │   ├── delete.py
            │   └── query.py
            ├── tools/
            │   └── functions.py
            └── abstract/
                ├── query_box.py
                └── abstract_box.py
```

### 🛠️ Requisitos

    Python 3.12+

    SQLite3

    fastapi[standard]

    python-dotenv

### ⚠️ Limitaciones

A pesar de la integración con FastAPI el funcionamiento de PanCakesORM es sincrónico. Por tanto la estructura no esta pensada para manejar corrutinas.
