From 502605067f48b012b7284b3d18b9bf8a88c37825 Mon Sep 17 00:00:00 2001 From: Thomas Hooge Date: Tue, 9 Apr 2024 12:39:16 +0200 Subject: [PATCH] Preparation for native gui development --- README | 2 +- yms/__init.py__ | 1 + yms/database.py | 32 ++++++++++++++++++++ ymsgui.py | 77 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 yms/__init.py__ create mode 100644 yms/database.py create mode 100755 ymsgui.py diff --git a/README b/README index 62aa829..26001cc 100644 --- a/README +++ b/README @@ -1,3 +1,3 @@ -YMS - Yacht Managemet System +YMS - Yacht Management System Prototype diff --git a/yms/__init.py__ b/yms/__init.py__ new file mode 100644 index 0000000..e6d10ed --- /dev/null +++ b/yms/__init.py__ @@ -0,0 +1 @@ +__doc__ = """YMS""" diff --git a/yms/database.py b/yms/database.py new file mode 100644 index 0000000..a445dac --- /dev/null +++ b/yms/database.py @@ -0,0 +1,32 @@ +import MySQLdb + +class Database(): + + def __init__(self, hostname, dbname): + self.hostname = hostname + self.schema = dbname + self.conn = None + self.cur = None + self.dcur = None + + def connect(self, dbuser, dbpass): + if self.conn: + return True + MySQLdb.paramstyle = 'pyformat' + try: + self.conn = MySQLdb.connect(host=self.hostname, db=self.schema, + user=dbuser, passwd=dbpass, charset='utf8') + except MySQLdb.Error as e: + print(e) + return False + self.cur = self.conn.cursor() + self.dcur = self.conn.cursor(MySQLdb.cursors.DictCursor) + return True + + def disconnect(self): + self.cur.close() + self.dcur.close() + self.conn.close() + + def is_connected(self): + return self.conn.open diff --git a/ymsgui.py b/ymsgui.py new file mode 100755 index 0000000..b0c2eeb --- /dev/null +++ b/ymsgui.py @@ -0,0 +1,77 @@ +#!/usr/bin/python3 + +""" + +Configuration file located at ~/.config/ymsgui.conf: + [DB] + host = localhost + db = yms + user = yms + pass = topsecret + +""" + +import os +import sys +import locale +import configparser + +import gi +gi.require_version("Gtk", "3.0") +from gi.repository import GLib, Gtk + +from yms import database + +cfg = { + 'cfgfile': '~/.config/ymsgui.conf', + 'host': 'localhost', + 'db': 'yms', + 'user': 'yms' +} + +class Frontend(Gtk.Window): + + def __init__(self): + super().__init__() + self.connect("destroy", self.on_destroy) + + def run(self): + self.show_all() + Gtk.main() + + def on_destroy(self, widget, data=None): + Gtk.main_quit() + +def messagebox(messagetext, symbol=None, title=None, parent=None): + if not symbol: + symbol = Gtk.MessageType.INFO + if parent: + symbol |= Gtk.DIALOG_DESTROY_WITH_PARENT + md = Gtk.MessageDialog(parent=parent, flags=0, message_type=symbol, buttons=Gtk.ButtonsType.CLOSE) + md.set_markup(messagetext) + if title: + md.set_title(title) + if not parent: + md.set_position(Gtk.WindowPosition.CENTER) + md.run() + md.destroy() + +if __name__ == "__main__": + locale.setlocale(locale.LC_ALL, '') + config = configparser.ConfigParser() + if not config.read(os.path.expanduser(cfg['cfgfile'])): + messagebox("Configuration file not found", title="YMS") + else: + cfg['host'] = config.get('DB', 'host') + cfg['db'] = config.get('DB', 'db') + cfg['user'] = config.get('DB', 'user') + cfg['pass'] = config.get('DB', 'pass') + db = database.Database(cfg['host'], cfg['db']) + if db.connect(cfg['user'], cfg['pass']): + app = Frontend() + app.run() + db.disconnect() + else: + messagebox("Database connection cannot be established", title="YMS") + +# Another fine product of the sirius cybernetics corporation