codekingpro/portable-devtools
115k
1##########################################################################2#3# pgAdmin 4 - PostgreSQL Tools4#5# Copyright (C) 2013 - 2024, The pgAdmin Development Team6# This software is released under the PostgreSQL Licence7#8##########################################################################9 10from flask import session11from threading import Lock12import secrets13 14debugger_sessions_lock = Lock()15 16 17class DebuggerInstance():18 def __init__(self, trans_id=None):19 if trans_id is None:20 self._trans_id = str(secrets.choice(range(1, 9999999)))21 else:22 self._trans_id = str(trans_id)23 24 self._function_data = None25 self._debugger_data = None26 self.load_from_session()27 28 @property29 def trans_id(self):30 """31 trans_id be readonly with no setter32 """33 return self._trans_id34 35 @property36 def function_data(self):37 return self._function_data38 39 @function_data.setter40 def function_data(self, data):41 self._function_data = data42 self.update_session()43 44 @property45 def debugger_data(self):46 return self._debugger_data47 48 @debugger_data.setter49 def debugger_data(self, data):50 self._debugger_data = data51 self.update_session()52 53 @staticmethod54 def get_trans_ids():55 if '__debugger_sessions' in session:56 return [trans_id for trans_id in session['__debugger_sessions']]57 else:58 return []59 60 def load_from_session(self):61 if '__debugger_sessions' in session and \62 str(self.trans_id) in session['__debugger_sessions']:63 trans_data = session['__debugger_sessions'][str(self.trans_id)]64 self.function_data = trans_data.get('function_data', None)65 self.debugger_data = trans_data.get('debugger_data', None)66 67 def update_session(self):68 with debugger_sessions_lock:69 if '__debugger_sessions' not in session:70 session['__debugger_sessions'] = dict()71 72 session['__debugger_sessions'][str(self.trans_id)] = dict(73 function_data=self.function_data,74 debugger_data=self.debugger_data75 )76 77 def clear(self):78 with debugger_sessions_lock:79 if '__debugger_sessions' in session and \80 str(self.trans_id) in session['__debugger_sessions']:81 session['__debugger_sessions'].pop(str(self.trans_id))82 