Skip to main content

girder-job-sequence

This is a utility package for running multiple Girder jobs in a sequence.

  • Define a group of jobs with inputs:
    • Only pass non-default parameters
    • Use wildcard "{{}}" strings to define inputs that are not present until they are created with a previous plugin

Installation

$ pip install girder-job-sequence

Usage

Here are some of the primary use-cases for this package. Optionally, it can also be run on a background thread.

Note on wildcard inputs

# Wildcard inputs let you run plugins in sequence even if one plugin 
# takes an input file that is created as an output of another plugin.
# Here are some examples:

# New item:
# Items have "path" or "_id" types. If the item hasn't been created yet, refer to it by /collection (or /user) path to that item and this will look for it.
item_wildcard = "{{'type':'item', 'item_type': 'path', 'item_query': '/collections/folder/item_name.ndpi'}}"

# Use similar syntax for folders (remove trailing "/")
folder_wildcard = "{{'type':'folder', 'folder_type': 'path', 'folder_query': '/collections/folder'}}"

# New file on an item:
# Files have "fileName" or "_id" types. If the file hasn't been created yet, refer to it using the information you would use to find the "item" that that file is attached to and use the "fileName" type with the name of the file as the "file_query".
file_wildcard = "{{'type': 'file', 'item_type': '_id', 'item_query': 'uuid_string_id', 'file_type': 'fileName', 'file_query': 'output_file.csv'}}"

# Use a similar syntax for new annotations: (make sure these are unique)
annotation_wildcard = "{{'type': 'annotation', 'item_type': '_id', 'item_query': 'uuid_string_id', 'annotation_type': 'annotationName', 'annotation_query': 'Name of Annotation'}}"

# If you want to check the wildcard was filled in correctly, use the following:
from girder_job_sequence.utils import parse_wildcard
from girder_client import GirderClient

gc = GirderClient(apiUrl="http://dsa.address.com/api/v1")

parsed_wildcard_val = parse_wildcard(gc,item_wildcard)
print(parsed_wildcard_val)
# This is where you define which plugins you'd like to run and in what order
from girder_job_sequence.utils import from_list

plugin_list = [
    {
        'plugin_id': 'uuid_string',
        'input_args': [
            {
                'name': 'parameter_1',
                'value': 5
            },
            {
                'name': 'parameter_2_with_wildcard',
                'value': "{{'type':'file','item_type':'path','item_query':'/collections/path/to/item.svs','file_type':'fileName','file_query':'name_of_file.csv'}}"
            }
        ]
    },
    {
        'docker_image': 'user/name:tag',
        'cli': 'PluginName',
        'input_args': [
            {
                'name': 'input_param',
                'value': 'blahblahblah'
            }
        ]
    }
]

job_sequence = from_list(job_list)

job_sequence.start(cancel_on_error=True,verbose=True)
  • Check default parameters with:
# Code example showing how to get default plugin parameters
from girder_job_sequence import Job
import json

job_object = Job(plugin_id = 'uuid_string')

print(json.dumps(job_object.inputs,indent=4))
  • Check status of group of jobs
from girder_job_sequence.utils import from_list

plugin_list = [
    {
        'plugin_id': 'uuid_string',
        'input_args': [
            {
                'name': 'parameter_1',
                'value': 5
            },
            {
                'name': 'parameter_2_with_wildcard',
                'value': "{{'type':'file','item_type':'path','item_query':'/collections/path/to/item.svs','file_type':'fileName','file_query':'name_of_file.csv'}}"
            }
        ]
    },
    {
        'docker_image': 'user/name:tag',
        'cli': 'PluginName',
        'input_args': [
            {
                'name': 'input_param',
                'value': 'blahblahblah'
            }
        ]
    }
]

job_sequence = from_list(job_list)

job_sequence.start(cancel_on_error=True,verbose=False)

print(job_sequence.get_status())
  • (#TODO): Set email notification for job step or group

Contributing

Open to contributions. Feel free to submit a PR or post feature requests in Issues

Open Projects

  • Sending email notifications when a step or a whole job sequence is completed

  • Adding conditional functions to decide which job to run following some processing steps.

    • Ex: if a segmentation job has zero of a certain class, cancel the job that depends on that class being present. Or depending on the value of some item metadata, run a different plugin. (This was predicted to be kidney so run the kidney multi-compartment segmentation)
  • Various other types of wildcard inputs

  • Find some way to PUT metadata to a job on DSA and add provenance information like "this plugin is part_of: 'sequence id', and is preceded_by: 'prev_job_id', and is followed_by: 'next_plugin_id'"

  • Integration as girder plugin

License

girder-job-sequence was created by Samuel Border. It is licensed under the terms of the Apache 2.0 License

Metadata

Release files for girder-job-sequence 0.2.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for girder-job-sequence 0.2.7
File Size Uploaded Provenance Actions
girder_job_sequence-0.2.7.tar.gz 8.5 kB Without provenance Details for girder_job_sequence-0.2.7.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for girder-job-sequence 0.2.7
File Interpreter ABI Platform Actions
girder_job_sequence-0.2.7-py3-none-any.whl Python 3 none any Details for girder_job_sequence-0.2.7-py3-none-any.whl

Total release size: 18.4 kB

Release files / girder_job_sequence-0.2.7.tar.gz

Download URL girder_job_sequence-0.2.7.tar.gz
Size 8.5 kB
Tags Source
SHA-256 checksum
How to use checksums
ea990622fce0375a503aa42c74a0adaacf59f78aeaa72849882dfbe396bf46dd
BLAKE2b-256 checksum
How to use checksums
eadb6cee9bc137a0f1db0b938f3b2c770ecc4ed94433690f38853dbb1cd0af47
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.1 CPython/3.11.3 Windows/10

Release files / girder_job_sequence-0.2.7-py3-none-any.whl

Download URL girder_job_sequence-0.2.7-py3-none-any.whl
Size 10.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5ace7b7f04836f266e672c6e549c7233d93b4a192c333886d212da8d8d43592a
BLAKE2b-256 checksum
How to use checksums
070c1b5c476cb925c425c06cf14e283456524707663400872b63f12ca47fa0a7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.1 CPython/3.11.3 Windows/10

Security for girder-job-sequence 0.2.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page