Skip to content

theleerise/BKLibPg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BKLibPg

BKLibPg es una librería modular escrita en Python que proporciona una capa de abstracción avanzada para trabajar con bases de datos PostgreSQL. Ofrece un sistema de modelos validables con tipado fuerte, gestión dinámica de consultas y un QueryBuilder flexible para filtrado y paginación.


🚀 Características principales

  • 📦 Modelos personalizables con validación a nivel de aplicación.
  • 🧠 Tipos de datos enriquecidos (StringType, IntegerType, DateType, JsonType, etc.) con metainformación.
  • 🛠️ Gestores de acceso (Manager) extensibles para operaciones CRUD complejas.
  • 🔍 BKPgQueryBuilder para construir consultas SQL dinámicas con filtros avanzados.
  • 🔄 Conversión automática a modelos Pydantic para integración con FastAPI.
  • Validación y documentación de cada campo según sus metadatos.

📁 Estructura del proyecto

BKLibPg/
├── managers/                # Managers CRUD y de consulta especializada
├── model                    # Crea objetos python que representen registros de la base de datos
├── data_types               # Objetos que representan tipos de datos
├── query_builder            # Crear querys con filtros y operadores SQL
├── connection_database      # Crea conexiones y pool de coneciones para realizar peticiones a la base de datos
└── config                   # Configuraciones base aplicadas a los demas mnodulos

🧩 Ejemplo de uso

1. Definir un modelo personalizado

from bklibpg.core import Model
from bklibpg.models import StringType, IntegerType

class Usuario(Model):
    id = IntegerType(db_name='id_usuario', nullable=False, doc="ID del usuario")
    nombre = StringType(nullable=False)
    email = StringType(nullable=True)

2. Validar datos

usuario = Usuario.from_dict({
    "id": 123,
    "nombre": "Juan",
    "email": None
})
usuario.validate()

3. Manager con filtros dinámicos

from bklibpg.managers import BasePgManager

class ManagerUsuarios(BasePgManager):
    def get_sql_select(self):
        return "SELECT * FROM usuarios"

manager = ManagerUsuarios()
filters = [{"field": "nombre", "op": "ILIKE", "value": "%juan%"}]
resultado = manager.getlist(filters=filters)

🔧 Tipos de datos disponibles

  • StringType
  • IntegerType
  • FloatType
  • BooleanType
  • DateType
  • DateTimeType
  • JsonType
  • ArrayType
  • CustomType (definido por el usuario)

Cada tipo soporta:

  • db_name: nombre en la base de datos
  • nullable: permite None
  • default: valor por defecto
  • doc: descripción

🔗 Integración con FastAPI

Los modelos pueden convertirse en esquemas Pydantic automáticamente:

UsuarioPydantic = Usuario.to_pydantic_model()

Ejemplo en una ruta de FastAPI

from fastapi import FastAPI
from bklibpg.core import Model
from bklibpg.models import StringType

class Producto(Model):
    nombre = StringType(nullable=False)

ProductoSchema = Producto.to_pydantic_model()

app = FastAPI()

@app.post("/productos")
async def crear_producto(producto: ProductoSchema):
    p = Producto.from_pydantic(producto)
    p.validate()
    return {"status": "ok", "producto": p.to_dict()}

⚙️ Requisitos

  • Python 3.9+
  • psycopg o psycopg2
  • (Opcional) FastAPI para uso web

🧪 Pruebas

Para ejecutar los tests:

pytest tests/

📦 Instalación como paquete

  1. Clona el repositorio:
git clone https://github.com/tuusuario/BKLibPg.git
cd BKLibPg
  1. Instala localmente:
pip install -e .
  1. O crea un paquete con pyproject.toml:
[project]
name = "bklibpg"
version = "0.1.0"
description = "Librería avanzada para PostgreSQL con validación de modelos"
authors = [{ name = "Tu Nombre", email = "[email protected]" }]
dependencies = ["psycopg[binary]>=3.1", "pydantic>=2", "fastapi"]

[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"

📌 Estado del proyecto

BKLibPg está en desarrollo activo. Aún no se recomienda para producción sin pruebas específicas en tu entorno.


About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages