Skip to main content

Libreria para gestion de eventos en python

Project description

PAPA EVENTS - WIP

Libreria para facilitar la comunicación entre servicios con interfaz declarativa

Inicialización

La libreria necesita correr dentro de un event loop, se puede integrar con cualquier app que tenga uno o crear uno para correr standalone

from contextlib import asynccontextmanager

from fastapi import FastAPI
from papa_events import PapaApp


event_app = PapaApp(broker_uri="amqp://test:test@127.0.0.1/")


@asynccontextmanager
async def lifespan(_: FastAPI):
    await event_app.start()
    yield
    await event_app.stop()

    
app = FastAPI(lifespan=lifespan)
# Todo ejemplo event loop standalone

Consumo de eventos

Se decora la funcion que hará de controller para el evento, este tendrá un único parametro tipado con una subclase de pydantic.BaseModel

from pydantic import BaseModel


class NewClient(BaseModel):
    name: str
    age: int


# Consumo de 1 solo evento
@event_app.on_event(['user.created'], use_case_name="send_welcome_email_on_user_created")
async def email_sender(event: NewClient):
   """
   do stuff
   """

# Consumo de varios eventos
@event_app.on_event(['user.created, company.deleted'], use_case_name="update_bank_account_on_xxxx")
async def update_bank_account(event: NewClient):
   """
   do stuff
   """

# Consumo de varios eventos con wildcards
@event_app.on_event(['user.*'], use_case_name="user_log_on_user_event")
async def user_log(event: NewClient):
   """
   do stuff
   """

Publicación de eventos

  • De forma aislada
from pydantic import BaseModel


class NewClient(BaseModel):
    name: str
    age: int

event = NewClient(name="carlos", age=21)
papa_app.new_event("user.created", event)
  • Como resultado del procesamiento de un evento

Se manda automaticamente uno o varios eventos si el valor de retorno es una lista de diccionarios

from pydantic import BaseModel


class NewClient(BaseModel):
    name: str
    age: int

@event_app.on_event(['user.created'], use_case_name="send_email_on_user_created")
async def new_client(event: NewClient) -> list[dict]:
    """
   do stuff
   """
    return [{
        "name": "email.sended", # Event name
        "payload": # Event payload
            {
                "destination": "hola@test.com", 
                "body": "bienvenido"
            }
    }]

Flujo

El sistema genera tantas colas como casos de usos requieran los consumidores. El broker dirije automaticamente a tantas colas como sea necesario el evento.

  • Si falla el procesado del evento se manda a una cola de retry, donde espera 10 segundos y vuelve a encolar el mensaje
  • Si el numero de reintentos supera el campo retries del caso de uso se manda a una cola dlq donde permanecera hasta intervención manual.

flow

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

papa_events-0.106.0.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

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

papa_events-0.106.0-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

File details

Details for the file papa_events-0.106.0.tar.gz.

File metadata

  • Download URL: papa_events-0.106.0.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.3

File hashes

Hashes for papa_events-0.106.0.tar.gz
Algorithm Hash digest
SHA256 086999f9c7ee420a91f106d2caf248fced8a29f176706c7721fb8f53ef1f9fe3
MD5 039fe8ece830829e8501015d0ea642f3
BLAKE2b-256 6da89610fcea37fbca90aedd792359c2600edd1b7b0c6e2b42d24833aeeaaf95

See more details on using hashes here.

File details

Details for the file papa_events-0.106.0-py3-none-any.whl.

File metadata

File hashes

Hashes for papa_events-0.106.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c92ece4f23d8a232939f741f19403de715de70fc42d45586852c2954ff2f28d6
MD5 5ce3c77723d3e48a99b02e79d09c1734
BLAKE2b-256 73d9b71e0643e2442c12b5d9a180832a54436ec6a79a1097a23328e369a6265f

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