1
0
mirror of https://github.com/gryf/fs-uae-wrapper.git synced 2026-02-23 11:45:49 +01:00

Using configparser for getting options from config file

This commit is contained in:
2016-12-25 11:21:53 +01:00
parent 517831796e
commit 8b51979dc5
3 changed files with 59 additions and 39 deletions

View File

@@ -28,7 +28,7 @@ class Plain(object):
return return
def run(config_file, fs_uae_options, _): def run(config_file, fs_uae_options, _, unused):
"""Run fs-uae with provided config file and options""" """Run fs-uae with provided config file and options"""
runner = Plain() runner = Plain()

View File

@@ -6,26 +6,26 @@ emulator, if appropriate option is enabled.
import importlib import importlib
import os import os
import sys import sys
try:
import configparser
except ImportError:
import ConfigParser as configparser
WRAPPER_KEY = 'wrapper' WRAPPER_KEY = 'wrapper'
def get_wrapper_from_conf(conf): def get_config_options(conf):
""" """Read config file and return options as a dict"""
Process config file only for 'wrapper' option. Specific wrapper modules parser = configparser.SafeConfigParser()
can reread the file, looking for specific for wrapper module options. try:
""" parser.read(conf)
with open(conf) as fobj: except configparser.ParsingError:
for line in fobj.readlines(): # Configuration syntax is wrong
if WRAPPER_KEY in line and '=' in line: return None
key, val = parse_option(line)
if key == WRAPPER_KEY:
break
else:
val = None
return val return {key: val for section in parser.sections()
for key, val in parser.items(section)}
def parse_option(string): def parse_option(string):
@@ -101,9 +101,15 @@ def run():
' for usage\n') ' for usage\n')
sys.exit(1) sys.exit(1)
configuration = get_config_options(config_file)
if configuration is None:
sys.stderr.write('Error: Configuration file have syntax issues\n')
sys.exit(2)
wrapper_module = wrapper_options.get(WRAPPER_KEY) wrapper_module = wrapper_options.get(WRAPPER_KEY)
if not wrapper_module: if not wrapper_module:
wrapper_module = get_wrapper_from_conf(config_file) wrapper_module = configuration.get(WRAPPER_KEY)
if not wrapper_module: if not wrapper_module:
wrapper = importlib.import_module('fs_uae_wrapper.plain') wrapper = importlib.import_module('fs_uae_wrapper.plain')
@@ -114,9 +120,9 @@ def run():
except ImportError: except ImportError:
sys.stderr.write("Error: provided wrapper module: `%s' doesn't " sys.stderr.write("Error: provided wrapper module: `%s' doesn't "
"exists.\n" % wrapper_module) "exists.\n" % wrapper_module)
sys.exit(2) sys.exit(3)
wrapper.run(config_file, fs_uae_options, wrapper_options) wrapper.run(config_file, fs_uae_options, wrapper_options, configuration)
if __name__ == "__main__": if __name__ == "__main__":

View File

@@ -28,7 +28,7 @@ class TestWrapper(TestCase):
os.unlink(self.fname) os.unlink(self.fname)
sys.argv = self._argv[:] sys.argv = self._argv[:]
def test_get_wrapper_from_conf_positive(self): def test_get_config_options(self):
configs = ["[conf]\nwrapper=foo\n", configs = ["[conf]\nwrapper=foo\n",
"[conf]\n wrapper =foo\n", "[conf]\n wrapper =foo\n",
@@ -39,32 +39,38 @@ class TestWrapper(TestCase):
with open(self.fname, 'w') as fobj: with open(self.fname, 'w') as fobj:
fobj.write(cfg) fobj.write(cfg)
val = wrapper.get_wrapper_from_conf(self.fname) val = wrapper.get_config_options(self.fname)
self.assertEqual(val, 'foo') self.assertDictEqual(val, {'wrapper': 'foo'})
def test_get_wrapper_from_conf_negative(self): with open(self.fname, 'w') as fobj:
fobj.write("[conf]\nwraper=foo\n")
conf = wrapper.get_config_options(self.fname)
self.assertDictEqual(conf, {'wraper': 'foo'})
configs = ["[conf]\nwraper=foo\n", with open(self.fname, 'w') as fobj:
"[conf]\nwrapper\n", fobj.write("[conf]\nwrapper\n")
"[conf]\nfullscreen = 1\n"] conf = wrapper.get_config_options(self.fname)
self.assertIsNone(conf)
for cfg in configs: with open(self.fname, 'w') as fobj:
with open(self.fname, 'w') as fobj: fobj.write("[conf]\nfullscreen = 1\n")
fobj.write(cfg) conf = wrapper.get_config_options(self.fname)
self.assertDictEqual(conf, {'fullscreen': '1'})
val = wrapper.get_wrapper_from_conf(self.fname) with open(self.fname, 'w') as fobj:
self.assertIsNone(val) fobj.write("[conf]\nwrapper= = = something went wrong\n")
conf = wrapper.get_config_options(self.fname)
self.assertDictEqual(conf, {'wrapper': '= = something went wrong'})
configs2 = [("[conf]\nwrapper= = = something went wrong\n", with open(self.fname, 'w') as fobj:
"= = something went wrong"), fobj.write("[conf]\nwrapper = = \n")
("[conf]\nwrapper = = \n", "="), conf = wrapper.get_config_options(self.fname)
("[conf]\nwrapper = \n", "")] self.assertDictEqual(conf, {'wrapper': '='})
for cfg, result in configs2:
with open(self.fname, 'w') as fobj:
fobj.write(cfg)
val = wrapper.get_wrapper_from_conf(self.fname) with open(self.fname, 'w') as fobj:
self.assertEqual(val, result) fobj.write("[conf]\nwrapper = \n")
conf = wrapper.get_config_options(self.fname)
self.assertDictEqual(conf, {'wrapper': ''})
@mock.patch('fs_uae_wrapper.plain.run') @mock.patch('fs_uae_wrapper.plain.run')
def test_run(self, mock_plain_run): def test_run(self, mock_plain_run):
@@ -94,6 +100,14 @@ class TestWrapper(TestCase):
sys.argv.append('--wrapper=dummy_wrapper') sys.argv.append('--wrapper=dummy_wrapper')
self.assertRaises(SystemExit, wrapper.run) self.assertRaises(SystemExit, wrapper.run)
def test_run_wrong_conf(self):
os.chdir(self.dirname)
with open('Config.fs-uae', 'w') as fobj:
fobj.write('foo\n')
self.assertRaises(SystemExit, wrapper.run)
def test_parse_option(self): def test_parse_option(self):
# commandline origin # commandline origin