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/-shmy replicación hacia otras rutas. - 🧠 Esquemas validados con Pydantic para operaciones CRUD seguras.
- 🧰 CLI
sqliteplusimplementada 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
- Instala
bcrypt(ya incluido en las dependencias del proyecto). - 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:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
🧪 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 enlogs.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 enbackups/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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0abcc8b74ac4c4937079674c836c4f6770eee9fe7cf48ec0eeee145c42d4de7e
|
|
| MD5 |
bcb4a6e5634ddac22192ae0b01a84584
|
|
| BLAKE2b-256 |
83df36bb03ab2043cb756737c9f02794d75a42b6432ee980052657afb58ae3b6
|
File details
Details for the file sqliteplus_enhanced-1.0.7-py3-none-any.whl.
File metadata
- Download URL: sqliteplus_enhanced-1.0.7-py3-none-any.whl
- Upload date:
- Size: 26.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f87d1ef9a5f7744aac069451d9ddd9a33ebff8584ce86b01b61433831569b6da
|
|
| MD5 |
ebdb30edb3e82e3fcf36224f48fbe6c9
|
|
| BLAKE2b-256 |
444109046a9ee627452d263aef9f7461a1a61fc3830f72fadb1a6ad0748bb2dc
|