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