def get_checksum_type(self): """ Gets the checksum type to use. Be careful to Exception constants by reading two different sections. :returns: The checksum type :rtype: *str* """ _cfg = SectionParser(section='DEFAULT', directory=self.config_dir) if _cfg.has_option('checksum', section='DEFAULT'): checksum_type = _cfg.get_options_from_table( 'checksum')[0][1].lower() else: # Use SHA256 as default because esg.ini not mandatory in configuration directory checksum_type = 'sha256' if checksum_type not in checksum_types: raise InvalidChecksumType(checksum_type) return checksum_type
def yield_xml_from_card(card_path): """ Yields XML path from run.card and config.card attributes. :param str card_path: Directory including run.card and config.card :returns: The XML paths to use :rtype: *iter* """ # Check cards exist if RUN_CARD not in os.listdir(card_path): raise NoRunCardFound(card_path) else: run_card = os.path.join(card_path, RUN_CARD) if CONF_CARD not in os.listdir(card_path): raise NoConfigCardFound(card_path) else: conf_card = os.path.join(card_path, CONF_CARD) # Extract config info from config.card config = SectionParser('UserChoices') config.read(conf_card) xml_attrs = dict() xml_attrs['root'] = FILEDEF_ROOT xml_attrs['longname'] = config.get('longname').strip('"') xml_attrs['experimentname'] = config.get('experimentname').strip('"') if config.has_option('modelname'): xml_attrs['modelname'] = config.get('modelname').strip('"') else: xml_attrs['modelname'] = 'IPSL-CM6A-LR' xml_attrs['member'] = config.get('member').strip('"') # Extract first and last simulated years from run.card with open(run_card, 'r') as f: lines = f.read().split('\n') # Get run table without header lines = [line for line in lines if line.count('|') == 8][1:] year_start = int(lines[0].split()[3][:4]) year_end = int(lines[-1].split()[5][:4]) for year in range(year_start, year_end + 1): xml_attrs['year'] = str(year) yield FILEDEF_DIRECTORY_FORMAT.format(**xml_attrs)