neue Datei: .gitignore

neue Datei:     pyproject.toml
	umbenannt:      config_parser.py -> src/config_parser/__init__.py
	neue Datei:     src/config_parser/__main__.py
This commit is contained in:
2026-02-02 13:59:37 +01:00
parent ff646e40b6
commit d34c40e52a
4 changed files with 12 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
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_ini(conf):
'''Parses INI configuration from a string and returns a nested dictionary.'''
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)