Managing jobs
The code examples in this article is only documented with the Python API Client. While many concepts still apply for the JavaScript API, implementation details might differ.
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 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 jobs
menu for the specified user. To set a description on the job, add a dictionary containing description as the [data] key:
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()
Attachments
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()
The ftrack web interface does only support downloading one attachment so attaching more than one will have limited support in the web interface.