Source code for obci.control.gui.obci_log_model
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import _thread
import time
from PyQt4 import QtCore
[docs]class LogModel(QtCore.QObject):
update_log = QtCore.pyqtSignal(dict)
def __init__(self):
super(LogModel, self).__init__()
self._peers = []
self._emmit = False
self._run = False
self._is_running = False
self._mutex = QtCore.QMutex()
self._peers_log = {}
[docs] def connect_running(self, exp):
self._start_thread(exp)
[docs] def start_running(self, exp):
self._start_thread(exp)
def _start_thread(self, exp):
# self._exp = exp
self._run = True
self._is_running = True
_thread.start_new_thread(
self.run,
()
)
[docs] def stop_running(self):
self._run = False
[docs] def is_running(self):
return self._is_running
[docs] def get_peers(self):
return self._peers
[docs] def get_peer_ind(self, peer_id):
return self._peers.index(peer_id)
[docs] def add_peer(self, peer_id):
self._peers.append(peer_id)
[docs] def remove_peer(self, ind):
self._peers.pop(ind)
[docs] def set_emmiting(self, flag):
self._emmit = flag
[docs] def emit_logs(self):
self._mutex.lock()
for peer_id, log in self._peers_log.items():
self.update_log.emit(log)
self._mutex.unlock()
[docs] def run(self):
print("model start running ")
while self._run:
peer_id, log = self.next_log()
if peer_id is None:
# print ("obci_log_model - ERROR IN RECEIVING LOG ON SOCKET OR TIMEOUT!")
time.sleep(0.1)
else:
self._mutex.lock()
if peer_id not in self._peers_log:
self._peers_log[peer_id] = {'peer_id': peer_id,
'logs': []}
self._peers_log[peer_id]['logs'].append(log)
if self._emmit:
e = {'peer_id': peer_id, 'logs': [log]}
self.update_log.emit(e)
self._mutex.unlock()
print("obci log model - model stoped running ")
self.post_run()
self._is_running = False