1
0
mirror of https://github.com/gryf/fs-uae-wrapper.git synced 2025-12-18 12:00:28 +01:00
Files
fs-uae-wrapper/fs_uae_wrapper/wrapper.py
2024-09-14 09:22:41 +02:00

121 lines
3.5 KiB
Python

"""
Wrapper for FS-UAE to perform some actions before and or after running the
emulator, if appropriate option is enabled.
"""
import importlib
import logging
import os
import sys
from fs_uae_wrapper import WRAPPER_KEY, utils
def setup_logger(options):
"""Setup logger format and level"""
level = logging.WARNING
if options['wrapper_quiet']:
level = logging.ERROR
if options['wrapper_quiet'] > 1:
level = logging.CRITICAL
if options['wrapper_verbose']:
level = logging.INFO
if options['wrapper_verbose'] > 1:
level = logging.DEBUG
logging.basicConfig(level=level,
format="%(asctime)s %(levelname)s\t%(filename)s:"
"%(lineno)d:\t\t%(message)s")
def parse_args():
"""
Look out for config file and for config options which would be blindly
passed to fs-uae.
"""
fs_conf = None
options = utils.CmdOption()
options['wrapper_verbose'] = 0
options['wrapper_quiet'] = 0
for parameter in sys.argv[1:]:
if parameter in ['-v', '-q']:
if parameter == '-v':
options['wrapper_verbose'] += 1
if parameter == '-q':
options['wrapper_quiet'] += 1
continue
try:
options.add(parameter)
except AttributeError:
if os.path.exists(parameter):
fs_conf = parameter
if fs_conf is None and os.path.exists('Config.fs-uae'):
fs_conf = 'Config.fs-uae'
return fs_conf, options
def usage():
"""Print help"""
sys.stdout.write("Usage: %s [conf-file] [-v] [-q] [fs-uae-option...]\n\n"
% sys.argv[0])
sys.stdout.write("Config file is not required, if `Config.fs-uae' "
"exists in the current\ndirectory, although it might "
"depend on selected wrapper type. As for the\nfs-uae "
"options, please see `http://fs-uae.net/options'. All "
"options passed\nvia commandline should start with `--' "
"and if they require argument, there\nshould not be a "
"space around `='.\n\n")
def run():
"""run wrapper module"""
config_file, fsuae_options = parse_args()
setup_logger(fsuae_options)
del fsuae_options['wrapper_verbose']
del fsuae_options['wrapper_quiet']
if 'help' in fsuae_options:
usage()
sys.exit(0)
if not config_file:
logging.error('Error: Configuration file not found. See --help'
' for usage')
sys.exit(1)
configuration = utils.get_config_options(config_file)
if configuration is None:
logging.error('Error: Configuration file have syntax issues')
sys.exit(2)
wrapper_module = fsuae_options.get(WRAPPER_KEY)
if not wrapper_module:
wrapper_module = configuration.get(WRAPPER_KEY)
if not wrapper_module:
wrapper = importlib.import_module('fs_uae_wrapper.plain')
else:
try:
wrapper = importlib.import_module('fs_uae_wrapper.' +
wrapper_module)
except ImportError:
logging.error("Error: provided wrapper module: `%s' doesn't "
"exists.", wrapper_module)
sys.exit(3)
runner = wrapper.Wrapper(config_file, fsuae_options, configuration)
try:
exit_code = runner.run()
finally:
runner.clean()
if not exit_code:
sys.exit(4)