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) self._index = 0 self._compsets = None
[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
def __iter__(self): self._index = 0 self._compsets = self.get_children("compset") return self def __next__(self): if self._index >= len(self._compsets): raise StopIteration() value = self._compsets[self._index] alias = self.text(self.get_child("alias", root=value)) lname = self.text(self.get_child("lname", root=value)) self._index += 1 return alias, lname