From 0a6a9d5a07b7b1f71c6f1e46b97aaf474fcd2585 Mon Sep 17 00:00:00 2001 From: mistangl Date: Thu, 14 Dec 2023 17:22:52 +0100 Subject: [PATCH] =?UTF-8?q?eigene=20Abstrakte=20Klasse=20f=C3=BCr=20alle?= =?UTF-8?q?=20Config=20basierten=20Abfragen=20eingef=C3=BChrt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/manage_configs.py | 64 +++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/lib/manage_configs.py b/lib/manage_configs.py index 592c7cc..e093b2d 100644 --- a/lib/manage_configs.py +++ b/lib/manage_configs.py @@ -5,8 +5,8 @@ from configparser import ConfigParser """ Diese Lib verwaltet alle Config dateien (als .cfg oder als .json) von CreoMigrate """ -class GeneralConfig: - """Klasse mit generellen Methoden für alle Config Objekte""" +class JsonBasedConfig: + """Klasse mit generellen Methoden für alle Config Objekte mit json files""" def __init__(self, config_dir, config_file): """merke dir den Pfad zu den Configdateien""" self.config_path = os.path.join(config_dir, config_file) @@ -20,12 +20,8 @@ class GeneralConfig: """nimm den Json String zur Initialisierung des Objektes""" return json.loads(json_str) - def from_cfg_str(self, cfg_str, config): - """nimm den Json String zur Initialisierung des Objektes""" - config.read_string(cfg_str) - -class TOSGroupsConfig(GeneralConfig): +class TOSGroupsConfig(JsonBasedConfig): """Auslesen der Config Angaben zu den TOS Gruppen""" def __init__(self, config_dir='.', config_file='TOS-Gruppen.json'): @@ -76,7 +72,7 @@ class TOSGroupsConfig(GeneralConfig): self.tos_hierarchy = super().from_json(json_str) -class MaterialTransConfig(GeneralConfig): +class MaterialTransConfig(JsonBasedConfig): """Auslesen der Config zu allen Materialangaben""" def __init__(self, config_dir='.', config_file='Materialübersetzung.json'): @@ -104,10 +100,35 @@ class MaterialTransConfig(GeneralConfig): return self.materials[mat] -class WerkstoffeConfig(GeneralConfig): + +class IniBasedConfig: + """Klasse mit generellen Methoden für alle Config Objekte mit .cfg/.ini files""" + def __init__(self, config_dir, config_file): + """merke dir den Pfad zu den Configdateien""" + self.config_path = os.path.join(config_dir, config_file) + self.isInitalized = False + self.config = ConfigParser(allow_no_value=True) + self.config.optionxform = lambda option: option # preserve case for letters + + def from_cfg_str(self, cfg_str): + """nimm den config String zur Initialisierung des Objektes""" + self.config.read_string(cfg_str) + self.isInitalized = True + + def load_cfg_from_file(self): + """lade das config file vom gegeben Pfad""" + self.config.read(self.config_path) + self.isInitalized = True + + def isInitalized(self): + return self.isInitalized + + def get_section_options(self, section_name): + return self.config.options(section_name) + +class WerkstoffeConfig(IniBasedConfig): """Auslesen der Config zu allen Werkstoffen""" def __init__(self, config_dir='.', config_file='Werkstoff.cfg'): - self.wkstoff_config_parser = None super().__init__(config_dir, config_file) def get_werkstoffe_of_type(self, wtype): @@ -121,26 +142,9 @@ class WerkstoffeConfig(GeneralConfig): siehe Hersteller """ - if not self.wkstoff_config_parser: - self.load_cfg_from_file() - return self.wkstoff_config_parser.options(wtype) - - def from_json(self, json_str): - pass - - def from_cfg_str(self, cfg_str): - """if you have to deal with a .cfg file """ - config = ConfigParser(allow_no_value=True) - config.optionxform = lambda option: option # preserve case for letters - self.wkstoff_config_parser = config - super().from_cfg_str(cfg_str, self.wkstoff_config_parser) - - def load_cfg_from_file(self): - """lade das config file vom gegeben Pfad""" - config = ConfigParser(allow_no_value=True) - config.optionxform = lambda option: option # preserve case for letters - config.read(self.config_path) - self.wkstoff_config_parser = config + if not super().isInitalized(): + super().load_cfg_from_file() + return super().get_section_options(wtype) if __name__ == '__main__':