Ejemplo n.º 1
0
  def on_message(self, message):
    v_response = {
        'v_code': 0,
        'v_context_code': 0,
        'v_error': False,
        'v_data': 1
    }

    try:
        json_object = json.loads(message)
        v_code = json_object['v_code']
        v_context_code = json_object['v_context_code']
        v_data = json_object['v_data']

        v_response['v_context_code'] = v_context_code

        #Login request
        if v_code == request.Login:
            self.v_user_key = v_data
            try:
                v_session = SessionStore(session_key=v_data)['omnidb_session']
                v_response['v_code'] = response.LoginResult
                self.v_list_tab_objects = dict([])
                self.write_message(json.dumps(v_response))
            except Exception:
                v_response['v_code'] = response.SessionMissing
                self.write_message(json.dumps(v_response))
        else:
            #Cancel thread
            if v_code == request.CancelThread:
                try:
                    thread_data = self.v_list_tab_objects[v_data]
                    if thread_data:

                        thread_data['thread'].stop()
                        thread_data['omnidatabase'].v_connection.Cancel()
                except Exception as exc:
                    None;

            else:

                try:
                    #Getting refreshed session
                    s = SessionStore(session_key=self.v_user_key)
                    v_session = s['omnidb_session']
                    self.v_session = v_session

                    #Check database prompt timeout
                    v_timeout = v_session.DatabaseReachPasswordTimeout(v_data['v_db_index'])
                    if v_timeout['timeout']:
                        v_response['v_code'] = response.PasswordRequired
                        self.write_message(json.dumps(v_response))
                        return

                    #create tab object if it doesn't exist
                    try:
                        tab_object = self.v_list_tab_objects[v_data['v_tab_id']]
                    except Exception as exc:
                        v_database = v_session.v_databases[v_data['v_db_index']]['database']
                        v_database_new = OmniDatabase.Generic.InstantiateDatabase(
                            v_database.v_db_type,
                            v_database.v_server,
                            v_database.v_port,
                            v_database.v_service,
                            v_database.v_user,
                            v_database.v_connection.v_password,
                            v_database.v_conn_id,
                            v_database.v_alias
                        )
                        tab_object =  { 'thread': None,
                                     'omnidatabase': v_database_new,
                                     'database_index': -1 }
                        self.v_list_tab_objects[v_data['v_tab_id']] = tab_object
                        None;

                    #create database object
                    if tab_object['database_index']!=v_data['v_db_index']:
                        v_database = v_session.v_databases[v_data['v_db_index']]['database']
                        v_database_new = OmniDatabase.Generic.InstantiateDatabase(
                            v_database.v_db_type,
                            v_database.v_server,
                            v_database.v_port,
                            v_database.v_service,
                            v_database.v_user,
                            v_database.v_connection.v_password,
                            v_database.v_conn_id,
                            v_database.v_alias
                        )
                        tab_object['omnidatabase'] = v_database_new
                        tab_object['database_index'] = v_data['v_db_index']

                    v_data['v_context_code'] = v_context_code
                    v_data['v_database'] = tab_object['omnidatabase']

                    #Query request
                    if v_code == request.Query:

                        t = StoppableThread(thread_query,v_data,self)
                        tab_object['thread'] = t
                        #t.setDaemon(True)
                        t.start()

                        #Send Ack Message
                        v_response['v_code'] = response.QueryAck
                        self.write_message(json.dumps(v_response))

                    #Query edit data
                    elif v_code == request.QueryEditData:
                        t = StoppableThread(thread_query_edit_data,v_data,self)
                        tab_object['thread'] = t
                        #t.setDaemon(True)
                        t.start()

                        #Send Ack Message
                        v_response['v_code'] = response.QueryAck
                        self.write_message(json.dumps(v_response))

                    #Save edit data
                    elif v_code == request.SaveEditData:
                        t = StoppableThread(thread_save_edit_data,v_data,self)
                        tab_object['thread'] = t
                        #t.setDaemon(True)
                        t.start()

                except Exception:
                    v_response['v_code'] = response.SessionMissing
                    self.write_message(json.dumps(v_response))

    except Exception as exc:
        logger.error('''*** Exception ***\n{0}'''.format(traceback.format_exc()))
        v_response['v_code'] = response.MessageException
        v_response['v_data'] = traceback.format_exc().replace('\n','<br>')
        self.write_message(json.dumps(v_response))
Ejemplo n.º 2
0
  def on_message(self, message):
    v_response = {
        'v_code': 0,
        'v_context_code': 0,
        'v_error': False,
        'v_data': 1
    }

    try:
        json_object = json.loads(message)
        v_code = json_object['v_code']
        v_context_code = json_object['v_context_code']
        v_data = json_object['v_data']

        v_response['v_context_code'] = v_context_code
        #Login request
        if v_code == request.Login:
            self.v_user_key = v_data
            try:
                v_session = SessionStore(session_key=v_data)['omnidb_session']
                self.v_session = v_session
                v_response['v_code'] = response.LoginResult
                self.v_list_tab_objects = dict([])
                self.write_message(json.dumps(v_response))
            except Exception:
                v_response['v_code'] = response.SessionMissing
                self.write_message(json.dumps(v_response))
        else:
            #Cancel thread
            if v_code == request.CancelThread:
                try:
                    thread_data = self.v_list_tab_objects[v_data]
                    if thread_data:

                        thread_data['thread'].stop()
                        thread_data['omnidatabase'].v_connection.Cancel()
                except Exception as exc:
                    None;

            #Close Tab
            elif v_code == request.CloseTab:
                for v_tab_close_data in v_data:
                    closeTabHandler(self,v_tab_close_data['tab_id'])
                    #remove from tabs table if db_tab_id is not null
                    if v_tab_close_data['tab_db_id']:
                        try:
                            self.v_session.v_omnidb_database.v_connection.Execute('''
                            delete from tabs
                            where tab_id = {0}
                            '''.format(v_tab_close_data['tab_db_id']))
                        except Exception as exc:
                            None

            else:
                try:
                    #Getting refreshed session
                    s = SessionStore(session_key=self.v_user_key)
                    v_session = s['omnidb_session']
                    self.v_session = v_session

                    #Check database prompt timeout
                    v_timeout = v_session.DatabaseReachPasswordTimeout(v_data['v_db_index'])
                    if v_timeout['timeout']:
                        v_response['v_code'] = response.PasswordRequired
                        self.write_message(json.dumps(v_response))
                        return

                    if v_code == request.Query or v_code == request.QueryEditData or v_code == request.SaveEditData:

                        #create tab object if it doesn't exist
                        try:
                            tab_object = self.v_list_tab_objects[v_data['v_tab_id']]
                        except Exception as exc:
                            v_database = v_session.v_databases[v_data['v_db_index']]['database']
                            v_database_new = OmniDatabase.Generic.InstantiateDatabase(
                                v_database.v_db_type,
                                v_database.v_server,
                                v_database.v_port,
                                v_database.v_service,
                                v_database.v_user,
                                v_database.v_connection.v_password,
                                v_database.v_conn_id,
                                v_database.v_alias
                            )
                            tab_object =  { 'thread': None,
                                         'omnidatabase': v_database_new,
                                         'database_index': -1,
                                         'inserted_tab': False }
                            self.v_list_tab_objects[v_data['v_tab_id']] = tab_object
                            None;

                        #create database object
                        if tab_object['database_index']!=v_data['v_db_index']:
                            v_database = v_session.v_databases[v_data['v_db_index']]['database']
                            v_database_new = OmniDatabase.Generic.InstantiateDatabase(
                                v_database.v_db_type,
                                v_database.v_server,
                                v_database.v_port,
                                v_database.v_service,
                                v_database.v_user,
                                v_database.v_connection.v_password,
                                v_database.v_conn_id,
                                v_database.v_alias
                            )
                            tab_object['omnidatabase'] = v_database_new
                            tab_object['database_index'] = v_data['v_db_index']

                        v_data['v_context_code'] = v_context_code
                        v_data['v_database'] = tab_object['omnidatabase']

                        #Query request
                        if v_code == request.Query:
                            tab_object['tab_db_id'] = v_data['v_tab_db_id']
                            v_data['v_tab_object'] = tab_object
                            t = StoppableThread(thread_query,v_data,self)
                            tab_object['thread'] = t
                            tab_object['type'] = 'query'
                            tab_object['sql_cmd'] = v_data['v_sql_cmd']
                            tab_object['tab_id'] = v_data['v_tab_id']
                            #t.setDaemon(True)
                            t.start()

                            #Send Ack Message
                            v_response['v_code'] = response.QueryAck
                            self.write_message(json.dumps(v_response))

                        #Query edit data
                        elif v_code == request.QueryEditData:
                            t = StoppableThread(thread_query_edit_data,v_data,self)
                            tab_object['thread'] = t
                            tab_object['type'] = 'edit'
                            #t.setDaemon(True)
                            t.start()

                            #Send Ack Message
                            v_response['v_code'] = response.QueryAck
                            self.write_message(json.dumps(v_response))

                        #Save edit data
                        elif v_code == request.SaveEditData:
                            t = StoppableThread(thread_save_edit_data,v_data,self)
                            tab_object['thread'] = t
                            tab_object['type'] = 'edit'
                            #t.setDaemon(True)
                            t.start()
                    #Debugger
                    elif v_code == request.Debug:

                        #New debugger, create connections
                        if v_data['v_state'] == debugState.Starting:
                            v_database = v_session.v_databases[v_data['v_db_index']]['database']
                            v_database_debug = OmniDatabase.Generic.InstantiateDatabase(
                                v_database.v_db_type,
                                v_database.v_server,
                                v_database.v_port,
                                v_database.v_service,
                                v_database.v_user,
                                v_database.v_connection.v_password,
                                v_database.v_conn_id,
                                v_database.v_alias
                            )
                            v_database_control = OmniDatabase.Generic.InstantiateDatabase(
                                v_database.v_db_type,
                                v_database.v_server,
                                v_database.v_port,
                                v_database.v_service,
                                v_database.v_user,
                                v_database.v_connection.v_password,
                                v_database.v_conn_id,
                                v_database.v_alias
                            )
                            tab_object =  { 'thread': None,
                                         'omnidatabase_debug': v_database_debug,
                                         'omnidatabase_control': v_database_control,
                                         'debug_pid': -1,
                                         'cancelled': False,
                                         'tab_id': v_data['v_tab_id'],
                                         'type': 'debug' }
                            self.v_list_tab_objects[v_data['v_tab_id']] = tab_object
                        #Existing debugger, get existing tab_object
                        else:
                            tab_object = self.v_list_tab_objects[v_data['v_tab_id']]

                        v_data['v_context_code'] = v_context_code
                        v_data['v_tab_object'] = tab_object

                        t = StoppableThread(thread_debug,v_data,self)
                        #tab_object['thread'] = t
                        #t.setDaemon(True)
                        t.start()

                        #Send Ack Message
                        v_response['v_code'] = response.QueryAck
                        self.write_message(json.dumps(v_response))

                except Exception as exc:
                    v_response['v_code'] = response.SessionMissing
                    self.write_message(json.dumps(v_response))

    except Exception as exc:
        logger.error('''*** Exception ***\n{0}'''.format(traceback.format_exc()))
        v_response['v_code'] = response.MessageException
        v_response['v_data'] = traceback.format_exc().replace('\n','<br>')
        self.write_message(json.dumps(v_response))