diff --git a/Ccs/ccs.py b/Ccs/ccs.py index 3220f5d93acaf34550dcc6c0d2dc13834573ef76..16923abfffbf8a4b8183cb1f2aa95d723ef2e9bf 100755 --- a/Ccs/ccs.py +++ b/Ccs/ccs.py @@ -1,55 +1,62 @@ #!/usr/bin/env python3 import sys -import os import editor -import signal -import dbus import gi import DBus_Basic gi.require_version('Gtk', '3.0') -from gi.repository import Gtk,GLib +from gi.repository import Gtk, GLib from dbus.mainloop.glib import DBusGMainLoop -import ccs_function_lib as cfl -#from pydbus import SessionBus +import ccs_function_lib as cfl import confignator + cfg = confignator.get_config() -# t = threading.Thread(target=embed_kernel) -# t.daemon = True -# t.start() -win = editor.CcsEditor() -#cfl.start_editor() - -if cfg.has_option('init', 'init_script'): - init_script = cfg.get('init', 'init_script') - if init_script != '': - init_cmd = 'exec(open("{}","r").read())\n'.format(init_script) - # win.ipython_view.text_buffer.insert_at_cursor(init_cmd, len(init_cmd)) - # win.ipython_view._processLine() - win.ipython_view.feed_child(init_cmd, len(init_cmd)) - -given_cfg = None -for i in sys.argv: - if i.endswith('.cfg'): - given_cfg = i -if given_cfg: - cfg = confignator.get_config(file_path=given_cfg) -else: - cfg = confignator.get_config(file_path=confignator.get_option('config-files', 'ccs')) -# pv = TMPoolView(cfg) -DBusGMainLoop(set_as_default=True) -if len(sys.argv) > 1: - for fname in sys.argv[1:]: - if not fname.startswith('-'): - win.open_file(fname) -else: - win.open_file(os.path.join(confignator.get_option('paths', 'ccs'), 'getting_started.py')) - -Bus_Name = cfg.get('ccs-dbus_names', 'editor') - -DBus_Basic.MessageListener(win, Bus_Name, *sys.argv) - -Gtk.main() +def run(): + global cfg + + win = editor.CcsEditor() + # cfl.start_editor() + + if cfg.has_option('init', 'init_script'): + init_script = cfg.get('init', 'init_script') + if init_script != '': + init_cmd = 'exec(open("{}","r").read())\n'.format(init_script) + # win.ipython_view.text_buffer.insert_at_cursor(init_cmd, len(init_cmd)) + # win.ipython_view._processLine() + win.ipython_view.feed_child(init_cmd, len(init_cmd)) + + given_cfg = None + for i in sys.argv: + if i.endswith('.cfg'): + given_cfg = i + if given_cfg: + cfg = confignator.get_config(file_path=given_cfg) + else: + cfg = confignator.get_config(file_path=confignator.get_option('config-files', 'ccs')) + # pv = TMPoolView(cfg) + DBusGMainLoop(set_as_default=True) + if len(sys.argv) > 1: + for fname in sys.argv[1:]: + if not fname.startswith('-'): + win.open_file(fname) + else: + win.open_file('getting_started.py') + + Bus_Name = cfg.get('ccs-dbus_names', 'editor') + + DBus_Basic.MessageListener(win, Bus_Name, *sys.argv) + + +if __name__ == "__main__": + + if '--quickstart' not in sys.argv: + cfl.ProjectDialog() + Gtk.main() + else: + sys.argv.remove('--quickstart') + + run() + Gtk.main() diff --git a/Ccs/ccs_function_lib.py b/Ccs/ccs_function_lib.py index b4c06121d66b8627b5c22f0227681619c5a011eb..98700889d913312d011e7eee396fac5d1ec4c028 100644 --- a/Ccs/ccs_function_lib.py +++ b/Ccs/ccs_function_lib.py @@ -4,23 +4,24 @@ gi.require_version('Notify', '0.7') from gi.repository import Gtk, GLib, Notify, GdkPixbuf import subprocess import struct -import configparser +# import configparser import crcmod import datetime import dateutil.parser as duparser import io -import itertools +# import itertools import types import sys -import threading -import queue +# import threading +# import queue import select -import traceback +# import traceback import json import time import dbus import socket import os +import glob import numpy as np import logging.handlers from database.tm_db import scoped_session_maker, DbTelemetry, DbTelemetryPool, RMapTelemetry, FEEDataTelemetry @@ -29,6 +30,7 @@ from sqlalchemy.sql.expression import func from s2k_partypes import ptt, ptype_parameters, ptype_values import confignator import importlib + #check_cfg = configparser.ConfigParser() #check_cfg.read('egse.cfg') #check_cfg.source = 'egse.cfg' @@ -90,6 +92,8 @@ fmtlengthlist = {'b': 1, 'B': 1, 'h': 2, 'H': 2, 'i': 4, 'I': 4, 'q': 8, scoped_session_idb = scoped_session_maker('idb', idb_version=None) scoped_session_storage = scoped_session_maker('storage') +PCPREFIX = 'packet_config_' + Notify.init('cfl') @@ -4286,3 +4290,92 @@ class ChangeCommunicationDialog(Gtk.Dialog): main_box.pack_start(self.change_button, 0, 0, 0) return main_box + + +class ProjectDialog(Gtk.Dialog): + """ + Dialog that pops up at CCS/TST startup to allow for project and IDB configuration + """ + + def __init__(self): + super(ProjectDialog, self).__init__() + + self.set_title('Project configuration') + self.set_default_size(300, 100) + + self.project_selection = self._create_project_selection() + self.idb_selection = self._create_idb_selection() + + ca = self.get_content_area() + ca.set_spacing(2) + + project_label = Gtk.Label('Project') + project_label.set_size_request(80, -1) + project_label.set_xalign(0) + project_box = Gtk.Box(Gtk.Orientation.HORIZONTAL) + project_box.pack_start(project_label, 0, 0, 10) + project_box.pack_start(self.project_selection, 1, 1, 0) + ca.add(project_box) + + idb_label = Gtk.Label('IDB schema') + idb_label.set_size_request(80, -1) + idb_label.set_xalign(0) + idb_box = Gtk.Box(Gtk.Orientation.HORIZONTAL) + idb_box.pack_start(idb_label, 0, 0, 10) + idb_box.pack_start(self.idb_selection, 1, 1, 0) + ca.add(idb_box) + + self.add_buttons('OK', 1, 'Cancel', 2) + + self.connect('response', self._write_config) + self.connect('delete-event', Gtk.main_quit) + + self.show_all() + + self.action_area.get_children()[0].grab_focus() # set focus to OK button + + @staticmethod + def _create_project_selection(): + project_selection = Gtk.ComboBoxText() + + ccs_path = confignator.get_option('paths', 'ccs') + ccs_path += '/' if not ccs_path.endswith('/') else '' + projects = glob.glob(ccs_path + PCPREFIX + '*') + + projects = [p.replace(ccs_path + PCPREFIX, '').replace('.py', '') for p in projects] + + for p in projects: + project_selection.append(p, p) + + set_as = confignator.get_option('ccs-database', 'project') + project_selection.set_active_id(set_as) + + return project_selection + + @staticmethod + def _create_idb_selection(): + idb_selection = Gtk.ComboBoxText() + + mibs = scoped_session_idb.execute('show databases').fetchall() + mibs = [mib for mib, in mibs if mib.count('mib')] + + for m in mibs: + idb_selection.append(m, m) + + set_as = confignator.get_option('ccs-database', 'idb_schema') + idb_selection.set_active_id(set_as) + + return idb_selection + + def _write_config(self, widget, data): + if data == 1: + + confignator.save_option('ccs-database', 'project', self.project_selection.get_active_text()) + confignator.save_option('ccs-database', 'idb_schema', self.idb_selection.get_active_text()) + + self.destroy() + Gtk.main_quit() + + else: + self.close() + sys.exit()