save authentication with save auth_complete 71/53771/2
authorSerenaFeng <feng.xiaowei@zte.com.cn>
Wed, 14 Mar 2018 09:41:50 +0000 (17:41 +0800)
committerSerena Feng <feng.xiaowei@zte.com.cn>
Wed, 14 Mar 2018 13:08:26 +0000 (13:08 +0000)
✗ testapi -u xxx -p xxxxx -v
initialize_app
(testapi) pod create '{}'
authenticating.....
Create failed: name Missing
(testapi) pod create '{}'
Create failed: name Missing

Change-Id: I9de0949b0bf203032a7b0763e791bd0cd10de7fb
Signed-off-by: SerenaFeng <feng.xiaowei@zte.com.cn>
testapi/testapi-client/testapiclient/main.py
testapi/testapi-client/testapiclient/utils/clientmanager.py

index 22a8fbd..a448146 100644 (file)
@@ -36,7 +36,7 @@ class TestAPIClient(app.App):
 
     def prepare_to_run_command(self, cmd):
         self.LOG.debug('prepare_to_run_command %s', cmd.__class__.__name__)
-        if self.options.u:
+        if self.client_manager.auth_required:
             self.client_manager.auth()
 
     def clean_up(self, cmd, result, err):
index 7e4e630..4401231 100644 (file)
@@ -2,9 +2,12 @@ import httplib
 import json
 import os
 import urllib
+import logging
 
 import requests
 
+LOG = logging.getLogger(__name__)
+
 
 class ClientManager(object):
     headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
@@ -12,19 +15,33 @@ class ClientManager(object):
     def __init__(self, cli_options=None):
         self.cli_options = cli_options
         self.session = requests.Session()
+        self._auth_completed = False
+
+    @property
+    def auth_required(self):
+        return self._auth()
+
+    def _auth(self):
+        return {
+            'name': self.cli_options.u,
+            'pass': self.cli_options.p
+        } if self.cli_options.u else None
 
     def auth(self):
+
+        if self._auth_completed:
+            return
+
         hostname = '{}{}{}'.format(os.environ.get('testapi_cas_auth_url'),
                                    urllib.quote(os.environ.get('testapi_url')),
                                    os.environ.get('testapi_cas_signin_return'))
-        data = {
-            'name': self.cli_options.u,
-            'pass': self.cli_options.p,
-            'form_id': 'user_login'
-        }
+        data = self._auth()
+        data.update({'form_id': 'user_login'})
+        LOG.debug('authenticating.....')
         response = self.session.post(hostname, data)
         if "login" in response.text:
             raise Exception('Authenticate failed')
+        self._auth_completed = True
 
     def get(self, url):
         return self._parse_response('Get',