Source code for bin.settingsconfiguration
[docs]__author__ = "Martin Paul Eve, Dulip Withnage"
[docs]__email__ = "martin@martineve.com"
from lxml import etree
import os
import docxtotei
[docs]class Settings:
def __init__(self, set_file, args):
tree = etree.parse(set_file)
self.tree = tree
self.script_dir = os.environ['METYPESET']
self.args = args
self.settings_file = set_file
@staticmethod
[docs] def setup_settings_file(args):
if '--settings' in args:
settings = args['--settings']
if settings:
return settings
@staticmethod
[docs] def clean_path(path):
# TODO: cross-platform fix?
path = ''.join(path.split())
return path.replace('\n ', '').replace(" ", "").replace("//", "/")
@staticmethod
[docs] def concat_path(parent, child):
return os.path.join(parent, child)
[docs] def get_setting(self, tag_name, caller, domain=None):
settings = self
if domain is None:
expr = "//*[local-name() = $name]"
else:
expr = "//mt:{0}/*[local-name() = $name]".format(domain, tag_name)
tag = settings.tree.xpath(expr, name=tag_name, namespaces={'mt': 'https://github.com/MartinPaulEve/meTypeset'})
return settings.clean_path(tag[0].text) if tag \
else caller.debug.fatal_error(caller, '{0} is not defined in settings.xml'.format(tag_name))
@staticmethod
[docs] def check_settings_file_exists(caller, set_file):
# noinspection PyBroadException
try:
os.path.isfile(set_file)
except:
caller.debug.fatal_error(caller, 'Settings file {0} does not exist'.format(set_file))
@staticmethod
[docs] def get_settings_file(caller, settings_file_path):
# read the home folder, either from the path or from the settings file
# noinspection PyBroadException
try:
script_dir = os.environ['METYPESET']
except:
# noinspection PyBroadException
try:
mod_path = os.path.dirname(docxtotei.__file__)
script_dir = os.path.abspath(os.path.join(mod_path, os.pardir))
os.environ['METYPESET'] = script_dir
except:
caller.debug.fatal_error(caller, '$METYPESET path not variable is not set '
'and/or was unable to determine runtime path.')
script_dir = "NONPATH"
if settings_file_path == 'default' or settings_file_path is None:
if script_dir != '':
set_file = os.path.join(script_dir, 'bin', 'settings.xml')
Settings.check_settings_file_exists(caller, set_file)
else:
set_file = 'NOFILE'
pass
else:
set_file = settings_file_path
Settings.check_settings_file_exists(caller, set_file)
return set_file