Skip to main content

Built-in Plugins

Generators

Generators produce a list of values. Their constructor receives all configuration through args. Any argument may reference a previous step's output via ${steps.<id>}, making generators composable without any special syntax.


scarfolder.generators.util.Range

Generates a sequence of integers, analogous to Python's range().

ArgTypeDefaultDescription
startint0First value
stopint10Upper bound (exclusive)
stepint1Increment
- id: numbers
generator:
name: scarfolder.generators.util.Range
args:
start: 1
stop: 11
step: 2
# → [1, 3, 5, 7, 9]

scarfolder.generators.util.Constant

Repeats a single value exactly count times.

ArgTypeDefaultDescription
valueanyThe value to repeat
countint1How many copies
- id: words
generator:
name: scarfolder.generators.util.Constant
args:
value: hello
count: 3
# → ["hello", "hello", "hello"]

scarfolder.generators.util.Combine

Zips multiple streams into tuples (shortest wins, like Python's zip()). Each stream is typically a previous step's output passed as an arg.

ArgTypeDescription
streamslist of listsThe streams to zip together
- id: pairs
generator:
name: scarfolder.generators.util.Combine
args:
streams:
- ${steps.first_names}
- ${steps.last_names}
# → [("Alice", "Smith"), ("Bob", "Jones"), ...]

scarfolder.generators.util.Enumerate

Pairs each item with its index, like Python's enumerate().

ArgTypeDefaultDescription
streamlistInput list, e.g. ${steps.names}
startint0Starting index
- id: indexed
generator:
name: scarfolder.generators.util.Enumerate
args:
stream: ${steps.names}
start: 1
# → [(1, "Alice"), (2, "Bob"), ...]

Transformers

Transformers receive a list and return a new list. When used as inline chain steps (attached to a generator), values is injected automatically. When used as standalone steps, values must be declared explicitly in args.

All built-in text transformers operate on list[str].


scarfolder.transformers.text.capitalize_first

Capitalises the first letter of each string.

# Inline — values auto-injected
- id: names
generator:
name: scarfolder.generators.util.Constant
args: { value: alice, count: 3 }
transformer: scarfolder.transformers.text.capitalize_first
# → ["Alice", "Alice", "Alice"]

# Standalone — values explicit
- id: names
transformer:
name: scarfolder.transformers.text.capitalize_first
args:
values: ${steps.raw_names}

scarfolder.transformers.text.upper / lower

Converts each string to upper- or lower-case.

transformer: scarfolder.transformers.text.upper
transformer: scarfolder.transformers.text.lower

scarfolder.transformers.text.strip

Strips leading/trailing whitespace (or a custom set of characters).

ArgTypeDefaultDescription
charsstrnullCharacters to strip; null strips whitespace

scarfolder.transformers.text.join

Joins each inner sequence into a single string. Typically used after Combine or Enumerate.

ArgTypeDefaultDescription
separatorstr" "String placed between parts
- id: full_names
generator:
name: scarfolder.generators.util.Combine
args:
streams:
- ${steps.first_names}
- ${steps.last_names}
transformer: scarfolder.transformers.text.join
# [("Alice", "Smith"), ("Bob", "Jones")] → ["Alice Smith", "Bob Jones"]

scarfolder.transformers.text.prefix / suffix

Prepends or appends a fixed string to every value.

ArgTypeDefaultDescription
textstr""The string to prepend/append
transformer:
name: scarfolder.transformers.text.prefix
args:
text: "user_"

scarfolder.transformers.text.format_template

Applies a Python format-string template to each value. The value is exposed as {value}.

ArgTypeDefaultDescription
templatestr"{value}"Format string
transformer:
name: scarfolder.transformers.text.format_template
args:
template: "Hello, {value}!"
# ["Alice", "Bob"] → ["Hello, Alice!", "Hello, Bob!"]

Loaders

Loaders consume a list as a terminal side effect and return nothing. When attached to a step with a generator or transformer chain, values is injected automatically. When used standalone, values must be declared explicitly in args.


scarfolder.loaders.file.WriteLines

Writes each value as a line to a text file.

ArgTypeDefaultDescription
valueslistThe sequence to write (auto-injected when chained)
pathstrDestination file path
modestr"w""w" to overwrite, "a" to append
encodingstr"utf-8"File encoding
- generator:
name: scarfolder.generators.util.Constant
args: { value: hello, count: 3 }
loader:
name: scarfolder.loaders.file.WriteLines
args:
path: output.txt

scarfolder.loaders.file.WriteJson

Serialises values as a JSON array to a file.

ArgTypeDefaultDescription
valueslistThe sequence to serialise (auto-injected when chained)
pathstrDestination file path
indentint or null2Pretty-print indent; null for compact output
encodingstr"utf-8"File encoding

scarfolder.loaders.console.Print

Prints each value to stdout. Useful for debugging.

ArgTypeDefaultDescription
valueslistThe sequence to print (auto-injected when chained)
templatestr"{value}"Format string; {index} is also available
separatorstr"\n"String printed between items
headerstrnullLine printed once before all values
footerstrnullLine printed once after all values
- generator:
name: scarfolder.generators.util.Range
args: { stop: 5 }
loader:
name: scarfolder.loaders.console.Print
args:
header: "--- items ---"
template: " {index}. {value}"

scarfolder.loaders.file.print_values

Function-based convenience loader that prints each value to stdout. Takes only values.

loader: scarfolder.loaders.file.print_values

SQL loaders

Requires SQLAlchemy: pip install scarfolder[sql]

scarfolder.loaders.sql.ExecuteStatements

Executes each value as a raw SQL statement.

ArgTypeDefaultDescription
valueslistSQL strings to execute (auto-injected when chained)
urlstrSQLAlchemy connection URL
echoboolfalseLog every executed statement
stop_on_errorbooltrueAbort on first failure

scarfolder.loaders.sql.ExecuteMany

Executes one parameterised SQL statement per row.

ArgTypeDefaultDescription
valueslistRows to insert (auto-injected when chained)
urlstrSQLAlchemy connection URL
querystrParameterised SQL with :name placeholders
mappinglist of strnullMaps positional tuple/list elements to parameter names
echoboolfalseLog every executed statement
- loader:
name: scarfolder.loaders.sql.ExecuteMany
args:
values: ${steps.name_rows}
url: postgresql+psycopg2://user:${env.DB_PASSWORD}@localhost/mydb
query: "INSERT INTO people (first, last) VALUES (:first, :last)"
mapping: [first, last]