diff --git a/pype/ftrack/actions/action_component_open.py b/pype/ftrack/actions/action_component_open.py index e3a974156a..579d8ebe85 100644 --- a/pype/ftrack/actions/action_component_open.py +++ b/pype/ftrack/actions/action_component_open.py @@ -1,6 +1,3 @@ -# :coding: utf-8 -# :copyright: Copyright (c) 2015 Milan Kolar - import sys import argparse import logging @@ -45,9 +42,7 @@ class ComponentOpen(BaseAction): # Get component filepath # TODO with locations it will be different??? fpath = entity['component_locations'][0]['resource_identifier'] - items = fpath.split(os.sep) - items.pop(-1) - fpath = os.sep.join(items) + fpath = os.path.normpath(os.path.dirname(fpath)) if os.path.isdir(fpath): if 'win' in sys.platform: # windows @@ -80,8 +75,7 @@ def register(session, **kw): if not isinstance(session, ftrack_api.session.Session): return - action_handler = ComponentOpen(session) - action_handler.register() + ComponentOpen(session).register() def main(arguments=None): diff --git a/pype/ftrack/actions/action_create_cust_attrs.py b/pype/ftrack/actions/action_create_cust_attrs.py index 8e926fb313..8454d28d80 100644 --- a/pype/ftrack/actions/action_create_cust_attrs.py +++ b/pype/ftrack/actions/action_create_cust_attrs.py @@ -1,11 +1,10 @@ -# :coding: utf-8 -# :copyright: Copyright (c) 2017 ftrack import os import sys import argparse import json import ftrack_api import arrow +import logging from pype.ftrack import BaseAction, get_ca_mongoid """ @@ -136,14 +135,8 @@ class CustomAttributes(BaseAction): Validation - action is only for Administrators ''' - success = False - userId = event['source']['user']['id'] - user = session.query('User where id is ' + userId).one() - for role in user['user_security_roles']: - if role['security_role']['name'] == 'Administrator': - success = True - return success + return True def launch(self, session, entities, event): # JOB SETTINGS @@ -584,14 +577,27 @@ def register(session, **kw): if not isinstance(session, ftrack_api.session.Session): return - action_handler = CustomAttributes(session) - action_handler.register() + roleList = ['Pypeclub', 'Administrator'] + + username = session.api_user + user = session.query('User where username is "{}"'.format(username)).one() + available = False + for role in user['user_security_roles']: + if role['security_role']['name'] in roleList: + available = True + break + if available is True: + CustomAttributes(session).register() + else: + logging.info( + "!!! You're missing required permissions for action {}".format( + CustomAttributes.__name__ + ) + ) def main(arguments=None): '''Set up logging and register action.''' - import logging - if arguments is None: arguments = [] diff --git a/pype/ftrack/actions/action_create_folders.py b/pype/ftrack/actions/action_create_folders.py index 16c7dd2dde..49edb4f9c4 100644 --- a/pype/ftrack/actions/action_create_folders.py +++ b/pype/ftrack/actions/action_create_folders.py @@ -141,8 +141,7 @@ def register(session, **kw): if not isinstance(session, ftrack_api.session.Session): return - action_handler = CreateFolders(session) - action_handler.register() + CreateFolders(session).register() def main(arguments=None): diff --git a/pype/ftrack/actions/action_delete_asset.py b/pype/ftrack/actions/action_delete_asset.py index 7ad2655de1..3d9e3c53d9 100644 --- a/pype/ftrack/actions/action_delete_asset.py +++ b/pype/ftrack/actions/action_delete_asset.py @@ -33,17 +33,7 @@ class DeleteAsset(BaseAction): if entityType.lower() not in valid: return False - discover = False - roleList = ['Pypeclub', 'Administrator'] - userId = event['source']['user']['id'] - user = session.query('User where id is ' + userId).one() - - for role in user['user_security_roles']: - if role['security_role']['name'] in roleList: - discover = True - break - - return discover + return True def _launch(self, event): self.reset_session() @@ -320,7 +310,23 @@ def register(session, **kw): if not isinstance(session, ftrack_api.session.Session): return - DeleteAsset(session).register() + roleList = ['Pypeclub', 'Administrator'] + + username = session.api_user + user = session.query('User where username is "{}"'.format(username)).one() + available = False + for role in user['user_security_roles']: + if role['security_role']['name'] in roleList: + available = True + break + if available is True: + DeleteAsset(session).register() + else: + logging.info( + "!!! You're missing required permissions for action {}".format( + DeleteAsset.__name__ + ) + ) def main(arguments=None): diff --git a/pype/ftrack/actions/action_delete_asset_byname.py b/pype/ftrack/actions/action_delete_asset_byname.py index ab5eeeac2c..1e5658dd9c 100644 --- a/pype/ftrack/actions/action_delete_asset_byname.py +++ b/pype/ftrack/actions/action_delete_asset_byname.py @@ -21,7 +21,7 @@ class AssetsRemover(BaseAction): def discover(self, session, entities, event): ''' Validation ''' selection = event["data"].get("selection", None) - if selection is None: + if selection is None or len(selection) != 1: return False valid = ["show", "task"] @@ -29,17 +29,7 @@ class AssetsRemover(BaseAction): if entityType.lower() not in valid: return False - discover = False - roleList = ['Pypeclub', 'Administrator'] - userId = event['source']['user']['id'] - user = session.query('User where id is ' + userId).one() - - for role in user['user_security_roles']: - if role['security_role']['name'] in roleList: - discover = True - break - - return discover + return True def interface(self, session, entities, event): if not event['data'].get('values', {}): @@ -145,8 +135,23 @@ def register(session, **kw): if not isinstance(session, ftrack_api.session.Session): return - action_handler = AssetsRemover(session) - action_handler.register() + roleList = ['Pypeclub', 'Administrator'] + + username = session.api_user + user = session.query('User where username is "{}"'.format(username)).one() + available = False + for role in user['user_security_roles']: + if role['security_role']['name'] in roleList: + available = True + break + if available is True: + AssetsRemover(session).register() + else: + logging.info( + "!!! You're missing required permissions for action {}".format( + AssetsRemover.__name__ + ) + ) def main(arguments=None): diff --git a/pype/ftrack/actions/action_job_killer.py b/pype/ftrack/actions/action_job_killer.py index 184053ed47..9ca63ff1dd 100644 --- a/pype/ftrack/actions/action_job_killer.py +++ b/pype/ftrack/actions/action_job_killer.py @@ -103,9 +103,23 @@ def register(session, **kw): # return without doing anything. if not isinstance(session, ftrack_api.session.Session): return + roleList = ['Pypeclub', 'Administrator'] - action_handler = JobKiller(session) - action_handler.register() + username = session.api_user + user = session.query('User where username is "{}"'.format(username)).one() + available = False + for role in user['user_security_roles']: + if role['security_role']['name'] in roleList: + available = True + break + if available is True: + JobKiller(session).register() + else: + logging.info( + "!!! You're missing required permissions for action {}".format( + JobKiller.__name__ + ) + ) def main(arguments=None): diff --git a/pype/ftrack/lib/ftrack_app_handler.py b/pype/ftrack/lib/ftrack_app_handler.py index 9aed3d74da..35289f484e 100644 --- a/pype/ftrack/lib/ftrack_app_handler.py +++ b/pype/ftrack/lib/ftrack_app_handler.py @@ -107,9 +107,9 @@ class AppAction(BaseHandler): if avalon_project is None: return False else: - apps = [] - for app in avalon_project['config']['apps']: - apps.append(app['name']) + apps = [app['name'] for app in avalon_project['config'].get( + 'apps', [] + )] if self.identifier not in apps: return False