diff --git a/pype/muster/muster.py b/pype/muster/muster.py index 28f1c2ddd1..b73ae49a32 100644 --- a/pype/muster/muster.py +++ b/pype/muster/muster.py @@ -4,6 +4,7 @@ from Qt import QtWidgets import os import json from .widget_login import MusterLogin +from avalon.vendor import requests class MusterModule: @@ -70,13 +71,39 @@ class MusterModule: return credentials - def save_credentials(self, username, password): + def get_auth_token(self, username, password): + """ + Authenticate user with Muster and get authToken from server. + """ + MUSTER_REST_URL = os.environ.get("MUSTER_REST_URL") + if not MUSTER_REST_URL: + raise AttributeError("Muster REST API url not set") + params = { + 'username': username, + 'password': password + } + api_entry = '/api/login' + response = requests.post( + MUSTER_REST_URL + api_entry, params=params) + if response.status_code != 200: + self.log.error( + 'Cannot log into Muster: {}'.format(response.status_code)) + raise Exception('Cannot login into Muster.') + + try: + token = response.json()['ResponseData']['authToken'] + except ValueError as e: + self.log.error('Invalid response from Muster server {}'.format(e)) + raise Exception('Invalid response from Muster while logging in.') + + self.save_credentials(token) + + def save_credentials(self, token): """ Save credentials to JSON file """ data = { - 'username': username, - 'password': password + 'token': token } file = open(self.cred_path, 'w') diff --git a/pype/muster/widget_login.py b/pype/muster/widget_login.py index 8cb07fe2fe..add4437026 100644 --- a/pype/muster/widget_login.py +++ b/pype/muster/widget_login.py @@ -134,7 +134,7 @@ class MusterLogin(QtWidgets.QWidget): self._close_widget() def save_credentials(self, username, password): - self.parent_widget.save_credentials(username, password) + self.parent_widget.get_auth_token(username, password) def closeEvent(self, event): event.ignore() diff --git a/pype/plugins/maya/create/create_renderglobals.py b/pype/plugins/maya/create/create_renderglobals.py index 4ef92a5126..fb897a3f4f 100644 --- a/pype/plugins/maya/create/create_renderglobals.py +++ b/pype/plugins/maya/create/create_renderglobals.py @@ -55,14 +55,12 @@ class CreateRenderGlobals(avalon.maya.Creator): else: self.log.info(">>> Loading Muster credentials ...") self._load_credentials() - self.log.info(">>> Logging in Muster ...") + self.log.info(">>> Getting pools ...") try: - self._authenticate() + pools = self._get_muster_pools() except requests.exceptions.ConnectionError: self.log.error("Cannot connect to Muster API endpoint.") raise RuntimeError("Cannot connect to {}".format(muster_url)) - self.log.info(">>> Getting pools ...") - pools = self._get_muster_pools() pool_names = [] for pool in pools: self.log.info(" - pool: {}".format(pool['name'])) @@ -105,6 +103,10 @@ class CreateRenderGlobals(avalon.maya.Creator): """ Load Muster credentials from file and set `MUSTER_USER`, `MUSTER_PASSWORD`, `MUSTER_REST_URL` is loaded from presets. + + .. todo:: + + Show login dialog if access token is invalid or missing. """ app_dir = os.path.normpath( appdirs.user_data_dir('pype-app', 'pype') @@ -113,37 +115,14 @@ class CreateRenderGlobals(avalon.maya.Creator): fpath = os.path.join(app_dir, file_name) file = open(fpath, 'r') muster_json = json.load(file) - self.MUSTER_USER = muster_json.get('username', None) - self.MUSTER_PASSWORD = muster_json.get('password', None) + self._token = muster_json.get('token', None) + if not self._token: + raise RuntimeError("Invalid access token for Muster") file.close() self.MUSTER_REST_URL = os.environ.get("MUSTER_REST_URL") if not self.MUSTER_REST_URL: raise AttributeError("Muster REST API url not set") - def _authenticate(self): - """ - Authenticate user with Muster and get authToken from server. - """ - params = { - 'username': self.MUSTER_USER, - 'password': self.MUSTER_PASSWORD - } - api_entry = '/api/login' - response = requests.post( - self.MUSTER_REST_URL + api_entry, params=params) - if response.status_code != 200: - self.log.error( - 'Cannot log into Muster: {}'.format(response.status_code)) - raise Exception('Cannot login into Muster.') - - try: - self._token = response.json()['ResponseData']['authToken'] - except ValueError as e: - self.log.error('Invalid response from Muster server {}'.format(e)) - raise Exception('Invalid response from Muster while logging in.') - - return self._token - def _get_muster_pools(self): """ Get render pools from muster diff --git a/pype/plugins/maya/publish/submit_maya_muster.py b/pype/plugins/maya/publish/submit_maya_muster.py index 621af382ca..22da978d3f 100644 --- a/pype/plugins/maya/publish/submit_maya_muster.py +++ b/pype/plugins/maya/publish/submit_maya_muster.py @@ -141,13 +141,15 @@ class MayaSubmitMuster(pyblish.api.InstancePlugin): icon = "satellite-dish" _token = None - _user = None - _password = None def _load_credentials(self): """ Load Muster credentials from file and set `MUSTER_USER`, `MUSTER_PASSWORD`, `MUSTER_REST_URL` is loaded from presets. + + .. todo:: + + Show login dialog if access token is invalid or missing. """ app_dir = os.path.normpath( appdirs.user_data_dir('pype-app', 'pype') @@ -156,37 +158,14 @@ class MayaSubmitMuster(pyblish.api.InstancePlugin): fpath = os.path.join(app_dir, file_name) file = open(fpath, 'r') muster_json = json.load(file) - self.MUSTER_USER = muster_json.get('username', None) - self.MUSTER_PASSWORD = muster_json.get('password', None) + self._token = muster_json.get('token', None) + if not self._token: + raise RuntimeError("Invalid access token for Muster") file.close() self.MUSTER_REST_URL = os.environ.get("MUSTER_REST_URL") if not self.MUSTER_REST_URL: raise AttributeError("Muster REST API url not set") - def _authenticate(self): - """ - Authenticate user with Muster and get authToken from server. - """ - params = { - 'username': self.MUSTER_USER, - 'password': self.MUSTER_PASSWORD - } - api_entry = '/api/login' - response = requests.post( - self.MUSTER_REST_URL + api_entry, params=params) - if response.status_code != 200: - self.log.error( - 'Cannot log into Muster: {}'.format(response.status_code)) - raise Exception('Cannot login into Muster.') - - try: - self._token = response.json()['ResponseData']['authToken'] - except ValueError as e: - self.log.error('Invalid response from Muster server {}'.format(e)) - raise Exception('Invalid response from Muster while logging in.') - - return self._token - def _get_templates(self): """ Get Muster templates from server. @@ -273,7 +252,6 @@ class MayaSubmitMuster(pyblish.api.InstancePlugin): raise RuntimeError("MUSTER_REST_URL not set") self._load_credentials() - self._authenticate() # self._get_templates() context = instance.context