Skip to content
Snippets Groups Projects
anselm.py 18 KiB
Newer Older
wactbprot's avatar
wactbprot committed
import sys
wactbprot's avatar
wactbprot committed
import json
wactbprot's avatar
wactbprot committed
from anselm.system import System # pylint: disable=E0611
wactbprot's avatar
wactbprot committed
from anselm.db import DB # pylint: disable=E0611
wactbprot's avatar
wactbprot committed
from anselm.worker import Worker # pylint: disable=E0611
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication, QPushButton
from PyQt5.QtWidgets import QComboBox, QGridLayout, QPlainTextEdit, QLabel, QLineEdit
wactbprot's avatar
wactbprot committed
from PyQt5.QtCore import QThread, pyqtSignal , Qt
wactbprot's avatar
wactbprot committed

class Observe(QThread, System):
    signal = pyqtSignal('PyQt_PyObject')
    def __init__(self):
        QThread.__init__(self)
        System.__init__(self)
Thomas Bock's avatar
Thomas Bock committed
        self.r.flushdb()
        
    def run(self):
        self.p.subscribe("io")
wactbprot's avatar
..  
wactbprot committed
        self.log.info('start listening redis ')
        for item in self.p.listen():
            self.log.debug("received item: {}".format(item))
wactbprot's avatar
wactbprot committed
            if item['type'] == 'message':
Wact B. Prot's avatar
Wact B. Prot committed
                self.signal.emit(int(item['data']))
wactbprot's avatar
wactbprot committed
class Anselm(System):
Wact B. Prot's avatar
Wact B. Prot committed

wactbprot's avatar
wactbprot committed
    std_select = ["SE3", "CE3", "FRS5", "DKM_PPC4"]
wactbprot's avatar
wactbprot committed
    year_select = ["2019", "2018", "2017"]
wactbprot's avatar
wactbprot committed
    dut_branches = ["dut_a", "dut_b", "dut_c"]
    maintainer_select = ["Ute Becker", "Thomas Bock", "Christian Buchmann"]
    gas_select = ["N2", "Ar", "He", ]
Thomas Bock's avatar
Thomas Bock committed
    runmod_select = ["sequential", "parallel"]
wactbprot's avatar
wactbprot committed
    mult_line_height = 4
wactbprot's avatar
wactbprot committed
    current_grid_line = 1
wactbprot's avatar
wactbprot committed

    std_col = 1
    year_col = 2
    maintainer_col = 3
    gas_col = 4
    add_device_btn_col = 5
Thomas Bock's avatar
Thomas Bock committed
    runmod_col = 6
wactbprot's avatar
wactbprot committed
    
    std_line = 1
    year_line = 1
    maintainer_line = 1
    gas_line =1
wactbprot's avatar
wactbprot committed
    add_device_btn_line = 1
Thomas Bock's avatar
Thomas Bock committed
    runmod_line =1
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
    cal_id_col = 2
    fullscale_col = 3
wactbprot's avatar
wactbprot committed
    dut_branch_col = 4
    devices_col = 5
wactbprot's avatar
wactbprot committed
    task_col = 6
    run_btn_col = 7
wactbprot's avatar
wactbprot committed
    result_col= 1
wactbprot's avatar
wactbprot committed
   
    start_defaults_col = 8
wactbprot's avatar
wactbprot committed
    line_heigth = 28
wactbprot's avatar
wactbprot committed
    long_line = 200
wactbprot's avatar
wactbprot committed
    med_line = 80
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
    def __init__(self):
        super().__init__()
wactbprot's avatar
wactbprot committed
        self.fullscale_list = [
                                {"Unit":self.unit, "Display":"SRG"     , "Value":2.0},  
                                {"Unit":self.unit, "Display":"0.1mbar" , "Value":10.0},  
                                {"Unit":self.unit, "Display":"0.25mbar", "Value":25.0}, 
                                {"Unit":self.unit, "Display":"1mbar"   , "Value":100}, 
Thomas Bock's avatar
Thomas Bock committed
                                {"Unit":self.unit, "Display":"1.1mbar"   , "Value":110}, 
wactbprot's avatar
wactbprot committed
                                {"Unit":self.unit, "Display":"10mbar"  , "Value":1000.0},  
Thomas Bock's avatar
Thomas Bock committed
                                {"Unit":self.unit, "Display":"11mbar"  , "Value":1100.0},  
wactbprot's avatar
wactbprot committed
                                {"Unit":self.unit, "Display":"100mbar" , "Value":10000.},  
Thomas Bock's avatar
Thomas Bock committed
                                {"Unit":self.unit, "Display":"1000mbar", "Value":100000.0}, 
                                {"Unit":self.unit, "Display":"1100mbar", "Value":110000.0},
Thomas Bock's avatar
Thomas Bock committed
                                {"Unit":self.unit, "Display":"0.01Torr" , "Value":1.33}, 
wactbprot's avatar
wactbprot committed
                                {"Unit":self.unit, "Display":"0.1Torr" , "Value":13.3}, 
                                {"Unit":self.unit, "Display":"1Torr"   , "Value":133.0},  
                                {"Unit":self.unit, "Display":"10Torr"  , "Value":1330.0},  
                                {"Unit":self.unit, "Display":"100Torr" , "Value":13300.0},  
                                {"Unit":self.unit, "Display":"1000Torr", "Value":133000.0}, 
                                ]
        self.range_exprs = {
                            "fullscale" :1,
                            "fullscale/10" :0.1,
                            "fullscale/100" :0.01,
                            "fullscale/10000" :0.0001,
                            "fullscale/100000" :0.00001,
wactbprot's avatar
wactbprot committed
        self.db = DB()
wactbprot's avatar
wactbprot committed
        self.worker = Worker()
        self.observer_thread = Observe()
        self.observer_thread.signal.connect(self.end_task)
        self.observer_thread.start()
Wact B. Prot's avatar
Wact B. Prot committed
        self.init_ui()
wactbprot's avatar
wactbprot committed

Wact B. Prot's avatar
Wact B. Prot committed
    def init_ui(self):
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
        self.win = QWidget()
wactbprot's avatar
wactbprot committed
        self.win.closeEvent = self.closeEvent
wactbprot's avatar
wactbprot committed
        self.grid = QGridLayout(self.win)
wactbprot's avatar
wactbprot committed

Thomas Bock's avatar
Thomas Bock committed
        self.add_widget_to_grid(self.make_std_combo(), self.std_line, self.std_col)
wactbprot's avatar
wactbprot committed
        self.draw_grid()
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
    def make_label_edit_pair(self, label_val, edit_val, line):
wactbprot's avatar
wactbprot committed
        label_widget = QLabel(str(label_val), self.win)
        edit_widget = QLineEdit(str(edit_val),  self.win)
wactbprot's avatar
wactbprot committed
        edit_widget.setFixedSize(self.med_line, self.line_heigth)
wactbprot's avatar
wactbprot committed
        edit_widget.textChanged[str].connect(lambda: self.default_change(edit_widget, str(label_val), line))
        
        return label_widget, edit_widget

wactbprot's avatar
wactbprot committed
    def make_add_device_button(self):

wactbprot's avatar
wactbprot committed
        b = QPushButton("add device line", self.win)
wactbprot's avatar
wactbprot committed
        b.setStyleSheet("background-color: yellow")
        b.clicked.connect(self.add_device_line)

        return b

    def make_std_combo(self):
wactbprot's avatar
wactbprot committed
        c = self.make_combo(self.std_select, first_item="select primary standard", last_item=False)
wactbprot's avatar
wactbprot committed
        c.setFixedSize(self.long_line, self.line_heigth)
wactbprot's avatar
wactbprot committed
        c.currentIndexChanged.connect(lambda: self.std_selected(c))
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
        return c
    
    def make_gas_combo(self):
        c = self.make_combo(self.gas_select, first_item="select measurement gas", last_item=False)
        c.setFixedSize(self.long_line, self.line_heigth)
        c.currentIndexChanged.connect(lambda: self.gas_selected(c))
wactbprot's avatar
wactbprot committed

        return c
    
    def make_maintainer_combo(self):
        c = self.make_combo(self.maintainer_select, first_item="select maintainer", last_item=False)
wactbprot's avatar
wactbprot committed
        c.setFixedSize(self.long_line, self.line_heigth)
        c.currentIndexChanged.connect(lambda: self.maintainer_selected(c))
wactbprot's avatar
wactbprot committed

        return c

wactbprot's avatar
wactbprot committed
    def make_year_combo(self):
wactbprot's avatar
wactbprot committed
        c = self.make_combo(self.year_select, first_item="select calibration year", last_item=False)
wactbprot's avatar
wactbprot committed
        c.currentIndexChanged.connect(lambda: self.year_selected(c))
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
        return c

Wact B. Prot's avatar
Wact B. Prot committed
    def add_widget_to_grid(self, widget, line, col):

        #old_widget_item = self.grid.itemAtPosition (line, col)
        #old_widget = old_widget_item.widget()
wactbprot's avatar
wactbprot committed

Wact B. Prot's avatar
Wact B. Prot committed
        self.grid.addWidget(widget, line, col)

Thomas Bock's avatar
Thomas Bock committed
    def make_runmod_combo(self):
        c = self.make_combo(self.runmod_select, first_item="run modus (default: parallel)", last_item=False)
        c.setFixedSize(self.long_line, self.line_heigth)
        c.currentIndexChanged.connect(lambda: self.runmod_selected(c))

        return c

wactbprot's avatar
wactbprot committed
    def make_combo(self, item_list, first_item=True, last_item=True):
wactbprot's avatar
wactbprot committed
        c = QComboBox(self.win)
Wact B. Prot's avatar
Wact B. Prot committed
        if first_item:
wactbprot's avatar
wactbprot committed
            if isinstance(first_item, bool):
                c.addItem(self.first_item)
            if isinstance(first_item, str):
                c.addItem(first_item)

Wact B. Prot's avatar
Wact B. Prot committed
        for item in item_list:
wactbprot's avatar
wactbprot committed
            c.addItem(item)
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
        if last_item:
wactbprot's avatar
wactbprot committed
            if isinstance(last_item, bool):
                c.addItem(self.last_item)
            if isinstance(last_item, str):
                c.addItem(last_item)

wactbprot's avatar
wactbprot committed
        return c
Wact B. Prot's avatar
Wact B. Prot committed

    def run_task(self, line):
        self.log.info("try to start device at line {}".format(line))
        self.worker.work_on_line = line
        self.worker.run()
wactbprot's avatar
wactbprot committed

    def end_task(self, line):
Wact B. Prot's avatar
Wact B. Prot committed
        self.add_widget_to_grid(self.make_result_label(line = line), line, self.result_col)
wactbprot's avatar
wactbprot committed
        self.db.save_results()
        self.log.info("end task at line {}".format(line))

wactbprot's avatar
wactbprot committed
    def add_device_line(self):
        self.current_grid_line +=1
Wact B. Prot's avatar
Wact B. Prot committed
        
wactbprot's avatar
wactbprot committed
        line = self.current_grid_line
wactbprot's avatar
wactbprot committed
        self.add_widget_to_grid(self.make_cal_id_combo(line = line), line, self.cal_id_col)
        self.add_widget_to_grid(self.make_device_combo(line = line), line, self.devices_col)
wactbprot's avatar
wactbprot committed
        self.add_widget_to_grid(self.make_fullscale_combo(line = line), line, self.fullscale_col)
        self.add_widget_to_grid(self.make_dut_branch_combo(line = line), line, self.dut_branch_col)
        self.add_widget_to_grid(self.make_result_label(line = line), line, self.result_col)

wactbprot's avatar
wactbprot committed
    def draw_grid(self):
        self.win.setLayout(self.grid)
wactbprot's avatar
wactbprot committed
        self.win.setWindowTitle('Anselm')
wactbprot's avatar
wactbprot committed
        self.win.show()
wactbprot's avatar
wactbprot committed

Wact B. Prot's avatar
Wact B. Prot committed
    def make_result_label(self, line):
        widget_item = self.grid.itemAtPosition (line, self.result_col)
        if widget_item:
            l = widget_item.widget()
        else:
wactbprot's avatar
wactbprot committed
            l = QPlainTextEdit(self.win)
wactbprot's avatar
wactbprot committed
            l.setFixedSize(self.long_line, self.line_heigth*self.mult_line_height)
wactbprot's avatar
wactbprot committed
        l.setStyleSheet("background-color: lightyellow")
Wact B. Prot's avatar
Wact B. Prot committed
        result = self.aget('result', line)
        exchange = self.aget('exchange', line)
wactbprot's avatar
wactbprot committed
        if result:
wactbprot's avatar
wactbprot committed
            txt = str(result)
        elif exchange:
            txt = str(exchange)
wactbprot's avatar
wactbprot committed
        else:
wactbprot's avatar
wactbprot committed
            txt = ""
        
        txt = txt.replace(",", ",\n")
wactbprot's avatar
wactbprot committed

        l.setPlainText("{}".format(txt))
wactbprot's avatar
wactbprot committed

Wact B. Prot's avatar
Wact B. Prot committed
        return l
wactbprot's avatar
wactbprot committed
    
    def make_run_button(self, line):
wactbprot's avatar
wactbprot committed

        b = QPushButton("test selected task", self.win)
        b.setStyleSheet("background-color: lightgreen")
        b.clicked.connect(lambda: self.run_selected(b, line))
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
    def make_dut_branch_combo(self, line):
wactbprot's avatar
wactbprot committed

        c = self.make_combo(self.dut_branches, first_item="select branch")
wactbprot's avatar
wactbprot committed
        c.currentIndexChanged.connect(lambda: self.dut_branch_selected(c, line))

        return c

    def make_fullscale_combo(self, line):
wactbprot's avatar
wactbprot committed
        fullscale = []
        for d  in self.fullscale_list:
            fullscale.append(d['Display'])
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
        c = self.make_combo(fullscale, first_item="select fullscale")
wactbprot's avatar
wactbprot committed
        c.currentIndexChanged.connect(lambda: self.fullscale_selected(c, line))

        return c

wactbprot's avatar
wactbprot committed
    def make_cal_id_combo(self, line):
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
        cal_ids = self.db.get_cal_ids()
wactbprot's avatar
wactbprot committed
        c = self.make_combo(cal_ids, first_item="select calibration")
wactbprot's avatar
wactbprot committed
        c.currentIndexChanged.connect(lambda: self.cal_id_selected(c, line))
wactbprot's avatar
wactbprot committed

Wact B. Prot's avatar
Wact B. Prot committed
        return c
wactbprot's avatar
wactbprot committed

    def make_device_combo(self, line):
wactbprot's avatar
wactbprot committed

        device_ids = self.db.get_device_ids()
wactbprot's avatar
wactbprot committed

        self.log.debug("found following devices ids {}".format(device_ids))
wactbprot's avatar
wactbprot committed

        c = self.make_combo(device_ids, first_item="select read out device", last_item=False)
        c.currentIndexChanged.connect(lambda: self.device_selected(c, line))
wactbprot's avatar
wactbprot committed

Wact B. Prot's avatar
Wact B. Prot committed
        return c
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
    def make_task_combo(self, doc_id, line):
        ok = False
wactbprot's avatar
wactbprot committed
        tasks = self.db.get_tasks(doc_id = doc_id)
        if tasks:
            self.log.debug("found {} tasks ".format(len(tasks)))
            ok = self.evaluate_auto_tasks(tasks, line)
            if ok:
                first_item = "tasks ok"
                c = self.make_combo([task.get('TaskName') for task in tasks], first_item=first_item, last_item=False)
                c.currentIndexChanged.connect(lambda: self.task_selected(c, line))
            else:
                first_item = "task name problem"
                c = self.make_combo([task.get('TaskName') for task in tasks], first_item=first_item, last_item=False)
wactbprot's avatar
wactbprot committed
            first_item = "no task"
            c = self.make_combo([], first_item=first_item, last_item=False)
            
Wact B. Prot's avatar
Wact B. Prot committed
        return c
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
    def get_pressure_from_range_expr(self, range_expr, line):
        value = self.fget("fullscale_value", line)
        unit = self.aget("fullscale_unit", line)

        if unit and value and range_expr in  self.range_exprs:
            value =  value * self.range_exprs[range_expr]
           
            self.log.debug("found {} {}".format(value, unit))
            
            return value, unit

wactbprot's avatar
wactbprot committed
        else:
            msg = "unknown range expression"
wactbprot's avatar
wactbprot committed
            self.log.error(msg)
            return None, None
wactbprot's avatar
wactbprot committed
    def evaluate_auto_tasks(self, tasks, line):
        offset_all_sequence = []
wactbprot's avatar
wactbprot committed
        auto_init_tasks = []
        auto_offset_tasks = []
        offset_tasks = []
        ind_tasks = []
        range_offset_tasks = []
        range_ind_tasks = []
        res = True
wactbprot's avatar
wactbprot committed
        for task in tasks:
            task_name = task.get('TaskName')
            if 'From' in task:
wactbprot's avatar
wactbprot committed
                task['From'] , task['FromUnit'] , = self.get_pressure_from_range_expr(task.get('From'), line)
wactbprot's avatar
wactbprot committed
            if 'To' in task:
wactbprot's avatar
wactbprot committed
                task['To'] , task['ToUnit'] , = self.get_pressure_from_range_expr(task.get('To'), line)
            if task_name.startswith('auto_init_'):
wactbprot's avatar
wactbprot committed
                auto_init_tasks.append(task)
wactbprot's avatar
wactbprot committed

            if  task_name.startswith('auto_offset_'):        
wactbprot's avatar
wactbprot committed
                auto_offset_tasks.append(task)
            if task_name.startswith('offset'):
                offset_tasks.append(task)
            if task_name.startswith('ind'):
                ind_tasks.append(task)
            
            if task_name.startswith('range_offset'):
                range_offset_tasks.append(task)
            
            if task_name.startswith('range_ind'):
                range_ind_tasks.append(task)
wactbprot's avatar
wactbprot committed
        for init_task in auto_init_tasks:
            sufix = init_task.get('TaskName').replace("auto_init_", "")
            related_offset_task =  "auto_offset_{}".format(sufix)
            for offset_task in  auto_offset_tasks:
                if offset_task.get('TaskName') ==  related_offset_task:
                    offset_all_sequence.append(init_task) 
                    offset_all_sequence.append(offset_task)

wactbprot's avatar
wactbprot committed
        self.aset("offset_all_sequence", line, offset_all_sequence)
        self.log.debug("offset_all_sequence is: {}".format(offset_all_sequence))
wactbprot's avatar
wactbprot committed
        self.aset("auto_init_tasks", line, auto_init_tasks)
        self.log.debug("auto_init_sequence is: {}".format(offset_all_sequence))

        self.aset("offset_tasks", line, offset_tasks)
        self.log.debug("offset_tasks are: {}".format(offset_tasks))
        self.aset("ind_tasks", line, ind_tasks)
        self.log.debug("ind_tasks: {}".format(ind_tasks))
       
        self.aset("range_offset_tasks", line, range_offset_tasks)
        self.log.debug("range_offset_tasks: {}".format(range_offset_tasks))
       
        self.aset("range_ind_tasks", line, range_ind_tasks)
        self.log.debug("range_ind_tasks: {}".format(range_ind_tasks))
       
    def run_selected(self, combo, line):
wactbprot's avatar
wactbprot committed
        self.aset('save', line,  "no" )
        self.log.info("set save to [no]")
wactbprot's avatar
wactbprot committed
        self.run_task(line)
wactbprot's avatar
wactbprot committed
    def task_selected(self, combo, line):
wactbprot's avatar
wactbprot committed
        task_name = combo.currentText()
wactbprot's avatar
wactbprot committed
        
wactbprot's avatar
wactbprot committed

Wact B. Prot's avatar
Wact B. Prot committed
        # add elements for next actions
        self.add_widget_to_grid(self.make_run_button(line=line), line, self.run_btn_col)
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
        self.log.info("task with name {} selected at line {}".format(task_name, line))
wactbprot's avatar
wactbprot committed

    def device_selected(self, combo, line):
Wact B. Prot's avatar
Wact B. Prot committed

wactbprot's avatar
wactbprot committed
        doc_id = combo.currentText()
wactbprot's avatar
wactbprot committed
        self.aset('doc_id', line, doc_id)
wactbprot's avatar
wactbprot committed
        self.log.debug("select {} at line {}".format(doc_id, line))
Wact B. Prot's avatar
Wact B. Prot committed
        task_combo = self.make_task_combo(doc_id = doc_id, line = line)
wactbprot's avatar
wactbprot committed
        if task_combo:
            self.add_widget_to_grid(widget=task_combo, line=line, col=self.task_col)
            defaults = self.db.get_defaults(doc_id)
            self.aset('defaults', line, defaults)

            current_defaults_col = self.start_defaults_col
            for label_val, edit_val in defaults.items():
                self.log.debug(label_val)
                self.log.debug(edit_val)
                label_widget, edit_widget = self.make_label_edit_pair(label_val, edit_val, line)
                self.add_widget_to_grid(label_widget, line, current_defaults_col)
                self.add_widget_to_grid(edit_widget, line, current_defaults_col +1)
                current_defaults_col = current_defaults_col +2
wactbprot's avatar
wactbprot committed
        
wactbprot's avatar
wactbprot committed
    def cal_id_selected(self, combo, line):
        cal_id = combo.currentText()
wactbprot's avatar
wactbprot committed
        self.aset('cal_id', line, cal_id)
wactbprot's avatar
wactbprot committed
        self.log.info("select calibration id {}".format( cal_id ))
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
    def fullscale_selected(self, combo, line):
        fs = combo.currentText()
wactbprot's avatar
wactbprot committed
        for d in self.fullscale_list:
wactbprot's avatar
wactbprot committed
            if d.get('Display') == fs:
wactbprot's avatar
wactbprot committed
                self.aset('fullscale_display', line, d['Display'])
                self.aset('fullscale_value', line, d['Value'])
                self.aset('fullscale_unit', line, d['Unit'])

                self.log.info("select fullscale {}".format( fs ))
                break
wactbprot's avatar
wactbprot committed

    def dut_branch_selected(self, combo, line):
        dut = combo.currentText()
        self.aset('dut_branch', line, dut)
        self.log.info("device at line {} attached to {}".format(line,  dut ))
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
    def std_selected(self, combo):
wactbprot's avatar
wactbprot committed
        standard = combo.currentText()
wactbprot's avatar
wactbprot committed
        self.aset('standard', 0,  standard )
wactbprot's avatar
wactbprot committed
        self.add_widget_to_grid(self.make_year_combo() ,self.year_line, self.year_col)
        self.add_widget_to_grid(self.make_maintainer_combo() ,self.maintainer_line, self.maintainer_col)
        self.add_widget_to_grid(self.make_gas_combo() ,self.gas_line, self.gas_col)
wactbprot's avatar
wactbprot committed
        self.log.info("select standard {}".format( standard))
wactbprot's avatar
wactbprot committed
    
    def maintainer_selected(self, combo):
        maintainer = combo.currentText()
        self.aset('maintainer', 0,  maintainer )
        self.log.info("select maintainer {}".format( maintainer))
   
    def gas_selected(self, combo):
        gas = combo.currentText()
        self.aset('gas', 0,  gas )
        self.log.info("select gas {}".format( gas))
Thomas Bock's avatar
Thomas Bock committed
        self.add_widget_to_grid(self.make_add_device_button(), self.add_device_btn_line, self.add_device_btn_col)
        self.add_widget_to_grid(self.make_runmod_combo(), self.runmod_line, self.runmod_col)
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
    def year_selected(self, combo):
        year = combo.currentText()
wactbprot's avatar
wactbprot committed
        self.aset('year', 0, year)
wactbprot's avatar
wactbprot committed
        self.log.info("select year {}".format( year ))
Thomas Bock's avatar
Thomas Bock committed

    def runmod_selected(self, combo):
        runmod = combo.currentText()
        self.aset('runmod', 0,  runmod)
        self.log.info("select run modus {}".format( runmod))
wactbprot's avatar
wactbprot committed
    def default_change(self, edit_widget, label_val, line):
        self.log.debug(label_val)
        defaults = self.dget('defaults', line)
        task_db = self.dget('task_db', line)

        if label_val in defaults:
            defaults[label_val] = str(edit_widget.text())
            self.aset('defaults', line, defaults)
            task = self.db.replace_defaults(task=task_db, defaults=defaults)
            self.aset('task', line, task)
wactbprot's avatar
wactbprot committed

wactbprot's avatar
wactbprot committed
    def closeEvent(self, event):
wactbprot's avatar
wactbprot committed
        self.log.info("flush redis database, bye!")
wactbprot's avatar
wactbprot committed
        self.r.flushdb()
        if True:
            event.accept()
        else:
            event.ignore()

wactbprot's avatar
wactbprot committed
if __name__ == '__main__':
    app = QApplication(sys.argv)
wactbprot's avatar
wactbprot committed
    Anselm()
wactbprot's avatar
wactbprot committed
    sys.exit(app.exec_())