Files
onefinity-firmware/installer/scripts/edit-config
David Carley 41e2334484 • Reorganized the scripts into different categories
• Refactored the graphical boot screens to have separate boot and shutdown images
• Changed the reboot and shutdown code to force the display of the splash images.
• Added 'Team Onefinity.ngc' to the installer files
2022-07-23 20:04:17 -07:00

84 lines
1.8 KiB
Python
Executable File

#!/usr/bin/env python3
import sys
import argparse
import re
def option_type(s, pat = re.compile(r'\w+=.*')):
if not pat.match(s): raise argparse.ArgumentTypeError
return s
parser = argparse.ArgumentParser(description = 'Edit config file.')
parser.add_argument('config', help = 'The configuration file to edit.')
parser.add_argument('options', nargs = '*', type = option_type,
metavar = '<name>=<value>', help = 'An option to set.')
args = parser.parse_args()
# Parse config lines and options
lines = []
options = {}
optRE = re.compile(r'(\w+)\s*=\s*([^#]+)(#.*)?')
class Line:
def __init__(self, text, name = None, value = None, comment = None):
self.text = text
self.name = name
self.value = value
self.comment = comment
def __str__(self):
if self.name is not None:
if self.value.strip():
text = '%s=%s' % (self.name, self.value)
if self.comment: text += ' # ' + self.comment
text += '\n'
return text
else: return ''
return self.text
with open(args.config, 'r') as f:
for line in f:
m = optRE.match(line.strip())
if m: name, value, comment = m.groups()
else: name, value, comment = None, None, None
l = Line(line, name, value, comment)
lines.append(l)
if name is not None: options[name] = l
# Save original config
config = ''.join(map(str, lines))
# Set options
first = True
for opt in args.options:
name, value = opt.split('=', 1)
if name in options: options[name].value = value
else:
if first and len(lines) and str(lines[:-1]).strip() != '':
first = False
lines.append(Line('\n'))
lines.append(Line(None, name, value, None))
# Assemble new config
new_config = ''.join(map(str, lines))
if new_config != config:
with open(args.config, 'w') as f:
f.write(new_config)