Source code for CIME.XML.compsets

"""
Common interface to XML files which follow the compsets format,
"""

from CIME.XML.standard_module_setup import *
from CIME.XML.generic_xml import GenericXML
from CIME.XML.entry_id import EntryID
from CIME.XML.files import Files

logger = logging.getLogger(__name__)

[docs]class Compsets(GenericXML): def __init__(self, infile=None, files=None): if files is None: files = Files() schema = files.get_schema("COMPSETS_SPEC_FILE") GenericXML.__init__(self, infile, schema=schema)
[docs] def get_compset_match(self, name): """ science support is used in cesm to determine if this compset and grid is scientifically supported. science_support is returned as an array of grids for this compset """ nodes = self.get_children("compset") alias = None lname = None science_support = [] for node in nodes: alias = self.get_element_text("alias",root=node) lname = self.get_element_text("lname",root=node) if alias == name or lname == name: science_support_nodes = self.get_children("science_support", root=node) for snode in science_support_nodes: science_support.append(self.get(snode, "grid")) logger.debug("Found node match with alias: {} and lname: {}".format(alias, lname)) return (lname, alias, science_support) return (None, None, [False])
[docs] def get_compset_var_settings(self, compset, grid): ''' Variables can be set in config_compsets.xml in entry id settings with compset and grid attributes find and return id value pairs here ''' entries = self.get_optional_child("entries") result = [] if entries is not None: nodes = self.get_children("entry", root=entries) # Get an empty entryid obj to use entryidobj = EntryID() for node in nodes: value = entryidobj.get_default_value(node, {"grid":grid, "compset":compset}) if value is not None: result.append((self.get(node, "id"), value)) return result
#pylint: disable=arguments-differ
[docs] def get_value(self, name, attribute=None, resolved=False, subgroup=None): expect(subgroup is None, "This class does not support subgroups") if name == "help": rootnode = self.get_child("help") helptext = self.text(rootnode) return helptext else: compsets = {} nodes = self.get_children("compset") for node in nodes: for child in node: logger.debug ("Here child is {} with value {}".format(self.name(child),self.text(child))) if self.name(child) == "alias": alias = self.text(child) if self.name(child) == "lname": lname = self.text(child) compsets[alias] = lname return compsets
[docs] def print_values(self, arg_help=True): help_text = self.get_value(name="help") compsets = self.get_children("compset") if arg_help: logger.info(" {} ".format(help_text)) logger.info(" --------------------------------------") logger.info(" Compset Alias: Compset Long Name ") logger.info(" --------------------------------------") for compset in compsets: logger.info(" {:20} : {}".format(self.text(self.get_child("alias",root=compset)), self.text(self.get_child("lname", root=compset))))
[docs] def get_compset_longnames(self): compset_nodes = self.get_children("compset") longnames = [] for comp in compset_nodes: longnames.append(self.text(self.get_child("lname", root=comp))) return(longnames)