ifURI examples
← all examples

13 - simple defaults

This example shows the ergonomic target for connector authors:

Python

import urirun

connector = urirun.connector("defaults-demo", scheme="demo")

@connector.command("text/query/upper")
def upper(text: str, suffix: str = ""):
    return ["python3", "-c", "import sys; print((sys.argv[1] + sys.argv[2]).upper())", "{text}", "{suffix}"]

bindings = connector.bindings()

The full route becomes:

demo://host/text/query/upper

text is required because it has no default. suffix is optional because the function signature has a default value.

Run:

python3 python_connector.py > /tmp/defaults.bindings.json
urirun validate /tmp/defaults.bindings.json
urirun compile /tmp/defaults.bindings.json --out /tmp/defaults.registry.json

JavaScript

The JS helper mirrors the same convention:

const demo = connector({ id: 'defaults-demo', scheme: 'demo' });

demo.command('text/query/reverse', {
  fields: { text: string(), suffix: string({ default: '' }) },
  argv: ({ text, suffix }) => ['node', '-e', '...', text, suffix],
});

console.log(JSON.stringify(demo.bindings(), null, 2));

Run:

node js/example.mjs > /tmp/defaults-js.bindings.json
urirun validate /tmp/defaults-js.bindings.json

Convention

InputDefault
connector idstable package id, for example defaults-demo
schemeexplicit when needed, otherwise id without dashes
targethost
route pathconnector-local path, for example text/query/upper
metadatameta.connector is filled automatically
schema required fieldsparameters without default values

Files

MakefileREADME.mdpython_connector.pyjs/

View on GitHub →