Jobs Table

Last Updated: July 2022

class tethys_sdk.gizmos.JobsTable(jobs, column_fields, show_status=True, show_actions=True, monitor_url='', results_url='', hover=False, striped=False, bordered=False, condensed=False, attributes=None, classes='', refresh_interval=5000, delay_loading_status=True, show_detailed_status=False, actions=None, enable_data_table=False, data_table_options=None, sort=True, reverse_sort=False)

A jobs table can be used to display users' jobs. The JobsTable gizmo takes the same formatting options as the table view gizmo, but does not allow the columns to be edited. Additional attributes for the jobs table allows for a dynamically updating status field, and action buttons.

jobs

A list/tuple of TethysJob objects.

Type:

tuple or list, required

column_fields

A tuple or list of strings that represent TethysJob object attributes to show in the columns.

Type:

tuple or list, required

show_status

Add a column to the table to show dynamically updating job status. Default is True.

Type:

bool

show_actions

Add a column to the table to show a dynamically updating dropdown list of actions that can be done on the job. The available actions are determined by actions option. Actions are enabled/disabled based on the job status. If this is False then then actions option ignored.

Type:

bool

actions

A list of default actions or custom action arguments that can be done on a job with the | character used to divide the actions into sections. If None then all the default actions will be used (i.e. ['run', 'resubmit', '|', 'logs', 'monitor', 'results', '|', 'terminate', 'delete']). Note that if monitor_url and results_url are supplied then 'monitor' and 'results' respectively will be added if not already in the list. If they are not provided then monitor and results will be removed from the list if present. Default is None.

Type:

list

monitor_url

A string representing the namespaced path to a controller to that displays monitoring information about a running job (e.g. app_name:monitoring_controller)

Type:

str

results_url

A string representing the namespaced path to a controller to that displays job results (e.g. app_name:results_controller)

Type:

str

hover

Illuminate rows on hover (does not work on striped tables)

Type:

bool

striped

Stripe rows

Type:

bool

bordered

Add borders and rounded corners

Type:

bool

condensed

A more tightly packed table

Type:

bool

attributes

A dictionary representing additional HTML attributes to add to the primary element (e.g. {"onclick": "run_me();"}).

Type:

dict

classes

Additional classes to add to the primary HTML element (e.g. "example-class another-class").

Type:

str

refresh_interval

The refresh interval for the runtime and status fields in milliseconds. Default is 5000.

Type:

int

show_detailed_status

Show status of each node in CondorWorkflow jobs when True. Defaults to False.

Type:

bool

sort

Whether to sort the list of jobs in the table. If True, jobs are sorted by creation time from oldest (top of the table) to newest. If a callable is passed then it is used as the key to sort the jobs. Default is True.

Type:

bool|callable

reverse_sort

Whether to reverse the sorting order. If sort is False then this argument has no effect. Default is False.

Type:

bool

Controller Example

python
from tethys_sdk.gizmos import JobsTable

jobs_table_options = JobsTable(
    jobs=jobs,
    column_fields=('id', 'name', 'description', 'creation_time', 'execute_time'),
    actions=['run', 'resubmit', '|', 'logs', '|', 'terminate', 'delete'],
    hover=True,
    striped=False,
    bordered=False,
    condensed=False,
    results_url='app_name:results_controller',
)
context = {
    'jobs_table_options': jobs_table_options,
}

Controller Example with Custom Actions

python
from tethys_sdk.gizmos import JobsTable, CustomJobAction

def custom_action(job):
    # do something with job

def custom_action2(job):
    # do something with job

def enable_custom_action(job):
    # custom logic to determine if action should be enabled

def controller(request):
    ...

    jobs_table_options = JobsTable(
        jobs=jobs,
        column_fields=('id', 'name', 'description', 'creation_time', 'execute_time'),
        actions=[
            'run', 'resubmit', '|',
            'logs', '|',
            'terminate', 'delete', '|',
            CustomJobAction(
                label='Custom Action',
                callback_or_url=custom_action,
                enabled_callback=enable_custom_action,
                confirmation_message='Do you really want to do this?',
                show_overlay=True,  # displays the overlay loading spinner until the custom action function returns
            ),
            # Custom actions can also be defined as a list/tuple of args. The only required arguments are label and callback_or_url
            ('Another Custom Action', custom_action2),
            # Instead of a function a custom action can just be a url name for a custom endpoint
            ('Yet Another Custom Action', 'my_app:custom_endpoint'),
            # An alternative type of custom action is to provide an endpoint to get content for a modal
            CustomJobAction('Custom Modal Content', modal_url='my_app:get_modal_content'),
        ],
        hover=True,
        striped=False,
        bordered=False,
        condensed=False,
        results_url='app_name:results_controller',
    )
    context = {
        'jobs_table_options': jobs_table_options,
    }
    ...

Template Example

python
{% load tethys_gizmos %}

{% gizmo jobs_table_options %}

Tip

To see the Jobs Table Gizmo in action, install the Gizmo Showcase Tethys app.

class tethys_sdk.gizmos.CustomJobAction(label, callback_or_url=None, enabled_callback=None, confirmation_message=None, show_overlay=False, modal_url=None, job_type=None)

A CustomJobAction is used to create custom actions in the actions dropdown menu of the jobs table.

label

The display name of the action that will show in the actions dropdown.

Type:

str, required

callback_or_url

The name on a callable attribute on the job_type object or a callable that accepts a TethysJob as an argument. Or it can be the name of a URL that the custom action option will link to.

Type:

str or callable, required if modal_url is not supplied

enabled_callback

A callable that accepts a job_type object as an argument and returns True if the action should be enabled or False if it should be disabled.

Type:

callable

confirmation_message

A message to display in a modal to ask for confirmation to perform the action.

Type:

str

show_overlay

Whether to show an overlay with a loading spinner while the action is being called.

Type:

bool

modal_url

The name of a URL to retrieve content to populate a modal.

Type:

str, required if callback_or_url is not supplied

job_type

A subclass of TethysJob. Must be specified if the callback_or_url argument is an attribute that is only defined at the subclass level.

Type:

class

Examples:

python
def custom_action(job):
    # do something with job

def custom_action2(job):
    # do something with job

def enable_custom_action(job):
    # custom logic to determine if action should be enabled

CustomJobAction(
    label='Custom Action',
    callback_or_url=custom_action,
    enabled_callback=enable_custom_action,
    confirmation_message='Do you really want to do this?',
    show_overlay=True,  # displays the overlay loading spinner until the custom action function returns
)

Tip

For a complete example of using CustomJobAction refer to the Gizmo Showcase Tethys app code.