.. currentmodule:: ftrack_api.session
Jobs can be used to display feedback to users in the ftrack web interface when performing long running tasks in the API.
To create a job use :meth:`Session.create`:
user = # Get a user from ftrack. job = session.create('Job', { 'user': user, 'status': 'running' })
The created job will appear as running in the :guilabel:`jobs` menu for the specified user. To set a description on the job, add a dictionary containing description as the data key:
Note
In the current version of the API the dictionary needs to be JSON serialised.
import json
job = session.create('Job', {
'user': user,
'status': 'running',
'data': json.dumps({
'description': 'My custom job description.'
})
})
When the long running task has finished simply set the job as completed and continue with the next task.
job['status'] = 'done'
session.commit()
Job attachments are files that are attached to a job. In the ftrack web interface these attachments can be downloaded by clicking on a job in the Jobs menu.
To get a job's attachments through the API you can use the job_components relation and then use the ftrack server location to get the download URL:
server_location = session.query( 'Location where name is "ftrack.server"' ).one() for job_component in job['job_components']: print('Download URL: {0}'.format( server_location.get_url(job_component['component']) ))
To add an attachment to a job you have to add it to the ftrack server location and create a jobComponent:
server_location = session.query( 'Location where name is "ftrack.server"' ).one() # Create component and name it "My file". component = session.create_component( '/path/to/file', data={'name': 'My file'}, location=server_location ) # Attach the component to the job. session.create( 'JobComponent', {'component_id': component['id'], 'job_id': job['id']} ) session.commit()
Note
The ftrack web interface does only support downloading one attachment so attaching more than one will have limited support in the web interface.