Source code for perseuspy.parameters

""" Perseus parameter parsing

This module contains convenience function for parsing
the Perseus parameters.xml file and extracting parameter values
"""
import xml.etree.ElementTree as ET

[docs]def parse_parameters(filename): """ parse the parameters.xml file. :param filename: 'parameters.xml' :returns tree: a 'xml.etree.ElementTree' xml object. """ return ET.parse(filename)
def _simple_string_value(tree, kind, name): """ base function for extracting a simple parameter value. :param tree: the parameters tree. :param kind: the xml-tag name of the parameter. :param name: the name of the parameter. :returns value: the content of the parameter 'Value' as string.""" query = ".//{kind}[@Name='{name}']/Value".format(kind=kind, name=name) return tree.find(query).text
[docs]def stringParam(parameters, name): """ string parameter value. :param parameters: the parameters tree. :param name: the name of the parameter. """ return _simple_string_value(parameters, 'StringParam', name)
[docs]def fileParam(parameters, name): """ file parameter value. :param parameters: the parameters tree. :param name: the name of the parameter. """ return _simple_string_value(parameters, 'FileParam', name)
[docs]def intParam(parameters, name): """ integer parameter value. :param parameters: the parameters tree. :param name: the name of the parameter. """ return int(_simple_string_value(parameters, 'IntParam', name))
[docs]def doubleParam(parameters, name): """ double parameter value. :param parameters: the parameters tree. :param name: the name of the parameter. """ return float(_simple_string_value(parameters, 'DoubleParam', name))
[docs]def singleChoiceParam(parameters, name, type_converter = str): """ single choice parameter value. Returns -1 if no value was chosen. :param parameters: the parameters tree. :param name: the name of the parameter. :param type_converter: function to convert the chosen value to a different type (e.g. str, float, int). default = 'str'""" param = parameters.find(".//SingleChoiceParam[@Name='{name}']".format(name=name)) value = int(param.find('Value').text) values = param.find('Values') if value < 0: return value return type_converter(values[value].text)
[docs]def multiChoiceParam(parameters, name, type_converter = str): """ multi choice parameter values. :param parameters: the parameters tree. :param name: the name of the parameter. :param type_converter: function to convert the chosen value to a different type (e.g. str, float, int). default = 'str' :returns dictionary: value -> values """ param = parameters.find(".//MultiChoiceParam[@Name='{name}']".format(name=name)) value = param.find('Value') values = param.find('Values') multiparam = {} for item in value.findall('Item'): multiparam[int(item.text)] = type_converter(values[int(item.text)].text) return multiparam