Skip to content

Commit 4e9a88f

Browse files
fix: login in bohrium error and retry (#301)
1 parent 6f38981 commit 4e9a88f

File tree

1 file changed

+32
-17
lines changed

1 file changed

+32
-17
lines changed

dpdispatcher/dpcloudserver/client.py

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,19 @@ def __init__(self, email=None, password=None, debug=False,
3737
self.last_log_offset = 0
3838

3939
def post(self, url, data=None, header=None, params=None, retry=5):
40-
self.refresh_token()
4140
return self._req('POST', url, data=data, header=header, params=params, retry=retry)
4241

4342
def get(self, url, header=None, params=None, retry=5):
44-
self.refresh_token()
4543
return self._req('GET', url, header=header, params=params, retry=retry)
4644

4745
def _req(self, method, url, data=None, header=None, params=None, retry=5):
4846
short_url = url
4947
url = urllib.parse.urljoin(self.base_url, url)
5048
if header is None:
5149
header = {}
52-
if self.token:
53-
header['Authorization'] = f'jwt {self.token}'
50+
if not self.token:
51+
self.refresh_token()
52+
header['Authorization'] = f'jwt {self.token}'
5453
resp_code = None
5554
err = None
5655
for i in range(retry):
@@ -70,16 +69,17 @@ def _req(self, method, url, data=None, header=None, params=None, retry=5):
7069
try:
7170
result = resp.json()
7271
err = result.get("error")
73-
except:
72+
except Exception:
7473
pass
7574
time.sleep(0.1 * i)
7675
continue
7776
result = resp.json()
7877
if result['code'] == '0000' or result['code'] == 0:
7978
return result.get('data', {})
8079
else:
80+
self.token = ""
81+
self.refresh_token()
8182
err = result.get('message') or result.get('error')
82-
break
8383
raise RequestInfoException(resp_code, short_url, err)
8484

8585
def _login(self):
@@ -94,22 +94,37 @@ def _login(self):
9494
# print(self.token)
9595
self.user_id = resp['user_id']
9696

97-
def refresh_token(self):
97+
def refresh_token(self, retry=3):
9898
url = '/account/login'
9999
post_data = {
100100
'email': self.config['email'],
101101
'password': self.config['password']
102102
}
103-
ret = requests.post(
104-
urljoin(API_HOST, url),
105-
json=post_data,
106-
timeout=HTTP_TIME_OUT,
107-
)
108-
ret = json.loads(ret.text)
109-
if ret['code'] == RETCODE.OK or ret['code'] == 0:
110-
self.token = ret['data']['token']
111-
return
112-
raise ValueError(f"{url} Error: {ret['code']} {ret.get('message', ret.get('error'))} ")
103+
resp_code = None
104+
err = None
105+
for i in range(retry):
106+
resp = requests.post(
107+
urljoin(API_HOST, url),
108+
json=post_data,
109+
timeout=HTTP_TIME_OUT,
110+
)
111+
resp_code = resp.status_code
112+
if not resp.ok:
113+
if self.debug:
114+
print(f"login retry: {i},statusCode: {resp.status_code}")
115+
try:
116+
result = resp.json()
117+
err = result.get("error")
118+
except Exception:
119+
pass
120+
time.sleep(1 * i)
121+
continue
122+
123+
result = resp.json()
124+
if result['code'] == RETCODE.OK or result['code'] == 0:
125+
self.token = result['data']['token']
126+
return
127+
raise RequestInfoException(resp_code, url, err)
113128

114129
def _get_oss_bucket(self, endpoint, bucket_name):
115130
# res = get("/tools/sts_token", {})

0 commit comments

Comments
 (0)