Task Publishing Framework
Este framework de publicación de tareas en Python está pensado para agilizar la ejecución de procesos secuenciales como recolección de archivos, validación, extracción y actualización de bases de datos. Permite registrar y ejecutar procesos personalizados dentro de una estructura flexible, usando un contexto compartido para intercambiar datos.
Características
- Modular: Define y registra distintos tipos de procesos (
Collect,Check,Extract,Push). - Contexto compartido: Usa un objeto
Contextpara compartir datos entre procesos. - Gestión de errores: Rastrea y gestiona errores mediante la clase
ErrorProcess. - Callbacks: Ejecuta funciones callback al terminar los procesos.
- Integración sencilla: Extensible y flexible para crear procesos a medida.
Uso básico
- Crear una clase de proceso personalizada
Para definir un proceso nuevo, hereda de alguno de los tipos abstractos (Collect, Check, Extract, Push) e implementa process. Ejemplo de colección:
from publisher.core import Collect
class CustomCollect(Collect):
name = "Collect Files"
collect_type = list # tipo esperado
def process(self, context):
files = ["file1.txt", "file2.txt"]
self.value = files
from publisher.core import Manager
manager = Manager()
manager.register(CustomCollect)
manager.publish()
collected_files = manager.context.get_data("Collect Files")
print(collected_files) # ['file1.txt', 'file2.txt']
from publisher.core import Process, Context
class MyCheck(Process):
name = "Custom Check"
def process(self, context):
if not context.get_data("required_data"):
self.add_error("Missing data", "The required_data key is missing in context.")
self.set_status(False)
check = MyCheck(manager)
manager.register(check)
manager.publish()
def notify_user(process):
print(f"Process {process.name} has finished!")
check.add_callback(notify_user)
Estructura del proyecto
core.py: Clases base (Process,Collect,Check,Extract,Push) yManager.tests/: Pruebas.examples/: Ejemplos prácticos de un publisher sencillo.docs/: Documentación con Sphinx.
Extensibilidad
El framework es extensible: puedes crear nuevos procesos heredando de Process y adaptarlos. Ejemplo de extracción: