From ab0ec975c96e9ef8bf286318aa40832cd808a15a Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Wed, 6 Mar 2019 12:23:42 +0100 Subject: [PATCH 1/7] discarted prediscoveries not make sence with collect entities --- .../actions/action_create_cust_attrs.py | 2 +- pype/ftrack/actions/action_create_folders.py | 2 +- pype/ftrack/actions/action_delete_asset.py | 7 +++---- .../actions/action_delete_asset_byname.py | 7 +++---- pype/ftrack/actions/action_job_killer.py | 3 ++- pype/ftrack/actions/action_test.py | 3 ++- pype/ftrack/lib/ftrack_base_handler.py | 19 +++++++------------ 7 files changed, 19 insertions(+), 24 deletions(-) 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..989fc45b60 100644 --- a/pype/ftrack/actions/action_test.py +++ b/pype/ftrack/actions/action_test.py @@ -31,7 +31,8 @@ class TestAction(BaseAction): '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/lib/ftrack_base_handler.py b/pype/ftrack/lib/ftrack_base_handler.py index 9d94d50072..242d3a5c89 100644 --- a/pype/ftrack/lib/ftrack_base_handler.py +++ b/pype/ftrack/lib/ftrack_base_handler.py @@ -129,25 +129,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. From 0660919e6bfd6718127169db598777334d566cc1 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Wed, 6 Mar 2019 12:24:14 +0100 Subject: [PATCH 2/7] log about launching action moved before action launch --- pype/ftrack/lib/ftrack_base_handler.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pype/ftrack/lib/ftrack_base_handler.py b/pype/ftrack/lib/ftrack_base_handler.py index 242d3a5c89..1b521d3251 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)) From f2220ee70fe24f5ad5c485a6d057e28f37b60085 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Wed, 6 Mar 2019 12:26:49 +0100 Subject: [PATCH 3/7] entities renamed to entities_object and entity_types and entities_count removed not used, hard to implement --- pype/ftrack/actions/event_collect_entities.py | 11 +++-------- pype/ftrack/lib/ftrack_base_handler.py | 2 +- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/pype/ftrack/actions/event_collect_entities.py b/pype/ftrack/actions/event_collect_entities.py index 14ad581efc..76840cd629 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.''' diff --git a/pype/ftrack/lib/ftrack_base_handler.py b/pype/ftrack/lib/ftrack_base_handler.py index 1b521d3251..ce15bd450f 100644 --- a/pype/ftrack/lib/ftrack_base_handler.py +++ b/pype/ftrack/lib/ftrack_base_handler.py @@ -164,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 = [] From 5d40e80e823db80921479a50612efe546cb22855 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Wed, 6 Mar 2019 12:27:06 +0100 Subject: [PATCH 4/7] collect entities also run before action launch --- pype/ftrack/actions/event_collect_entities.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pype/ftrack/actions/event_collect_entities.py b/pype/ftrack/actions/event_collect_entities.py index 76840cd629..2f8a37680d 100644 --- a/pype/ftrack/actions/event_collect_entities.py +++ b/pype/ftrack/actions/event_collect_entities.py @@ -56,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.''' From f8221032b528a7aa6a89baf00ea3742a3b3e73f0 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Wed, 6 Mar 2019 12:27:23 +0100 Subject: [PATCH 5/7] reset session removed so event keep data about entities --- pype/ftrack/lib/ftrack_action_handler.py | 1 - 1 file changed, 1 deletion(-) 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 ) From 2f9ed80b674fb222a6d975b5b2e94bc82f63a1ab Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Wed, 6 Mar 2019 12:27:40 +0100 Subject: [PATCH 6/7] test action - fixed role in role_list --- pype/ftrack/actions/action_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pype/ftrack/actions/action_test.py b/pype/ftrack/actions/action_test.py index 989fc45b60..ad97cba487 100644 --- a/pype/ftrack/actions/action_test.py +++ b/pype/ftrack/actions/action_test.py @@ -26,7 +26,7 @@ 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' From 4df5a7176c86d26bfd5a813177233e9463283ec8 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Fri, 8 Mar 2019 12:26:02 +0100 Subject: [PATCH 7/7] task types are syncing to avalon project config/tasks --- pype/ftrack/lib/avalon_sync.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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