From 00039fca6e9eea655708a1cc9a885a97a1903fdd Mon Sep 17 00:00:00 2001 From: Jakob Scheid Date: Mon, 2 Feb 2026 12:47:28 +0100 Subject: [PATCH] neue Datei: config_parser.py --- config_parser.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 config_parser.py diff --git a/config_parser.py b/config_parser.py new file mode 100644 index 0000000..18ea417 --- /dev/null +++ b/config_parser.py @@ -0,0 +1,47 @@ +QUOTATION_MARKS = {'"', '\''} +KEY_VALUE_LINE = 0 +GROUP_HEADER_LINE = 1 +COMMENT_LINE = 2 + +def reverse_dict(d): + return {k: v for k, v in list(reversed(d.items()))} + +def parse_key_value_line(line): + if '=' not in line: + return {'': ''} + return {line.split('=')[0].strip(): '='.join(line.split('=')[1:]).strip()} + + +def parse_group_header(line): + if line.startswith('[') and line.endswith(']'): + return line[1:-1] + + +def parse_line_type(line): + line = line.strip() + if line.startswith('#'): + return COMMENT_LINE + if line.startswith('[') and line.endswith(']'): + return GROUP_HEADER_LINE + if '=' in line: + return KEY_VALUE_LINE + +def compress_conf(conf): + while '\n\n' in conf: + conf = conf.replace('\n\n', '\n') + return conf.strip() + +def parse_conf(conf): + conf = compress_conf(conf) + result = {} + current_group = {} + for line in list(reversed(conf.split('\n'))): + line = line.strip() + if parse_line_type(line) == COMMENT_LINE: + continue + if parse_line_type(line) == GROUP_HEADER_LINE: + result[parse_group_header(line)] = reverse_dict(current_group) + current_group = {} + if parse_line_type(line) == KEY_VALUE_LINE: + current_group = current_group | parse_key_value_line(line) + return reverse_dict(result)