Source code for CIME.XML.inputdata
"""
Interface to the config_inputdata.xml file. This class inherits from GenericXML.py
"""
from CIME.XML.standard_module_setup import *
from CIME.XML.generic_xml import GenericXML
from CIME.XML.files import Files
from CIME.utils import expect
logger = logging.getLogger(__name__)
[docs]
class Inputdata(GenericXML):
def __init__(self, infile=None, files=None):
"""
initialize a files object given input pes specification file
"""
if files is None:
files = Files()
if infile is None:
infile = files.get_value("INPUTDATA_SPEC_FILE")
schema = files.get_schema("INPUTDATA_SPEC_FILE")
logger.debug("DEBUG: infile is {}".format(infile))
GenericXML.__init__(self, infile, schema=schema)
self._servernode = None
[docs]
def get_next_server(self, attributes=None):
protocol = None
address = None
user = ""
passwd = ""
chksum_file = None
ic_filepath = None
servernodes = self.get_children("server", attributes=attributes)
# inventory is a CSV list of available data files and the valid date for each
# expected format is pathtofile,YYYY-MM-DD HH:MM:SS
# currently only used for NEON tower data
inventory = None
if not attributes:
servernodes = [x for x in servernodes if not self.attrib(x)]
if servernodes:
if self._servernode is None:
self._servernode = servernodes[0]
else:
prevserver = self._servernode
for i, node in enumerate(servernodes):
if self._servernode == node and len(servernodes) > i + 1:
self._servernode = servernodes[i + 1]
break
if prevserver is not None and self._servernode == prevserver:
self._servernode = None
if self._servernode:
protocol = self.text(self.get_child("protocol", root=self._servernode))
address = self.text(self.get_child("address", root=self._servernode))
unode = self.get_optional_child("user", root=self._servernode)
if unode:
user = self.text(unode)
invnode = self.get_optional_child("inventory", root=self._servernode)
if invnode:
inventory = self.text(invnode)
pnode = self.get_optional_child("password", root=self._servernode)
if pnode:
passwd = self.text(pnode)
csnode = self.get_optional_child("checksum", root=self._servernode)
if csnode:
chksum_file = self.text(csnode)
icnode = self.get_optional_child("ic_filepath", root=self._servernode)
if icnode:
ic_filepath = self.text(icnode)
return protocol, address, user, passwd, chksum_file, ic_filepath, inventory