ODM para Firestore utilizando Pydantic y operaciones asíncronas
Project description
Firestore Pydantic ODM es una librería para interactuar con Google Cloud Firestore de forma sencilla y eficiente. Utiliza Pydantic para la validación y serialización de datos y ofrece soporte para operaciones asíncronas, batch writes, transacciones, paginación, proyecciones y más.
Esta librería está diseñada para facilitar el desarrollo de aplicaciones que requieren almacenar y consultar datos en Firestore, ofreciendo una interfaz Pythonic y desacoplada que permite cambiar fácilmente el cliente (por ejemplo, para usar emuladores o mocks en testing).
Características
CRUD Asíncrono: Soporte completo para crear, leer, actualizar y eliminar documentos de Firestore usando async/await.
Validación con Pydantic: Define tus modelos de datos con validación automática, asegurando la integridad de la información.
Consultas Avanzadas: Realiza búsquedas con filtros, proyecciones (seleccionar solo ciertos campos) y ordenación.
Batch Operations y Transacciones: Agrupa múltiples operaciones de escritura y ejecuta transacciones de forma atómica para mayor eficiencia y coherencia.
Soporte para Emulador y Testing: Configura de forma sencilla el uso del emulador de Firestore o integra mocks para pruebas unitarias.
Fácil Integración: Se integra sin problemas en cualquier proyecto Python.
Instalación
Desde el Código Fuente
Clona el repositorio:
git clone https://github.com/santosdevco/firestore-pydantic-odm cd firestore_pydantic_odmInstala las dependencias y el paquete en modo editable:
pip install -e .
Dependencias
Revisa el archivo requirements.txt para conocer las dependencias necesarias, entre las que se incluyen: - pydantic - google-cloud-firestore>=2.0.0 - pytest y pytest-asyncio (para testing)
Estructura del Proyecto
La organización recomendada es la siguiente:
firestore_pydantic_odm/
__init__.py # Exposición de la API pública
firestore_model.py # Lógica principal del ODM
firestore_fields.py # Descriptores y manejo de filtros
enums.py # Enumeraciones (e.g., BatchOperation)
firestore_client.py # Inicialización y gestión del cliente Firestore
tests/
conftest.py # Fixtures para pruebas
tests.py # Pruebas unitarias
Dockerfile # Configuración Docker
docker-compose.yaml # Configuración Docker Compose
requirements.txt # Dependencias del proyecto
pytest.ini # Configuración global de Pytest
setup.py # Script de instalación del paquete
Nota: El archivo __init__.py es fundamental para que Python reconozca el directorio firestore_pydantic_odm como un paquete. En él se exportan las clases y funciones principales de la librería.
Uso Básico
Definir un Modelo
Crea tus modelos extendiendo la clase base BaseFirestoreModel:
from firestore_pydantic_odm import BaseFirestoreModel
class User(BaseFirestoreModel):
class Settings:
name = "users" # Nombre de la colección en Firestore
name: str
email: str
Inicializar el Cliente de Firestore
Antes de utilizar los modelos, inicializa la conexión:
from firestore_pydantic_odm import FirestoreDB, BaseFirestoreModel
# Inicializa el cliente, pudiendo especificar el host del emulador si es necesario
db = FirestoreDB(project_id="tu-proyecto", emulator_host="localhost:8080")
# Inyecta el cliente en la clase base para que todos los modelos lo utilicen
BaseFirestoreModel.initialize_db(db)
Operaciones CRUD
Crear y Guardar un Documento
user = User(name="Alice", email="alice@example.com")
await user.save()
Actualizar un Documento
user.email = "nueva_alice@example.com"
await user.update()
Eliminar un Documento
await user.delete()
Obtener un Documento por ID
user = await User.get("id_del_documento")
Consultas
Buscar Documentos
Realiza búsquedas utilizando filtros:
async for user in User.find(filters=[User.name == "Alice"]):
print(user)
Buscar un Único Documento
user = await User.find_one(filters=[User.email == "alice@example.com"])
Usar Proyecciones
Si solo necesitas ciertos campos, puedes usar un modelo de proyección:
from pydantic import BaseModel
class UserProjection(BaseModel):
name: str
async for user in User.find(filters=[User.name == "Alice"], projection=UserProjection):
print(user)
Batch Operations y Transacciones
Operaciones en Batch
from firestore_pydantic_odm import BatchOperation
ops = [
(BatchOperation.CREATE, User(name="Bob", email="bob@example.com")),
(BatchOperation.UPDATE, user),
(BatchOperation.DELETE, another_user)
]
await User.batch_write(ops)
Testing
pytest
El archivo pytest.ini y conftest.py (ubicado en la raíz o en el directorio tests/) proporcionan la configuración y las fixtures necesarias.
Contribuir
¡Contribuciones son bienvenidas! Si deseas aportar mejoras:
Haz un fork del repositorio.
Crea una rama para tu feature o corrección.
Realiza tus cambios y asegúrate de que todos los tests pasen.
Envía un Pull Request describiendo tus mejoras.
Licencia
Distribuido bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.
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 firestore_pydantic_odm-0.1.1.tar.gz.
File metadata
- Download URL: firestore_pydantic_odm-0.1.1.tar.gz
- Upload date:
- Size: 11.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a509326af0ab4590dcf2d5031e84a1af81629563a07e29f74bbc4e67a13ef4d4
|
|
| MD5 |
ff75fe06ca957cbdf1d51099acdc1eaa
|
|
| BLAKE2b-256 |
bc31b66330d73d9ed9a68ef41254e71970419e3bd1718b762dc395b1b13cb14a
|
File details
Details for the file firestore_pydantic_odm-0.1.1-py3-none-any.whl.
File metadata
- Download URL: firestore_pydantic_odm-0.1.1-py3-none-any.whl
- Upload date:
- Size: 10.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
514202c8503fffefc0b0804e69b679ce80277187ebeb8abf09681e4845432df0
|
|
| MD5 |
5e4394fa9e7c426816e93a5497ddd98d
|
|
| BLAKE2b-256 |
6d4028a4624145696501e68d451d0648076bc97c43fa4fdadb7c60c943a56029
|