From cf5e1ba5b493dcfcb577e3808fdced0bca4c9c58 Mon Sep 17 00:00:00 2001 From: Marko Mecina <marko.mecina@univie.ac.at> Date: Thu, 25 Aug 2022 14:18:43 +0200 Subject: [PATCH] use standalone file for TST datapool item overview by default, instead of MIB --- Tst/tst/data_model.py | 4 +- Tst/tst/data_pool_tab.py | 83 +++++++++++++++++++++------------------- egse.cfg | 1 + 3 files changed, 46 insertions(+), 42 deletions(-) diff --git a/Tst/tst/data_model.py b/Tst/tst/data_model.py index 48bf7b8..91cfdbb 100644 --- a/Tst/tst/data_model.py +++ b/Tst/tst/data_model.py @@ -57,8 +57,8 @@ import confignator import toolbox logger = logging.getLogger(__name__) -logger.setLevel(level=logging.DEBUG) -console_hdlr = toolbox.create_console_handler(hdlr_lvl=logging.DEBUG) +logger.setLevel(level=logging.WARNING) +console_hdlr = toolbox.create_console_handler(hdlr_lvl=logging.WARNING) logger.addHandler(hdlr=console_hdlr) # using gettext for internationalization (i18n) diff --git a/Tst/tst/data_pool_tab.py b/Tst/tst/data_pool_tab.py index b97f926..30375d7 100644 --- a/Tst/tst/data_pool_tab.py +++ b/Tst/tst/data_pool_tab.py @@ -5,27 +5,37 @@ gi.require_version("GtkSource", "3.0") from gi.repository import Gtk, Gdk, GtkSource import confignator import sys +import logging sys.path.append(confignator.get_option('paths', 'ccs')) import ccs_function_lib as cfl import s2k_partypes as s2k -dictionary_of_data_pool = cfl.get_data_pool_items() -list_of_data_pool = list(dictionary_of_data_pool.keys()) +try: + DP_ITEMS_SRC_FILE = confignator.get_option('database', 'datapool-items') +except confignator.config.configparser.NoOptionError: + DP_ITEMS_SRC_FILE = None -data_pool_sublist = [] -pid_list = [] +logger = logging.getLogger() def reload_dp_data(): + global DP_ITEMS_SRC_FILE global dictionary_of_data_pool global list_of_data_pool global data_pool_sublist - global pid_list - dictionary_of_data_pool = cfl.get_data_pool_items() - list_of_data_pool = list(dictionary_of_data_pool.keys()) - data_pool_sublist, pid_list = get_data_pool_sublist() + try: + dictionary_of_data_pool = cfl.get_data_pool_items(src_file=DP_ITEMS_SRC_FILE) + except FileNotFoundError: + logger.warning('Could not load data pool from file: {}. Using MIB instead.'.format(DP_ITEMS_SRC_FILE)) + dictionary_of_data_pool = cfl.get_data_pool_items() + + if not isinstance(dictionary_of_data_pool, list): + list_of_data_pool = list(dictionary_of_data_pool.keys()) + data_pool_sublist = get_data_pool_sublist() + else: + data_pool_sublist = dictionary_of_data_pool def get_data_pool_sublist(): @@ -35,20 +45,28 @@ def get_data_pool_sublist(): pcf_ptc = counter[2] pcf_pfc = counter[3] - if pcf_ptc == None: + if pcf_ptc is None: data_type = "None" else: data_type = s2k.ptt[pcf_ptc][pcf_pfc] - if pcf_pid not in pid_list: - pid_list.append(pcf_pid) + data_pool_sublist.append([pcf_pid, pcf_descr, data_type, '', '', '']) - data_pool_sublist.append([pcf_pid, pcf_descr, data_type]) + return data_pool_sublist - return data_pool_sublist, pid_list +data_pool_sublist = [] +try: + dictionary_of_data_pool = cfl.get_data_pool_items(src_file=DP_ITEMS_SRC_FILE) +except FileNotFoundError: + logger.warning('Could not load data pool from file: {}. Using MIB instead.'.format(DP_ITEMS_SRC_FILE)) + dictionary_of_data_pool = cfl.get_data_pool_items() -data_pool_sublist, pid_list = get_data_pool_sublist() +if not isinstance(dictionary_of_data_pool, list): + list_of_data_pool = list(dictionary_of_data_pool.keys()) + data_pool_sublist = get_data_pool_sublist() +else: + data_pool_sublist = dictionary_of_data_pool class DataPoolTable(Gtk.Grid): @@ -56,7 +74,7 @@ class DataPoolTable(Gtk.Grid): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.data_pool_liststore = Gtk.ListStore(str, str, str) + self.data_pool_liststore = Gtk.ListStore(str, str, str, str, str, str) for data_pool_ref in data_pool_sublist: self.data_pool_liststore.append(list(data_pool_ref)) self.current_filter_data_pool = None @@ -66,30 +84,17 @@ class DataPoolTable(Gtk.Grid): # setting the filter function self.data_pool_filter.set_visible_func(self.data_pool_filter_func) + self.pid = None + # Create ListStores for the ComboBoxes - self.pid_liststore = Gtk.ListStore(str) - for pid_ref in pid_list: - self.pid_liststore.append([pid_ref, ]) + # self.pid_liststore = Gtk.ListStore(str) + # for pid_ref in pid_list: + # self.pid_liststore.append([pid_ref, ]) # self.current_filter_type = None - """ - self.pid_combo = Gtk.ComboBox.new_with_model(self.pid_liststore) - self.pid_combo.connect("changed", self.on_pid_combo_changed) - renderer_text = Gtk.CellRendererText() - self.pid_combo.pack_start(renderer_text, True) - self.pid_combo.add_attribute(renderer_text, "text", 0) - self.attach(self.pid_combo, 0, 0, 1, 1) - - self.clear_button = Gtk.Button(label="Clear") - self.clear_button.connect("clicked", self.on_clear_button_clicked) - self.attach_next_to( - self.clear_button, self.pid_combo, Gtk.PositionType.RIGHT, 1, 1 - ) - """ - # creating the treeview, making it use the filter a model, adding columns self.treeview = Gtk.TreeView.new_with_model(Gtk.TreeModelSort(self.data_pool_filter)) - for i, column_title in enumerate(["PID", "DESCR", "DATATYPE"]): + for i, column_title in enumerate(["PID", "NAME", "DATATYPE", "MULT", "PAR/VAR", "DESCR"]): renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(column_title, renderer, text=i) column.set_sort_column_id(i) @@ -97,7 +102,7 @@ class DataPoolTable(Gtk.Grid): # Handle selection self.selected_row = self.treeview.get_selection() - self.selected_row.connect("changed", self.item_selected) + #self.selected_row.connect("changed", self.item_selected) # setting up layout, treeview in scrollwindow self.scrollable_treelist = Gtk.ScrolledWindow() @@ -133,10 +138,7 @@ class DataPoolTable(Gtk.Grid): def item_selected(self, selection): model, row = selection.get_selected() if row is not None: - global pid - pid = model[row][0] - else: - pass + self.pid = model[row][:2] def data_pool_filter_func(self, model, iter, data): @@ -151,7 +153,8 @@ class DataPoolTable(Gtk.Grid): def on_drag_data_get(self, treeview, drag_context, selection_data, info, time, *args): treeselection = treeview.get_selection() model, my_iter = treeselection.get_selected() - selection_data.set_text(pid, -1) + if model is not None and my_iter is not None: + selection_data.set_text(model[my_iter][0], -1) def on_drag_begin(self, *args): pass diff --git a/egse.cfg b/egse.cfg index 6702b37..c7ea41a 100644 --- a/egse.cfg +++ b/egse.cfg @@ -12,6 +12,7 @@ user = egse password = xrayvision host = 127.0.0.1 mib-schema = mib_smile_sxi +datapool-items = /home/marko/space/smile/IDB/dp_sxi_iasw_v0.2R_20220817.csv [logging] log-dir = ${paths:base}/logs -- GitLab