diff --git a/pype/ftrack/actions/action_create_cust_attrs.py b/pype/ftrack/actions/action_create_cust_attrs.py index f75d10591d..fb57221ccd 100644 --- a/pype/ftrack/actions/action_create_cust_attrs.py +++ b/pype/ftrack/actions/action_create_cust_attrs.py @@ -137,7 +137,7 @@ class CustomAttributes(BaseAction): 'dynamic enumerator', 'number' ] - def prediscover(self, event): + def discover(self, session, entities, event): ''' Validation - action is only for Administrators diff --git a/pype/ftrack/actions/action_create_folders.py b/pype/ftrack/actions/action_create_folders.py index 6ccb571dd9..7ce5526164 100644 --- a/pype/ftrack/actions/action_create_folders.py +++ b/pype/ftrack/actions/action_create_folders.py @@ -26,7 +26,7 @@ class CreateFolders(BaseAction): '698620-icon-105-folder-add-512.png' ) - def prediscover(self, event): + def discover(self, session, entities, event): ''' Validation ''' return True diff --git a/pype/ftrack/actions/action_delete_asset.py b/pype/ftrack/actions/action_delete_asset.py index e453edcaa4..7a4c15e9fb 100644 --- a/pype/ftrack/actions/action_delete_asset.py +++ b/pype/ftrack/actions/action_delete_asset.py @@ -28,14 +28,13 @@ class DeleteAsset(BaseAction): value = None - def prediscover(self, event): + def discover(self, session, entities, event): ''' Validation ''' - selection = event["data"].get("selection", None) - if selection is None or len(selection) > 1: + if len(entities) != 1: return False valid = ["task"] - entityType = selection[0].get("entityType", "") + entityType = event["data"]["selection"][0].get("entityType", "") if entityType.lower() not in valid: return False diff --git a/pype/ftrack/actions/action_delete_asset_byname.py b/pype/ftrack/actions/action_delete_asset_byname.py index e1480bb092..ee6f875ad3 100644 --- a/pype/ftrack/actions/action_delete_asset_byname.py +++ b/pype/ftrack/actions/action_delete_asset_byname.py @@ -25,14 +25,13 @@ class AssetsRemover(BaseAction): #: Db db = DbConnector() - def prediscover(self, event): + def discover(self, session, entities, event): ''' Validation ''' - selection = event["data"].get("selection", None) - if selection is None or len(selection) != 1: + if len(entities) != 1: return False valid = ["show", "task"] - entityType = selection[0].get("entityType", "") + entityType = event["data"]["selection"][0].get("entityType", "") if entityType.lower() not in valid: return False diff --git a/pype/ftrack/actions/action_job_killer.py b/pype/ftrack/actions/action_job_killer.py index 4324fceda8..d8d0e81cb1 100644 --- a/pype/ftrack/actions/action_job_killer.py +++ b/pype/ftrack/actions/action_job_killer.py @@ -23,7 +23,8 @@ class JobKiller(BaseAction): 'https://cdn2.iconfinder.com/data/icons/new-year-resolutions/64/' 'resolutions-23-512.png' ) - def prediscover(self, event): + + def discover(self, session, entities, event): ''' Validation ''' return True diff --git a/pype/ftrack/actions/action_test.py b/pype/ftrack/actions/action_test.py index a55d971db2..ad97cba487 100644 --- a/pype/ftrack/actions/action_test.py +++ b/pype/ftrack/actions/action_test.py @@ -26,12 +26,13 @@ class TestAction(BaseAction): #: priority priority = 10000 #: roles that are allowed to register this action - role_list = ['Pypecub'] + role_list = ['Pypeclub'] icon = ( 'https://cdn4.iconfinder.com/data/icons/hospital-19/512/' '8_hospital-512.png' ) - def prediscover(self, event): + + def discover(self, session, entities, event): ''' Validation ''' return True diff --git a/pype/ftrack/actions/event_collect_entities.py b/pype/ftrack/actions/event_collect_entities.py index 14ad581efc..2f8a37680d 100644 --- a/pype/ftrack/actions/event_collect_entities.py +++ b/pype/ftrack/actions/event_collect_entities.py @@ -7,11 +7,8 @@ class CollectEntities(BaseEvent): priority = 1 def _launch(self, event): - entities, entity_types = self.translate_event(event) - entities_count = len(entities) - event['data']['entities'] = entities - event['data']['entity_types'] = entity_types - event['data']['entities_count'] = entities_count + entities = self.translate_event(event) + event['data']['entities_object'] = entities return True @@ -19,16 +16,14 @@ class CollectEntities(BaseEvent): selection = event['data'].get('selection', []) entities = list() - entity_types = set() for entity in selection: ent = self.session.get( self.get_entity_type(entity), entity.get('entityId') ) entities.append(ent) - entity_types.add(ent.entity_type) - return [entities, entity_types] + return entities def get_entity_type(self, entity): '''Return translated entity type tht can be used with API.''' @@ -61,6 +56,13 @@ class CollectEntities(BaseEvent): priority=self.priority ) + self.session.event_hub.subscribe( + 'topic=ftrack.action.launch' + ' and source.user.username={0}'.format(self.session.api_user), + self._launch, + priority=self.priority + ) + def register(session, **kw): '''Register plugin. Called when used as an plugin.''' diff --git a/pype/ftrack/lib/avalon_sync.py b/pype/ftrack/lib/avalon_sync.py index 4b058fa3c3..6c3c9a0be4 100644 --- a/pype/ftrack/lib/avalon_sync.py +++ b/pype/ftrack/lib/avalon_sync.py @@ -457,12 +457,17 @@ def get_avalon_project(ft_project): def get_project_config(entity): config = {} config['schema'] = pypelib.get_avalon_project_config_schema() - config['tasks'] = [{'name': ''}] + config['tasks'] = get_tasks(entity) config['apps'] = get_project_apps(entity) config['template'] = pypelib.get_avalon_project_template() return config +def get_tasks(project): + return [ + {'name': task_type['name']} for task_type in project[ + 'project_schema']['_task_type_schema']['types'] + ] def get_project_apps(entity): """ Get apps from project diff --git a/pype/ftrack/lib/ftrack_action_handler.py b/pype/ftrack/lib/ftrack_action_handler.py index a02a4da5e5..2249611a4b 100644 --- a/pype/ftrack/lib/ftrack_action_handler.py +++ b/pype/ftrack/lib/ftrack_action_handler.py @@ -62,7 +62,6 @@ class BaseAction(BaseHandler): ) def _launch(self, event): - self.reset_session() args = self._translate_event( self.session, event ) diff --git a/pype/ftrack/lib/ftrack_base_handler.py b/pype/ftrack/lib/ftrack_base_handler.py index 9d94d50072..ce15bd450f 100644 --- a/pype/ftrack/lib/ftrack_base_handler.py +++ b/pype/ftrack/lib/ftrack_base_handler.py @@ -92,11 +92,10 @@ class BaseHandler(object): label = '{} {}'.format(self.label, self.variant) try: - result = func(*args, **kwargs) self.log.info(( '{} "{}" Launched' ).format(self.type, label)) - return result + return func(*args, **kwargs) except Exception as e: self.log.error('{} "{}": Launch failed ({})'.format( self.type, label, str(e)) @@ -129,25 +128,20 @@ class BaseHandler(object): 'icon': self.icon, }] } - accepts = self.prediscover(event) - if accepts is None: - args = self._translate_event( - self.session, event - ) - accepts = self.discover( - self.session, *args - ) + args = self._translate_event( + self.session, event + ) + + accepts = self.discover( + self.session, *args + ) if accepts is True: self.log.debug(u'Discovering action with selection: {0}'.format( event['data'].get('selection', []))) return items - def prediscover(self, event): - "return True if can handle selected entities before handling entities" - return None - def discover(self, session, entities, event): '''Return true if we can handle the selected entities. @@ -170,7 +164,7 @@ class BaseHandler(object): '''Return *event* translated structure to be used with the API.''' '''Return *event* translated structure to be used with the API.''' - _entities = event['data'].get('entities', None) + _entities = event['data'].get('entities_object', None) if _entities is None: selection = event['data'].get('selection', []) _entities = []