Blueprints
Run a Python script and generate outputs, metrics and downloadable file artifact specified with a variable
Source
yaml
id: python-generate-outputs
namespace: company.team
variables:
file: orders.csv
tasks:
- id: analyze_orders
type: io.kestra.plugin.scripts.python.Script
warningOnStdErr: false
beforeCommands:
- pip install faker kestra > /dev/null
outputFiles:
- "*.csv"
script: >
import csv
import random
import time
from faker import Faker
from kestra import Kestra
start_time = time.time()
fake = Faker()
# list of columns for the CSV file
columns = [
"order_id",
"customer_name",
"customer_email",
"product_id",
"price",
"quantity",
"total",
]
filename = "{{ vars.file }}"
tags = {'file': filename}
# Generate 100 random orders
orders = []
for i in range(100):
order_id = i + 1
customer_name = fake.name()
customer_email = fake.email()
product_id = random.randint(1, 20)
price = round(random.uniform(10.0, 200.0), 2)
quantity = random.randint(1, 10)
total = round(price * quantity, 2)
orders.append(
[order_id, customer_name, customer_email, product_id, price, quantity, total]
)
# Write the orders to a CSV file
with open(filename, "w", newline="") as file:
writer = csv.writer(file)
writer.writerow(columns)
writer.writerows(orders)
# Calculate and print the sum and average of the "total" column
total_sum = sum(order[6] for order in orders)
average_order = round(total_sum / len(orders), 2)
print(f"Total sum: {total_sum}")
print(f"Average Order value: {average_order}")
Kestra.outputs({"total_sum": total_sum, "average_order": average_order})
Kestra.counter('total_sum', total_sum, tags)
Kestra.counter('average_order', average_order, tags)
end_time = time.time()
processing_time = end_time - start_time
Kestra.timer('processing_time', processing_time, tags)
print(f"The script execution took: {processing_time} seconds")
About this blueprint
Metrics pip Python Software Engineering Outputs
This flow generates a CSV file with 100 random orders and then calculates the sum and average of the "total" column. It then reports the results as outputs and metrics.
The CSV file generated by a Python task is set as outputFiles
, allowing you to download the file from the UI's Execution page. It is helpful to share the results of your workflow with business stakeholders who can download the file from the UI and use it in their processes.
To avoid hardcoding values, the filename orders.csv
is specified as a variable.