To get started with a Script task, paste your custom script inline in your YAML workflow definition along with any other configuration.

yaml
id: api_json_to_mongodb
namespace: dev
tasks:
  - id: extract
    type: io.kestra.plugin.scripts.python.Script
    docker:
      image: python:3.11-slim
    beforeCommands:
      - pip install requests kestra > /dev/null
    warningOnStdErr: false
    outputFiles:
      - "*.json"
    script: |
      import requests
      import json
      from kestra import Kestra

      response = requests.get("https://api.github.com")
      data = response.json()

      with open("output.json", "w") as output_file:
          json.dump(data, output_file)

      Kestra.outputs({"status": response.status_code})

  - id: load
    type: io.kestra.plugin.mongodb.Load
    connection:
      uri: mongodb://host.docker.internal:27017/
    database: local
    collection: github
    from: "{{ outputs.extract.outputFiles['output.json'] }}"
    description: "you can start MongoDB using: docker run -d mongo"

The example above uses a Python script added as a multiline string into the script property. The script fetches data from an API and stores it as a JSON file in Kestra's internal storage using the outputFiles property. The Kestra.outputs method allows to capture additional output variables, such as the API response status code.

The image argument of the docker property allows to optionally specify the Docker image to use for the script. If you don't specify an image, Kestra will use the default image for the language you are using. In this example, we use the python:3.11-slim image.

You can also optionally use the beforeCommands property to install libraries used in your inline script. Here, we use the command pip install requests kestra to install pip packages not available in the base image python:3.11-slim.

The warningOnStdErr property allows to specify whether to set the task run to a WARNING status if the script writes to the standard error stream. By default, this property is set to true. Keep in ming that a script that generates an error will always set the task run to a FAILED status, regardless of the value of this property.