paquete utilizado para enviar mensajes entre los módulos y el core en un proyecto académico
Project description
sender-python
Descripción
Este es un proyecto académico para la UADE, un paquete que permite la comunicación entre los distintos módulos a través del Core.
Tabla de Contenidos
Instalación
Para instalar el paquete abrà una terminal en el directorio del proyecto (Shift + Click derecho)..
..y escribÃ:
pip install Squad1CoreSender
Uso
Usá el proyecto de la siguiente manera:
- Iniciá dos conexiones con el servidor, una será para enviar mensajes y la otra para recibirlos. La conexión te va a pedir especificar un host, un puerto, un usuario y una contraseña. Todos los datos te van a ser dados por el Squad del Core.
- Definà una función de callback, o sea lo que va a hacer tu aplicación cada vez que reciba un mensaje. Esto te va a permitir procesarlo. Es importante aclarar que los mensajes viajan en formato de bytes[] asà que será necesario usar decode.
- Iniciá el servicio consumidor dándole una conexión e indicándole cuál es tu módulo, el cual estará restringido por el enum Modules. Es importante aclarar que invocar a esta función bloqueará un hilo de procesamiento para estar permanentemente a la escucha.
- Por último, podés usar el método publish para enviar mensajes a cualquier módulo válido. También se encuentra restringido por el enum Modules. Necesitarás ingresar por parámetro una conexión (distinta a la del servicio consumidor), el mensaje en formato String, el nombre del módulo de origen, el de destino y el caso de uso que genera al mensaje. Recomendamos cerrar la conexión usada después de enviar un mensaje, o un lote de ellos, y abrir una nueva cuando vuelva a ser necesaria.
ACLARACIÓNES
- Tené en cuenta que la conexión es un objeto del tipo AutoCloseable, por lo que deberÃas manejar las excepciones e implementar una lógica de reconexión.
- Los mensajes pueden ser clases convertidas a un String de formato JSON ó valores sueltos en forma de Plain String. Nuestra recomendación es usar clases, como la vista de ejemplo, para un mejor manejo de la información.
Ejemplo
import json
import os
import sender
from sender import *
from Usuario import Usuario
pool_connections = []
#Abro tantas conexiones como quiera.
for i in range(2):
pool_connections.append(
start_connection(
os.getenv('HOST'),
os.getenv('PORT'),
os.getenv('USER'),
os.getenv('PASSWORD')
)
)
def new_callback(ch, method, properties, body):
#Este serÃa el JSON que encapsula a los datos enviados desde el módulo de origen.
# .loads() convertirá el byte[] en un objeto manejable de Python
message = json.loads(body.decode('utf-8'))
#Estos serÃan los datos enviados desde el módulo de origen.
payload = message.get('payload')
#Esta lÃnea es esencial para el funcionamiento del servicio consumidor.
sender.callback = new_callback
start_consumer(pool_connections[0], Modules.USUARIO.value)
#Creo un usuario de prueba (es necesario que exista la clase con su función .__init__())
usuario = Usuario(nombre='Matias')
#Convierto el usuario en un String con formato de JSON (es necesario que exista la clase con su método .to_dict())
mensaje = json.dumps(usuario.to_dict())
publish(pool_connections[1], mensaje, Modules.USUARIO.value, Modules.USUARIO.value, 'Prueba')
close_connection(pool_connections[1])
Clase de prueba
class Usuario:
def __init__(self, nombre):
self.nombre = nombre
def to_dict(self):
return {
"nombre": self.nombre
}
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 Distributions
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 Squad1CoreSender-1.1-py3-none-any.whl.
File metadata
- Download URL: Squad1CoreSender-1.1-py3-none-any.whl
- Upload date:
- Size: 5.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
215bfac7caab700c8d4e7802a03a5610e5cd61fc1c161a5683c51c7dd5c9ad48
|
|
| MD5 |
e4ee46b0bebb0c6375ac090138536c26
|
|
| BLAKE2b-256 |
c2a98616f965473ff9e0e57a08d8854837b2f9ae0e0bc8abc2435afffb2b0454
|