Spaces:
Running
Running
# main.py o donde definas tus funciones | |
import firebase_admin | |
from firebase_functions import pubsub_fn, options | |
from firebase_admin import firestore, exceptions # Import exceptions for better error handling | |
# Inicializa Firebase Admin si no lo has hecho ya en tu proyecto | |
# Esto generalmente se hace una vez en el punto de entrada de tus funciones (ej. en __init__.py o al inicio de tu main.py) | |
# Puedes usar un bloque try/except para evitar reinicializar si ya está inicializado. | |
# try: | |
# firebase_admin.get_app() | |
# except ValueError: | |
# firebase_admin.initialize_app() | |
# Obtén una referencia a la base de datos de Firestore con el nombre 'nowme' | |
# Asegúrate de que firebase_admin.initializeApp() se haya ejecutado antes de obtener esta referencia. | |
# firestore.client() obtiene el cliente para la app por defecto, | |
# y luego .instance('nowme') especifica la base de datos con nombre. | |
db = firestore.client().instance('nowme') | |
def incrementar_segundos_python(event: pubsub_fn.CloudEvent) -> None: | |
""" | |
Cloud Function en Python activada por un programador | |
para incrementar el campo 'segundos' en un documento de Firestore. | |
""" | |
print(f"Function incrementar_segundos_python activada a las {event.time} por mensaje ID: {event.id}") | |
# Para este caso, no necesitamos los datos específicos del evento Pub/Sub | |
# Referencia al documento específico: colección 'nowme', documento 'sosa' | |
doc_ref = db.collection('nowme').document('sosa') | |
try: | |
# Usa update con FieldValue.increment para una actualización atómica segura | |
# Esto es especialmente bueno para valores numéricos que pueden ser | |
# modificados por múltiples fuentes al mismo tiempo. | |
doc_ref.update({ | |
"segundos": firestore.FieldValue.increment(1500) | |
}) | |
print("Campo 'segundos' actualizado con éxito (+1500) en el documento 'nowme/sosa'.") | |
except exceptions.NotFound: | |
print("Error: Documento nowme/sosa no encontrado. No se pudo actualizar.") | |
# Puedes decidir si quieres crear el documento si no existe, | |
# pero update() solo funciona si el documento ya existe. | |
# Si quieres crearlo si no existe, usarías set(..., merge=True). | |
# doc_ref.set({"segundos": 1500}, merge=True) # Ejemplo de cómo crear/actualizar | |
except Exception as e: | |
print(f"Error al actualizar el documento nowme/sosa: {e}") | |
# Puedes lanzar la excepción si quieres que Cloud Functions lo reporte como un fallo. | |
# raise e | |
pass # O simplemente pasar para que la Function no se marque como fallo en este caso | |
print("Fin de la ejecución de la Function.") | |