easy-utils-dev 2.158__tar.gz → 2.160__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/PKG-INFO +1 -1
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/uiserver.py +48 -24
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev.egg-info/PKG-INFO +1 -1
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/setup.py +1 -1
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/MANIFEST.in +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/EasySsh.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/Events.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/FastQueue.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/NameObject.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/__init__.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/abortable.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/brevosmtp.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/check_license.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/cplib.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/custom_env.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/debugger.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/easy_oracle.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/encryptor.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/ept.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/ept_sql/create_dirs.sql +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/ept_sql/create_ept_tables.sql +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/exceptions.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/filescompressor.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/generate_license.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/keycloakapi.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/lralib.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/ne1830PSS.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/nsp_kafka.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/openid_server.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/optics_utils.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/require_auth.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/simple_sqlite.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/temp_memory.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/utils.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/winserviceapi.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/wsnoclib.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev/wsselib.py +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev.egg-info/SOURCES.txt +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev.egg-info/dependency_links.txt +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev.egg-info/requires.txt +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/easy_utils_dev.egg-info/top_level.txt +0 -0
- {easy_utils_dev-2.158 → easy_utils_dev-2.160}/setup.cfg +0 -0
|
@@ -51,6 +51,31 @@ def clone_request(request):
|
|
|
51
51
|
"cookies": request.cookies,
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
class Response :
|
|
55
|
+
def __init__(self) :
|
|
56
|
+
self.success = self.ok
|
|
57
|
+
self.failure = self.error
|
|
58
|
+
|
|
59
|
+
def ok(self , result=[] , message=None , **kwargs) :
|
|
60
|
+
timestamp = getTimestamp()
|
|
61
|
+
return {'status' : 200 , 'message' : message , 'result' : result , **kwargs, 'timestamp' : timestamp}
|
|
62
|
+
|
|
63
|
+
def error(self , message=None , **kwargs) :
|
|
64
|
+
timestamp = getTimestamp()
|
|
65
|
+
return {'status' : 400 , 'message' : message , **kwargs , 'timestamp' : timestamp}
|
|
66
|
+
|
|
67
|
+
def internal_error(self , message=None , **kwargs ) :
|
|
68
|
+
timestamp = getTimestamp()
|
|
69
|
+
return {'status' : 500 , 'message' : message , **kwargs , 'timestamp' : timestamp}
|
|
70
|
+
|
|
71
|
+
def not_found(self , message=None , **kwargs) :
|
|
72
|
+
timestamp = getTimestamp()
|
|
73
|
+
return {'status' : 404 , 'message' : message , **kwargs , 'timestamp' : timestamp}
|
|
74
|
+
|
|
75
|
+
def unauthorized(self , message=None , **kwargs) :
|
|
76
|
+
timestamp = getTimestamp()
|
|
77
|
+
return {'status' : 401 , 'message' : message , **kwargs , 'timestamp' : timestamp}
|
|
78
|
+
|
|
54
79
|
class AbortRequest :
|
|
55
80
|
def __init__(self, request ) :
|
|
56
81
|
self.request = clone_request(request)
|
|
@@ -71,7 +96,6 @@ class AbortRequest :
|
|
|
71
96
|
self.delete_async_request_ts = None
|
|
72
97
|
self.killed = False
|
|
73
98
|
|
|
74
|
-
|
|
75
99
|
def abort(self) :
|
|
76
100
|
kill_thread(self.thread)
|
|
77
101
|
self.killed = True
|
|
@@ -205,35 +229,37 @@ class UISERVER :
|
|
|
205
229
|
if not alive :
|
|
206
230
|
break
|
|
207
231
|
time.sleep(.25)
|
|
208
|
-
return
|
|
232
|
+
return Response().ok(message='Request aborted' , abort_timestamp=timestamp , abort_id=id , alive=alive , url=abort.request.get('path'))
|
|
233
|
+
|
|
209
234
|
else :
|
|
210
|
-
return
|
|
235
|
+
return Response().not_found(message='Request not found or request is not abortable. Check request headers for abortable flag.')
|
|
211
236
|
|
|
212
237
|
@self.app.route(f"/request/traceback/<key>" , methods=['GET'])
|
|
213
238
|
def get_traceback(key : str ) :
|
|
214
239
|
traceback = self.cache.get(key)
|
|
215
240
|
if traceback :
|
|
216
|
-
return
|
|
241
|
+
return Response().ok(message='Traceback found' , traceback=traceback.get('traceback'))
|
|
217
242
|
else :
|
|
218
|
-
return
|
|
243
|
+
return Response().not_found(message='Traceback not found or expired')
|
|
219
244
|
|
|
220
245
|
@self.app.route(f'{self.request_reply_base_url}/<id>' , methods=['GET'])
|
|
221
246
|
def get_result_of_async_request(id : str ) :
|
|
222
247
|
request : AbortRequest = self.bg_requests.get(id)
|
|
223
248
|
if request :
|
|
224
|
-
return
|
|
225
|
-
'
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
249
|
+
return Response().ok(
|
|
250
|
+
message='Result of async request found' ,
|
|
251
|
+
internalid=id ,
|
|
252
|
+
result=request.result ,
|
|
253
|
+
in_progress=request.in_progress ,
|
|
254
|
+
async_request=request.async_request ,
|
|
255
|
+
internalid=request.internalid ,
|
|
256
|
+
start_ts=request.start_ts ,
|
|
257
|
+
end_ts=request.end_ts ,
|
|
258
|
+
execution=request.execution ,
|
|
259
|
+
success=request.success ,
|
|
260
|
+
killed=request.killed
|
|
261
|
+
)
|
|
262
|
+
|
|
237
263
|
|
|
238
264
|
@self.app.before_request
|
|
239
265
|
def before_request() :
|
|
@@ -242,7 +268,7 @@ class UISERVER :
|
|
|
242
268
|
|
|
243
269
|
|
|
244
270
|
if (self.serve_with_secret_key) and (request.path not in self.secret_key_execlude_urls) and (request.headers.get('secretkey') != self.secretkey):
|
|
245
|
-
return
|
|
271
|
+
return Response().unauthorized(message='Secret key is invalid')
|
|
246
272
|
|
|
247
273
|
@copy_current_request_context
|
|
248
274
|
def run_async_job_results( target_func , abort : AbortRequest ) :
|
|
@@ -281,11 +307,11 @@ class UISERVER :
|
|
|
281
307
|
if request.headers.get('async') == 'false' :
|
|
282
308
|
target_func = current_app.view_functions.get(request.endpoint)
|
|
283
309
|
if not target_func:
|
|
284
|
-
return
|
|
310
|
+
return Response().not_found(message='Route not found')
|
|
285
311
|
th = start_thread(target=run_async_job_results, args=[target_func , abort ])
|
|
286
312
|
abort.thread = th
|
|
287
313
|
self.bg_requests[requestId] = abort
|
|
288
|
-
return
|
|
314
|
+
return Response().ok(message='Request now in running bg' , abort_id=abort.abort_id)
|
|
289
315
|
|
|
290
316
|
if self.return_exception_as_code_400 :
|
|
291
317
|
@self.app.errorhandler(Exception)
|
|
@@ -324,15 +350,13 @@ class UISERVER :
|
|
|
324
350
|
}
|
|
325
351
|
self.logger.error(f'error: {json.dumps(response , indent=4)}')
|
|
326
352
|
self.cache.set( custom_key=key , item={**response , 'traceback' : str(traceback.format_exc())} , auto_destroy_period=1800 , store_deleted_key=False )
|
|
327
|
-
|
|
328
|
-
return response , 200
|
|
353
|
+
return Response().error( **response )
|
|
329
354
|
|
|
330
355
|
@self.app.after_request
|
|
331
356
|
def after_request(response) :
|
|
332
357
|
|
|
333
358
|
if self.simulate_network_delay :
|
|
334
359
|
time.sleep(self.simulate_network_delay)
|
|
335
|
-
|
|
336
360
|
try :
|
|
337
361
|
now = getTimestamp()
|
|
338
362
|
response.headers['internalid'] = request.internalid
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|