Deprecation of LocalFiles and outputDir
Migrate from LocalFiles and outputDir to inputFiles and outputFiles.
Overview
The LocalFiles and outputDir are deprecated due to overlapping functionality that already exists using inputFiles and outputFiles on the WorkingDirectory and script tasks.
- outputDir: the
{{ outputDir }}expression has been deprecated due to overlapping functionality available through theoutputFilesproperty which is more flexible. - LocalFiles: the
LocalFilesfeature was initially introduced to allow injecting additional files into the script task'sWorkingDirectory. However, this feature was confusing as there is nothing local about these files, and with the introduction ofinputFilesto theWorkingDirectory, it became redundant. We recommend using theinputFilesproperty instead ofLocalFilesto inject files into the script task'sWorkingDirectory. The example below demonstrates how to do that:
id: apiJSONtoMongoDB
namespace: company.team
tasks:
- id: inlineScript
type: io.kestra.plugin.scripts.python.Script
taskRunner:
type: io.kestra.plugin.scripts.runner.docker.Docker
containerImage: python:3.11-slim
beforeCommands:
- pip install requests kestra > /dev/null
warningOnStdErr: false
outputFiles:
- output.json
inputFiles:
query.sql: |
SELECT sum(total) as total, avg(quantity) as avg_quantity
FROM sales;
script: |
import requests
import json
from kestra import Kestra
with open('query.sql', 'r') as input_file:
sql = input_file.read()
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({'receivedSQL': sql, 'status': response.status_code})
- id: loadToMongoDB
type: io.kestra.plugin.mongodb.Load
connection:
uri: mongodb://host.docker.internal:27017/
database: local
collection: github
from: "{{ outputs.inlineScript.outputFiles['output.json'] }}"
Examples
To help you migrate your flows, here's a few examples of how you might update your flow to use the new format in 0.17.0.
outputDir
Before
Previously, you would specify {{ outputDir }} as you save the file.
id: getting_started_output
namespace: company.team
inputs:
- id: api_url
type: STRING
defaults: https://dummyjson.com/products
tasks:
- id: api
type: io.kestra.plugin.fs.http.Request
uri: "{{ inputs.api_url }}"
- id: python
type: io.kestra.plugin.scripts.python.Script
docker:
image: python:slim
beforeCommands:
- pip install polars
warningOnStdErr: false
script: |
import polars as pl
data = {{outputs.api.body | jq('.products') | first}}
df = pl.from_dicts(data)
df.glimpse()
df.select(["brand", "price"]).write_csv("{{outputDir}}/products.csv")
After
Now you can remove this, and just specify the file name in the outputFiles properties.
id: getting_started_output
namespace: company.team
inputs:
- id: api_url
type: STRING
defaults: https://dummyjson.com/products
tasks:
- id: api
type: io.kestra.plugin.fs.http.Request
uri: "{{ inputs.api_url }}"
- id: python
type: io.kestra.plugin.scripts.python.Script
docker:
image: python:slim
beforeCommands:
- pip install polars
warningOnStdErr: false
outputFiles:
- "products.csv"
script: |
import polars as pl
data = {{outputs.api.body | jq('.products') | first}}
df = pl.from_dicts(data)
df.glimpse()
df.select(["brand", "price"]).write_csv("products.csv")
LocalFiles
Before
Previously, you would add a separate LocalFiles task inside of the WorkingDirectory task to specify your inputs for later tasks.
id: pip
namespace: company.team
tasks:
- id: wdir
type: io.kestra.plugin.core.flow.WorkingDirectory
tasks:
- id: pip
type: io.kestra.plugin.core.storage.LocalFiles
inputs:
requirements.txt: |
kestra>=0.6.0
pandas>=1.3.5
requests>=2.31.0
- id: pythonScript
type: io.kestra.plugin.scripts.python.Script
docker:
image: python:3.11-slim
beforeCommands:
- pip install -r requirements.txt > /dev/null
warningOnStdErr: false
script: |
import requests
import kestra
import pandas as pd
print(f"requests version: {requests.__version__}")
print(f"pandas version: {pd.__version__}")
methods = [i for i in dir(kestra.Kestra) if not i.startswith("_")]
print(f"Kestra methods: {methods}")
After
In 0.17.0, you can specify your input files by using the inputFiles property from the WorkingDirectory task, removing the need for the LocalFiles task all together.
id: pip
namespace: company.team
tasks:
- id: wdir
type: io.kestra.plugin.core.flow.WorkingDirectory
inputFiles:
requirements.txt: |
kestra>=0.6.0
pandas>=1.3.5
requests>=2.31.0
tasks:
- id: pythonScript
type: io.kestra.plugin.scripts.python.Script
docker:
image: python:3.11-slim
beforeCommands:
- pip install -r requirements.txt > /dev/null
warningOnStdErr: false
script: |
import requests
import kestra
import pandas as pd
print(f"requests version: {requests.__version__}")
print(f"pandas version: {pd.__version__}")
methods = [i for i in dir(kestra.Kestra) if not i.startswith("_")]
print(f"Kestra methods: {methods}")
Was this page helpful?