+# :copyright: Copyright (c) 2020 ftrack
+logger = logging.getLogger('create_test_project')
+def create_item(session, entity_template, parent_id, context, counter=0):
+ if counter % COMMIT_BATCH_SIZE == 0:
+ logger.info('Committing')
+ entity_type = entity_template['type']
+ for key, value in entity_template['data'].iteritems():
+ resolved_data[key] = value(context) if callable(value) else value
+ if 'parent_id' in session.types[entity_type].attributes.keys():
+ resolved_data['parent_id'] = parent_id
+ if 'context_id' in session.types[entity_type].attributes.keys():
+ resolved_data['context_id'] = parent_id
+ if 'project_id' in session.types[entity_type].attributes.keys():
+ resolved_data['project_id'] = context['project_id']
+ logger.info('Creating entity {:03d}: {}'.format(counter, entity_type))
+ entity = session.create(
+ parent_id = entity['id']
+ for child_template in entity_template.get('children', []):
+ for index in range(child_template.get('count', 1)):
+ context['index'] = index
+ counter = create_item(session, child_template, parent_id, context, counter)
+def create_project_structure(session, project, structure):
+ entity_template = structure[0]
+ parent_id = project['id']
+ 'project_id': project['id'],
+ 'project_schema': project['project_schema'],
+ entity['id'] for entity in project['project_schema'].get_types('Task')
+ entity['id'] for entity in project['project_schema'].get_statuses('Task', project['project_schema'].get_types('Task')[0])
+ for index in range(entity_template.get('count', 1)):
+ context['index'] = index
+ logger.info('Project creation complete: {}'.format(counter))
+ 'name': lambda context: 'Episode {:02d}'.format(context['index']),
+ 'name': lambda context: 'SH_{:02d}0'.format(context['index']),
+ 'name': lambda context: 'Task {:02d}'.format(context['index']),
+ 'type_id': lambda context: random.choice(
+ context['task_type_ids']
+ 'status_id': lambda context: random.choice(
+ context['task_status_ids']
+if __name__ == "__main__":
+ logging.basicConfig(level=logging.INFO)
+ session = ftrack_api.Session()
+ project = session.get('Project', '733617da-5c67-11ea-a34d-42290381088f')
+ create_project_structure(