Skip to content

Latest commit

 

History

History
156 lines (109 loc) · 5.05 KB

tutorial.rst

File metadata and controls

156 lines (109 loc) · 5.05 KB

Tutorial

ftrack_api.session

This tutorial provides a quick dive into using the API and the broad stroke concepts involved.

First make sure the ftrack Python API is installed <installing>.

Then start a Python session and import the ftrack API:

>>> import ftrack_api

The API uses sessions <understanding_sessions> to manage communication with an ftrack server. Create a session that connects to your ftrack server (changing the passed values as appropriate):

>>> session = ftrack_api.Session(
...     server_url='https://mycompany.ftrackapp.com',
...     api_key='7545384e-a653-11e1-a82c-f22c11dd25eq',
...     api_user='martin'
... )

Note

A session can use environment variables <understanding_sessions/connection> to configure itself.

Now print a list of the available entity types retrieved from the server:

>>> print(session.types.keys())
[u'TypedContext', u'ObjectType', u'Priority', u'Project', u'Sequence',
 u'Shot', u'Task', u'Status', u'Type', u'Timelog', u'User']

Now the list of possible entity types is known, query <querying> the server to retrieve entities of a particular type by using the Session.query method:

>>> projects = session.query('Project')

Each project retrieved will be an entity <working_with_entities> instance that behaves much like a standard Python dictionary. For example, to find out the available keys for an entity, call the ~ftrack_api.entity.Entity.keys method:

>>> print(projects[0].keys())
[u'status', u'is_global', u'name', u'end_date', u'context_type',
 u'id', u'full_name', u'root', u'start_date']

Now, iterate over the retrieved entities and print each ones name:

>>> for project in projects:
...     print(project['name'])
test
client_review
tdb
man_test
ftrack
bunny

Note

Many attributes for retrieved entities are loaded on demand when the attribute is first accessed. Doing this lots of times in a script can be inefficient, so it is worth using projections <querying/projections> in queries or pre-populating <working_with_entities/populating> entities where appropriate. You can also customise default projections <working_with_entities/entity_types/default_projections> to help others pre-load common attributes.

To narrow a search, add criteria <querying/criteria> to the query:

>>> active_projects = session.query('Project where status is active')

Combine criteria for more powerful queries:

>>> import arrow
>>>
>>> active_projects_ending_before_next_week = session.query(
...     'Project where status is active and end_date before "{0}"'
...     .format(arrow.now().replace(weeks=+1))
... )

Some attributes on an entity will refer to another entity or collection of entities, such as children on a Project being a collection of Context entities that have the project as their parent:

>>> project = session.query('Project').first()
>>> print(project['children'])
<ftrack_api.collection.Collection object at 0x00000000045B1438>

And on each Context there is a corresponding parent attribute which is a link back to the parent:

>>> child = project['children'][0]
>>> print(child['parent'] is project)
True

These relationships can also be used in the criteria for a query:

>>> results = session.query(
...     'Context where parent.name like "te%"'
... )

To create new entities in the system use Session.create:

>>> new_sequence = session.create('Sequence', {
...     'name': 'Starlord Reveal'
... })

The created entity is not yet persisted to the server, but it is still possible to modify it.

>>> new_sequence['description'] = 'First hero character reveal.'

The sequence also needs a parent. This can be done in one of two ways:

  • Set the parent attribute on the sequence:

    >>> new_sequence['parent'] = project
  • Add the sequence to a parent's children attribute:

    >>> project['children'].append(new_sequence)

When ready, persist to the server using Session.commit:

>>> session.commit()

When finished with a Session, it is important to ~Session.close it in order to release resources and properly unsubscribe any registered event listeners. It is also possible to use the session as a context manager in order to have it closed automatically after use:

>>> with ftrack_api.Session() as session:
...     print(session.query('User').first())
<User(0154901c-eaf9-11e5-b165-00505681ec7a)>
>>> print(session.closed)
True

Once a Session is closed, any operations that attempt to use the closed connection to the ftrack server will fail:

>>> session.query('Project').first()
ConnectionClosedError: Connection closed.

Continue to the next section to start learning more about the API in greater depth or jump over to the usage examples <example> if you prefer to learn by example.