mirror of
https://github.com/gryf/fs-uae-wrapper.git
synced 2026-02-23 03:25:50 +01:00
Using configparser for getting options from config file
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
@@ -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__":
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user