Skip to main content

SQLite mejorado con cifrado SQLCipher, caché en Redis y API REST asincrónica con FastAPI

Project description

SQLitePlus Enhanced

SQLitePlus Enhanced es un backend modular en Python que combina FastAPI, SQLite asincrónico y utilidades sincrónicas pensadas para despliegues híbridos.

🚀 Características destacadas

  • 🔄 Gestor asincrónico multibase con aiosqlite, bloqueo por base y reapertura automática por bucle de eventos.
  • 🔐 Autenticación JWT respaldada por un fichero externo de usuarios con contraseñas hasheadas mediante bcrypt.
  • 🔑 Compatibilidad opcional con SQLCipher tanto en la API como en la CLI sincrónica.
  • 💾 Herramientas de replicación: exportación a CSV, copias de seguridad incrementales con propagación de ficheros -wal/-shm y replicación hacia otras rutas.
  • 🧠 Esquemas validados con Pydantic para operaciones CRUD seguras.
  • 🧰 CLI sqliteplus implementada con Click para tareas administrativas sin servidor.

📦 Instalación

Requisitos mínimos

  • Python 3.10 o superior.
  • SQLite con soporte para WAL (activado por defecto).
  • Dependencias opcionales: Redis si deseas usar la capa de caché sincrónica.

Instalación local editable:

pip install -e .

Instalación desde PyPI:

pip install sqliteplus-enhanced

🔐 Configuración previa

La API y la CLI utilizan variables de entorno para mantener las credenciales fuera del código.

Variable Obligatoria Descripción
SECRET_KEY Clave utilizada para firmar los tokens JWT.
SQLITEPLUS_USERS_FILE Ruta a un JSON con hashes bcrypt de usuarios autorizados.
SQLITE_DB_KEY ⚙️ Clave SQLCipher opcional. Si se define, se intentará cifrar la base.

Generar secretos de ejemplo

export SECRET_KEY=$(python -c "import secrets; print(secrets.token_urlsafe(32))")
export SQLITE_DB_KEY=$(python -c "import secrets; print(secrets.token_hex(32))")

Crear el archivo de usuarios

  1. Instala bcrypt (ya incluido en las dependencias del proyecto).
  2. Ejecuta el siguiente fragmento para generar el JSON con el usuario admin:
python - <<'PY'
import bcrypt, json, pathlib

password = "admin"
hash_ = bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()
path = pathlib.Path("users.json")
path.write_text(json.dumps({"admin": hash_}, indent=2), encoding="utf-8")
print(f"Archivo generado en {path.resolve()}")
PY

export SQLITEPLUS_USERS_FILE="$(pwd)/users.json"

📡 Ejecutar el servidor

uvicorn sqliteplus.main:app --reload

Endpoints relevantes:


🧪 Pruebas automatizadas

pytest -v

El gestor asincrónico detecta automáticamente ejecuciones de pytest mediante PYTEST_CURRENT_TEST y reinicia las bases temporales para garantizar independencia entre tests.


🛠 Uso del CLI sqliteplus

sqliteplus --help

Subcomandos principales:

  • sqliteplus init-db – inicializa la base local y registra el evento en logs.
  • sqliteplus execute "<SQL>" – ejecuta consultas de escritura; propaga errores como excepciones de Click.
  • sqliteplus fetch "<SQL>" – devuelve consultas de lectura.
  • sqliteplus export-csv <tabla> <archivo.csv> – exporta datos con nombres de columna.
  • sqliteplus backup – genera copias en backups/ incluyendo ficheros WAL/SHM.

Puedes definir SQLITE_DB_KEY o pasar la opción --cipher-key para aplicar SQLCipher:

export SQLITE_DB_KEY="$(python -c "import secrets; print(secrets.token_hex(32))")"
sqliteplus --cipher-key "$SQLITE_DB_KEY" backup

🧰 Estructura del proyecto

sqliteplus/
├── main.py                # Punto de entrada FastAPI
├── api/                   # Endpoints REST protegidos
├── auth/                  # Gestión JWT + servicio de credenciales externas
├── core/                  # Gestor asincrónico y esquemas Pydantic
├── utils/                 # Herramientas sincrónicas, replicación y CLI
└── tests/                 # Suite de pruebas (httpx, pytest-asyncio)

📝 Licencia

MIT License © Adolfo González Hernández

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sqliteplus_enhanced-1.0.7.tar.gz (33.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sqliteplus_enhanced-1.0.7-py3-none-any.whl (26.2 kB view details)

Uploaded Python 3

File details

Details for the file sqliteplus_enhanced-1.0.7.tar.gz.

File metadata

  • Download URL: sqliteplus_enhanced-1.0.7.tar.gz
  • Upload date:
  • Size: 33.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for sqliteplus_enhanced-1.0.7.tar.gz
Algorithm Hash digest
SHA256 0abcc8b74ac4c4937079674c836c4f6770eee9fe7cf48ec0eeee145c42d4de7e
MD5 bcb4a6e5634ddac22192ae0b01a84584
BLAKE2b-256 83df36bb03ab2043cb756737c9f02794d75a42b6432ee980052657afb58ae3b6

See more details on using hashes here.

File details

Details for the file sqliteplus_enhanced-1.0.7-py3-none-any.whl.

File metadata

File hashes

Hashes for sqliteplus_enhanced-1.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 f87d1ef9a5f7744aac069451d9ddd9a33ebff8584ce86b01b61433831569b6da
MD5 ebdb30edb3e82e3fcf36224f48fbe6c9
BLAKE2b-256 444109046a9ee627452d263aef9f7461a1a61fc3830f72fadb1a6ad0748bb2dc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page