Snippets
Created by
Lucas Correia
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | # :coding: utf-8
# :copyright: Copyright (c) 2020 ftrack
import logging
import random
import ftrack_api
logger = logging.getLogger('create_test_project')
COMMIT_BATCH_SIZE = 50
def create_item(session, entity_template, parent_id, context, counter=0):
counter += 1
if counter % COMMIT_BATCH_SIZE == 0:
logger.info('Committing')
session.commit()
entity_type = entity_template['type']
resolved_data = {}
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(
entity_type,
resolved_data
)
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)
return counter
def create_project_structure(session, project, structure):
entity_template = structure[0]
parent_id = project['id']
context = {
'index': 1,
'project_id': project['id'],
'project': project,
'project_schema': project['project_schema'],
'task_type_ids': [
entity['id'] for entity in project['project_schema'].get_types('Task')
],
'task_status_ids': [
entity['id'] for entity in project['project_schema'].get_statuses('Task', project['project_schema'].get_types('Task')[0])
]
}
counter = 0
for index in range(entity_template.get('count', 1)):
context['index'] = index
counter = create_item(
session,
entity_template,
parent_id,
context,
counter
)
session.commit()
logger.info('Project creation complete: {}'.format(counter))
structure = [{
'type': 'Episode',
'count': 10,
'data': {
'name': lambda context: 'Episode {:02d}'.format(context['index']),
},
'children': [{
'type': 'Shot',
'count': 20,
'data': {
'name': lambda context: 'SH_{:02d}0'.format(context['index']),
},
'children': [{
'type': 'Task',
'count': 10,
'data': {
'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(
session,
project,
structure
)
|
Comments (0)
You can clone a snippet to your computer for local editing. Learn more.