# SPDX-License-Identifier: WTFPL import os import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk import re from yms import gtkutils, combobox, treeview class StatusView: def __init__(self, context): self.context = context self.title = _("Status") builder = Gtk.Builder() builder.set_translation_domain(context.textdomain) builder.add_from_file(os.path.join(context.ui_path, "status.ui")) builder.connect_signals(self) self.topwidget = builder.get_object("topobject") gtkutils.init_named_controls(self, builder) # Generic information self.label['dbinfo'].set_text("Database: {}".format(context.cfg['db'])) # Load table status info self.lst_tables = Gtk.ListStore(str, int) for row in self.get_table_counts(): self.lst_tables.append(row) treeview.add_column(self.tree['tables'], 'Table', 0) treeview.add_column(self.tree['tables'], '# Records', 1) self.tree['tables'].set_model(self.lst_tables) # Load current config file self.label['config'].set_label(context.cfg['cfgfile']) cfgfile = os.path.expanduser(context.cfg['cfgfile']) try: with open(cfgfile, "r", encoding="utf-8") as f: contents = f.read() except OSError as e: contents = f"Could not read file: {e}" contents = re.sub(r'(^\s*pass\s*=\s*).*$', r'\1********', contents, flags=re.MULTILINE) self.text ['config'].get_buffer().set_text(contents) def get_table_counts(self): # Detect all tables in database sql= ("SELECT table_name " "FROM information_schema.tables " "WHERE table_schema='yms' AND table_type='BASE TABLE' " "ORDER BY table_name") self.context.db.cur.execute(sql) tables = [row[0] for row in self.context.db.cur.fetchall()] # Loop over tables and get current record count records = [] for table in tables: sql = f"SELECT COUNT(*) FROM {table}" self.context.db.cur.execute(sql) records.append((table, self.context.db.cur.fetchone()[0])) return records