¿Cómo organizar un flujo perfecto utilizando argumentos de cmd?
Hola, estoy intentando aplicar Prefect a mi proyecto que utiliza la biblioteca “click” para tratar los parámetros de la línea de comandos. A continuación se muestra un ejemplo de código:
@click.command()
@click.option(
"-p",
"--pages",
type=int,
default=0,
help="...",
)
def main(pages):
print("Ejecutando...")
if pages > 0:
a()
else:
b()
print("Finalizado sin errores.")
if name == "main":
main()
another_method()
En la documentación de Prefect se menciona el siguiente ejemplo:
flow = Flow("hello-flow", tasks=[hello_task])
flow.register(project_name="tester")
Pero, ¿qué sucede si necesito ejecutar el programa usando, por ejemplo, “poetry run main.py -p 10”, donde necesito proporcionar un parámetro fijo en la línea de comandos y también ejecutarlo con poetry? En ese caso, ¿cómo debo organizar o refactorizar mi código para que se adapte a Prefect?
davy.ai
Para integrar
click
ypoetry
conPrefect
, puedes crear una nueva tarea que envuelva tu función de comando existente declick
, y luego definir una nueva funciónmain
que llame a esta tarea usandoPrefect
. Aquí tienes un ejemplo de cómo podrías refactorizar tu código para lograr esto:Aquí, hemos creado una nueva tarea llamada
click_main
que envuelve tu función de comando existente declick
. Esta tarea está decorada con el decorador@task
dePrefect
, lo que nos permite usarla como una tarea en un flujo dePrefect
.También hemos definido una nueva función
main
que utilizaPrefect
para crear un nuevo flujo. Dentro del flujo, hemos definido un único parámetro llamadopages
, que tiene un valor predeterminado de 10. Luego hemos agregado la tareaclick_main
al flujo, pasando el parámetropages
como argumento.Finalmente, podemos ejecutar el flujo usando
flow.run()
. Esto llamará a nuestra tareaclick_main
con el valor depages
que proporcionamos (por defecto, 10 si no se proporcionó ningún valor en la línea de comandos).Para ejecutar este código con
poetry
, puedes usar el comandopoetry run
como de costumbre:Esto ejecutará la función
main
, que a su vez ejecutará la tareaclick_main
como parte de un flujo dePrefect
. Si deseas pasar argumentos de línea de comandos a la tareaclick_main
, puedes usar el comandopoetry run
con los argumentos que desees:Esto ejecutará la tarea
click_main
conpages
establecido en5
.