@UrbanCircus I pieced together getting files created from an action but unfortunately haven't made any progress to populate the directories based on the structure of my project.
import logging
import ftrack_api
import errno
import os
class MyCustomAction(object):
'''Custom action.'''
label = 'createfolders'
identifier = 'my.custom.action'
description = 'This is an example action creating folders'
def __init__(self, session):
'''Initialise action.'''
super(MyCustomAction, self).__init__()
self.session = session
self.logger = logging.getLogger(
__name__ + '.' + self.__class__.__name__
)
def register(self):
'''Register action.'''
self.session.event_hub.subscribe(
'topic=ftrack.action.discover and source.user.username={0}'.format(
self.session.api_user
),
self.discover
)
self.session.event_hub.subscribe(
'topic=ftrack.action.launch and data.actionIdentifier={0} and '
'source.user.username={1}'.format(
self.identifier,
self.session.api_user
),
self.launch
)
def discover(self, event):
'''Return action config if triggered on a single asset version.'''
# If selection contains more than one item return early since
# this action can only handle a single version.
selection = event['data']['selection']
self.logger.info('Got selection: {0}'.format(selection))
# action works in the task context
if len(selection) != 1 or selection[0]['entityType'] != 'task':
return
return {
'items': [{
'label': self.label,
'description': self.description,
'actionIdentifier': self.identifier
}]
}
def launch(self, event):
'''Callback method for custom action.'''
path = 'C:\\project\\test\\'
try:
os.makedirs(path)
except OSError as error:
if error.errno != errno.EEXIST:
raise
return {
'success': True,
'message': 'did it work?'
}
def register(session, **kw):
'''Register plugin.'''
# Validate that session is an instance of ftrack_api.Session. If not,
# assume that register is being called from an incompatible API
# and return without doing anything.
if not isinstance(session, ftrack_api.Session):
# Exit to avoid registering this plugin again.
return
action = MyCustomAction(session)
action.register()
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO)
session = ftrack_api.Session()
register(session)
# Wait for events.
session.event_hub.wait()