easy-utils-dev 2.159__tar.gz → 2.161__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.
Files changed (42) hide show
  1. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/PKG-INFO +1 -1
  2. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/ne1830PSS.py +19 -6
  3. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/uiserver.py +33 -34
  4. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev.egg-info/PKG-INFO +1 -1
  5. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/setup.py +1 -1
  6. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/MANIFEST.in +0 -0
  7. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/EasySsh.py +0 -0
  8. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/Events.py +0 -0
  9. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/FastQueue.py +0 -0
  10. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/NameObject.py +0 -0
  11. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/__init__.py +0 -0
  12. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/abortable.py +0 -0
  13. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/brevosmtp.py +0 -0
  14. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/check_license.py +0 -0
  15. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/cplib.py +0 -0
  16. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/custom_env.py +0 -0
  17. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/debugger.py +0 -0
  18. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/easy_oracle.py +0 -0
  19. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/encryptor.py +0 -0
  20. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/ept.py +0 -0
  21. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/ept_sql/create_dirs.sql +0 -0
  22. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/ept_sql/create_ept_tables.sql +0 -0
  23. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/exceptions.py +0 -0
  24. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/filescompressor.py +0 -0
  25. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/generate_license.py +0 -0
  26. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/keycloakapi.py +0 -0
  27. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/lralib.py +0 -0
  28. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/nsp_kafka.py +0 -0
  29. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/openid_server.py +0 -0
  30. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/optics_utils.py +0 -0
  31. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/require_auth.py +0 -0
  32. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/simple_sqlite.py +0 -0
  33. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/temp_memory.py +0 -0
  34. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/utils.py +0 -0
  35. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/winserviceapi.py +0 -0
  36. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/wsnoclib.py +0 -0
  37. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev/wsselib.py +0 -0
  38. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev.egg-info/SOURCES.txt +0 -0
  39. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev.egg-info/dependency_links.txt +0 -0
  40. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev.egg-info/requires.txt +0 -0
  41. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/easy_utils_dev.egg-info/top_level.txt +0 -0
  42. {easy_utils_dev-2.159 → easy_utils_dev-2.161}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: easy_utils_dev
3
- Version: 2.159
3
+ Version: 2.161
4
4
  Keywords: python3
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Requires-Dist: psutil
@@ -61,6 +61,7 @@ class PSS1830 :
61
61
  self.screenBuffer = ""
62
62
  self.main_controller_client : paramiko.SSHClient = None
63
63
  self.standby_controller_client : paramiko.SSHClient = None
64
+ self.verify_node_reachability_by_ping = False
64
65
  self.create_jumphost = self.nfmtJumpServer
65
66
  if self.auto_enable_tcp_forward :
66
67
  self.logger.info(f'***WARNING*** : Auto enable tcp forwarding is enabled. This will allow tcp fowarding in target machine then restarting sshd service agent.')
@@ -439,6 +440,8 @@ class PSS1830 :
439
440
 
440
441
 
441
442
  def verify_node_reachability(self , neip ) :
443
+ if not self.verify_node_reachability_by_ping :
444
+ return True
442
445
  self.logger.debug(f"verify_node_reachability from jhost={self.isjumpserver}")
443
446
  if self.isjumpserver == False :
444
447
  if not pingAddress(neip) :
@@ -509,26 +512,33 @@ class PSS1830 :
509
512
  return client
510
513
 
511
514
  def port_switcher( self , mode ) :
512
- if mode == 'direct_cli' or self.sim:
513
- port = 22
515
+ if self.sim :
516
+ return 22
517
+ if mode == 'direct_cli':
518
+ # real be
519
+ # root cli@19.19,19,9
520
+ return 22
514
521
  else:
515
- port = 5122
516
- if mode in ('cli', 'ssh'):
517
- port = 5122
518
- return port
522
+ # real NE
523
+ # ssh root@10.0.0.1 -p 5122
524
+ return 5122
519
525
 
520
526
  def _connect(self , mode='cli' , neip=None , rootpw='QUx1MTIj') :
521
527
  self.client = self.createClient()
522
528
  port = self.port_switcher(mode)
529
+ self.logger.debug(f"Auto switch to port : {port}")
523
530
  try :
524
531
  jhostserver = self.createJhostInstance(neip , port)
525
532
  self.verify_node_reachability(neip)
526
533
  ok = False
527
534
  self.logger.debug(f"connecting to {neip} with mode={mode} and port={port}")
528
535
  if mode == 'direct_cli' :
536
+ self.logger.debug("Mode direct_cli detected")
529
537
  self.client.connect(neip , port , "cli" , '' , sock=jhostserver)
530
538
  ok = True
531
539
  elif mode == 'cli' or mode == 'ssh' :
540
+ self.logger.debug("Mode cli or ssh detected")
541
+ port = 22
532
542
  self.client.connect( neip , port , "root" , rootpw , sock=jhostserver )
533
543
  ok = True
534
544
  self.logger.debug(f"client={self.client} ok={ok} port={port} mode={mode}")
@@ -580,6 +590,7 @@ class PSS1830 :
580
590
  self.logger.debug(f"rootpw specified is obfuscated. Switch to plain text ...")
581
591
  rootpw = self.encryptor.dec_base64(rootpw)
582
592
  self.logger.debug(f"pw specified is obfuscated. Switch to plain text result {rootpw}")
593
+ # self.logger.info(f'root password is {rootpw}')
583
594
  self.logger.debug(f'Opening SSH connection to NE {neip} mode={mode}, resetRequired={resetRequired}')
584
595
  self.cliUser = user
585
596
  self.mode = mode
@@ -640,6 +651,8 @@ class PSS1830 :
640
651
  if mode == 'ssh' :
641
652
  self.logger.debug(f"ssh mode detected. returning self.client object with no switch_to_cli_shell()")
642
653
  self.connected = True
654
+ if return_channel :
655
+ return self.client , None
643
656
  return self.client
644
657
  self.channel = self.switch_to_cli_shell()
645
658
  self.logger.debug(f'set timeout in rcv channel to {self.TIMEOUT}')
@@ -56,25 +56,25 @@ class Response :
56
56
  self.success = self.ok
57
57
  self.failure = self.error
58
58
 
59
- def ok(self , result=[] , message=None , payload={}) :
59
+ def ok(self , result=[] , message=None , **kwargs) :
60
60
  timestamp = getTimestamp()
61
- return {'status' : 200 , 'message' : message , 'result' : result , **payload, 'timestamp' : timestamp}
61
+ return {'status' : 200 , 'message' : message , 'result' : result , **kwargs, 'timestamp' : timestamp}
62
62
 
63
- def error(self , message=None , payload={}) :
63
+ def error(self , message=None , **kwargs) :
64
64
  timestamp = getTimestamp()
65
- return {'status' : 400 , 'message' : message , **payload , 'timestamp' : timestamp}
65
+ return {'status' : 400 , 'message' : message , **kwargs , 'timestamp' : timestamp}
66
66
 
67
- def internal_error(self , message=None , payload={}) :
67
+ def internal_error(self , message=None , **kwargs ) :
68
68
  timestamp = getTimestamp()
69
- return {'status' : 500 , 'message' : message , **payload , 'timestamp' : timestamp}
69
+ return {'status' : 500 , 'message' : message , **kwargs , 'timestamp' : timestamp}
70
70
 
71
- def not_found(self , message=None , payload={}) :
71
+ def not_found(self , message=None , **kwargs) :
72
72
  timestamp = getTimestamp()
73
- return {'status' : 404 , 'message' : message , **payload , 'timestamp' : timestamp}
73
+ return {'status' : 404 , 'message' : message , **kwargs , 'timestamp' : timestamp}
74
74
 
75
- def unauthorized(self , message=None , payload={}) :
75
+ def unauthorized(self , message=None , **kwargs) :
76
76
  timestamp = getTimestamp()
77
- return {'status' : 401 , 'message' : message , **payload , 'timestamp' : timestamp}
77
+ return {'status' : 401 , 'message' : message , **kwargs , 'timestamp' : timestamp}
78
78
 
79
79
  class AbortRequest :
80
80
  def __init__(self, request ) :
@@ -229,35 +229,36 @@ class UISERVER :
229
229
  if not alive :
230
230
  break
231
231
  time.sleep(.25)
232
- return { 'status' : 200 , 'message' : 'Request aborted' , 'abort_timestamp' : timestamp , 'abort_id' : id , 'alive' : alive , 'url' : abort.request.get('path')}
232
+ return Response().ok(message='Request aborted' , abort_timestamp=timestamp , abort_id=id , alive=alive , url=abort.request.get('path'))
233
+
233
234
  else :
234
- return { 'status' : 404 , 'message' : 'Request not found or request is not abortable. Check request headers for abortable flag.'}
235
+ return Response().not_found(message='Request not found or request is not abortable. Check request headers for abortable flag.')
235
236
 
236
237
  @self.app.route(f"/request/traceback/<key>" , methods=['GET'])
237
238
  def get_traceback(key : str ) :
238
239
  traceback = self.cache.get(key)
239
240
  if traceback :
240
- return { 'status' : 200 , 'traceback' : traceback.get('traceback') }
241
+ return Response().ok(message='Traceback found' , traceback=traceback.get('traceback'))
241
242
  else :
242
- return { 'status' : 404 , 'message' : 'Traceback not found or expired' }
243
+ return Response().not_found(message='Traceback not found or expired')
243
244
 
244
245
  @self.app.route(f'{self.request_reply_base_url}/<id>' , methods=['GET'])
245
246
  def get_result_of_async_request(id : str ) :
246
247
  request : AbortRequest = self.bg_requests.get(id)
247
248
  if request :
248
- return {
249
- 'status' : 200 ,
250
- 'internalid' : id ,
251
- 'result' : request.result ,
252
- 'in_progress' : request.in_progress ,
253
- 'async_request' : request.async_request ,
254
- 'internalid' : request.internalid ,
255
- 'start_ts' : request.start_ts ,
256
- 'end_ts' : request.end_ts ,
257
- 'execution' : request.execution,
258
- 'success' : request.success,
259
- 'killed' : request.killed
260
- }
249
+ return Response().ok(
250
+ message='Result of async request found' ,
251
+ result=request.result ,
252
+ in_progress=request.in_progress ,
253
+ async_request=request.async_request ,
254
+ internalid=request.internalid ,
255
+ start_ts=request.start_ts ,
256
+ end_ts=request.end_ts ,
257
+ execution=request.execution ,
258
+ success=request.success ,
259
+ killed=request.killed
260
+ )
261
+
261
262
 
262
263
  @self.app.before_request
263
264
  def before_request() :
@@ -266,7 +267,7 @@ class UISERVER :
266
267
 
267
268
 
268
269
  if (self.serve_with_secret_key) and (request.path not in self.secret_key_execlude_urls) and (request.headers.get('secretkey') != self.secretkey):
269
- return jsonify({"error": "Secret key is invalid"}), 401
270
+ return Response().unauthorized(message='Secret key is invalid')
270
271
 
271
272
  @copy_current_request_context
272
273
  def run_async_job_results( target_func , abort : AbortRequest ) :
@@ -305,11 +306,11 @@ class UISERVER :
305
306
  if request.headers.get('async') == 'false' :
306
307
  target_func = current_app.view_functions.get(request.endpoint)
307
308
  if not target_func:
308
- return {"error": "Route not found"}, 404
309
+ return Response().not_found(message='Route not found')
309
310
  th = start_thread(target=run_async_job_results, args=[target_func , abort ])
310
311
  abort.thread = th
311
312
  self.bg_requests[requestId] = abort
312
- return {"status": 200, "message": "Request now in running bg", "abort_id": abort.abort_id} , 200
313
+ return Response().ok(message='Request now in running bg' , abort_id=abort.abort_id)
313
314
 
314
315
  if self.return_exception_as_code_400 :
315
316
  @self.app.errorhandler(Exception)
@@ -348,15 +349,13 @@ class UISERVER :
348
349
  }
349
350
  self.logger.error(f'error: {json.dumps(response , indent=4)}')
350
351
  self.cache.set( custom_key=key , item={**response , 'traceback' : str(traceback.format_exc())} , auto_destroy_period=1800 , store_deleted_key=False )
351
- # del response['traceback']
352
- return response , 200
352
+ return Response().error( **response )
353
353
 
354
354
  @self.app.after_request
355
355
  def after_request(response) :
356
356
 
357
357
  if self.simulate_network_delay :
358
358
  time.sleep(self.simulate_network_delay)
359
-
360
359
  try :
361
360
  now = getTimestamp()
362
361
  response.headers['internalid'] = request.internalid
@@ -427,7 +426,7 @@ class UISERVER :
427
426
  def _wait_th(self , t ) :
428
427
  # t.join()
429
428
  while True :
430
- time.sleep(10)
429
+ time.sleep(36000)
431
430
 
432
431
 
433
432
  def thrStartUi(self , suppress_prints=True) :
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: easy_utils_dev
3
- Version: 2.159
3
+ Version: 2.161
4
4
  Keywords: python3
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Requires-Dist: psutil
@@ -1,6 +1,6 @@
1
1
  from setuptools import setup, find_packages
2
2
 
3
- VERSION = '2.159'
3
+ VERSION = '2.161'
4
4
 
5
5
  # Setting up
6
6
  setup(
File without changes