17
17
import logging
18
18
19
19
import requests
20
- from requests .adapters import HTTPAdapter
20
+ from requests .adapters import HTTPAdapter , Retry
21
21
22
22
from ._local import set_current
23
23
from .core .log_manager import LogManager
@@ -96,10 +96,15 @@ def __init__(self,
96
96
self .step_reporter = StepReporter (self )
97
97
self ._item_stack = []
98
98
if retries :
99
+ retry_strategy = Retry (
100
+ total = retries ,
101
+ backoff_factor = 0.1 ,
102
+ status_forcelist = [429 , 500 , 502 , 503 , 504 ]
103
+ )
99
104
self .session .mount ('https://' , HTTPAdapter (
100
- max_retries = retries , pool_maxsize = max_pool_size ))
105
+ max_retries = retry_strategy , pool_maxsize = max_pool_size ))
101
106
self .session .mount ('http://' , HTTPAdapter (
102
- max_retries = retries , pool_maxsize = max_pool_size ))
107
+ max_retries = retry_strategy , pool_maxsize = max_pool_size ))
103
108
self .session .headers ['Authorization' ] = 'bearer {0}' .format (self .token )
104
109
105
110
self ._log_manager = LogManager (
@@ -119,6 +124,9 @@ def finish_launch(self,
119
124
CANCELLED
120
125
:param attributes: Launch attributes
121
126
"""
127
+ if self .launch_id is NOT_FOUND or not self .launch_id :
128
+ logger .warning ("Attempt to finish non-existent launch" )
129
+ return
122
130
url = uri_join (self .base_url_v2 , 'launch' , self .launch_id , 'finish' )
123
131
request_payload = LaunchFinishRequest (
124
132
end_time ,
@@ -127,7 +135,10 @@ def finish_launch(self,
127
135
description = kwargs .get ('description' )
128
136
).payload
129
137
response = HttpRequest (self .session .put , url = url , json = request_payload ,
130
- verify_ssl = self .verify_ssl ).make ()
138
+ verify_ssl = self .verify_ssl ,
139
+ name = 'Finish Launch' ).make ()
140
+ if not response :
141
+ return
131
142
logger .debug ('finish_launch - ID: %s' , self .launch_id )
132
143
logger .debug ('response message: %s' , response .message )
133
144
return response .message
@@ -156,9 +167,9 @@ def finish_test_item(self,
156
167
:param retry: Used to report retry of the test. Allowable values:
157
168
"True" or "False"
158
169
"""
159
- if item_id is NOT_FOUND :
160
- logger .warning ("Uttempt to finish non-existent item" )
161
- return None
170
+ if item_id is NOT_FOUND or not item_id :
171
+ logger .warning ("Attempt to finish non-existent item" )
172
+ return
162
173
url = uri_join (self .base_url_v2 , 'item' , item_id )
163
174
request_payload = ItemFinishRequest (
164
175
end_time ,
@@ -172,7 +183,10 @@ def finish_test_item(self,
172
183
).payload
173
184
response = HttpRequest (self .session .put , url = url , json = request_payload ,
174
185
verify_ssl = self .verify_ssl ).make ()
175
- self ._item_stack .pop ()
186
+ if not response :
187
+ return
188
+ # noinspection PyUnresolvedReferences
189
+ self ._item_stack .pop () if len (self ._item_stack ) > 0 else None
176
190
logger .debug ('finish_test_item - ID: %s' , item_id )
177
191
logger .debug ('response message: %s' , response .message )
178
192
return response .message
@@ -186,7 +200,7 @@ def get_item_id_by_uuid(self, uuid):
186
200
url = uri_join (self .base_url_v1 , 'item' , 'uuid' , uuid )
187
201
response = HttpRequest (self .session .get , url = url ,
188
202
verify_ssl = self .verify_ssl ).make ()
189
- return response .id
203
+ return response .id if response else None
190
204
191
205
def get_launch_info (self ):
192
206
"""Get the current launch information.
@@ -199,6 +213,8 @@ def get_launch_info(self):
199
213
logger .debug ('get_launch_info - ID: %s' , self .launch_id )
200
214
response = HttpRequest (self .session .get , url = url ,
201
215
verify_ssl = self .verify_ssl ).make ()
216
+ if not response :
217
+ return
202
218
if response .is_success :
203
219
launch_info = response .json
204
220
logger .debug (
@@ -214,14 +230,17 @@ def get_launch_ui_id(self):
214
230
215
231
:return: UI ID of the given launch. None if UI ID has not been found.
216
232
"""
217
- return self .get_launch_info ().get ('id' )
233
+ launch_info = self .get_launch_info ()
234
+ return launch_info .get ('id' ) if launch_info else None
218
235
219
236
def get_launch_ui_url (self ):
220
237
"""Get UI URL of the current launch.
221
238
222
239
:return: launch URL or all launches URL.
223
240
"""
224
- ui_id = self .get_launch_ui_id () or ''
241
+ ui_id = self .get_launch_ui_id ()
242
+ if not ui_id :
243
+ return
225
244
path = 'ui/#{0}/launches/all/{1}' .format (self .project , ui_id )
226
245
url = uri_join (self .endpoint , path )
227
246
logger .debug ('get_launch_ui_url - ID: %s' , self .launch_id )
@@ -235,7 +254,7 @@ def get_project_settings(self):
235
254
url = uri_join (self .base_url_v1 , 'settings' )
236
255
response = HttpRequest (self .session .get , url = url , json = {},
237
256
verify_ssl = self .verify_ssl ).make ()
238
- return response .json
257
+ return response .json if response else None
239
258
240
259
def log (self , time , message , level = None , attachment = None , item_id = None ):
241
260
"""Send log message to the Report Portal.
@@ -287,6 +306,8 @@ def start_launch(self,
287
306
url = url ,
288
307
json = request_payload ,
289
308
verify_ssl = self .verify_ssl ).make ()
309
+ if not response :
310
+ return
290
311
self ._log_manager .launch_id = self .launch_id = response .id
291
312
logger .debug ('start_launch - ID: %s' , self .launch_id )
292
313
return self .launch_id
@@ -324,6 +345,10 @@ def start_test_item(self,
324
345
values: "True" or "False"
325
346
:param test_case_id: A unique ID of the current step
326
347
"""
348
+ if parent_item_id is NOT_FOUND :
349
+ logger .warning ("Attempt to start item for non-existent parent "
350
+ "item" )
351
+ return
327
352
if parent_item_id :
328
353
url = uri_join (self .base_url_v2 , 'item' , parent_item_id )
329
354
else :
@@ -346,9 +371,12 @@ def start_test_item(self,
346
371
url = url ,
347
372
json = request_payload ,
348
373
verify_ssl = self .verify_ssl ).make ()
374
+ if not response :
375
+ return
349
376
item_id = response .id
350
377
if item_id is not NOT_FOUND :
351
378
logger .debug ('start_test_item - ID: %s' , item_id )
379
+ # noinspection PyUnresolvedReferences
352
380
self ._item_stack .append (item_id )
353
381
else :
354
382
logger .warning ('start_test_item - invalid response: %s' ,
@@ -375,9 +403,12 @@ def update_test_item(self, item_uuid, attributes=None, description=None):
375
403
url = uri_join (self .base_url_v1 , 'item' , item_id , 'update' )
376
404
response = HttpRequest (self .session .put , url = url , json = data ,
377
405
verify_ssl = self .verify_ssl ).make ()
406
+ if not response :
407
+ return
378
408
logger .debug ('update_test_item - Item: %s' , item_id )
379
409
return response .message
380
410
381
411
def current_item (self ):
382
412
"""Retrieve the last item reported by the client."""
413
+ # noinspection PyUnresolvedReferences
383
414
return self ._item_stack [- 1 ] if len (self ._item_stack ) > 0 else None
0 commit comments