def gather_variable_definitions(variable_definition_files, typedefs_new_metadata): """Scan all Fortran source files with variable definitions on the host model side. If typedefs_new_metadata is not None, search all metadata entries and convert new metadata (local names) into old metadata by prepending the DDT references.""" # logging.info( 'Parsing metadata tables for variables provided by host model ...') success = True metadata_define = collections.OrderedDict() dependencies_define = collections.OrderedDict() for variable_definition_file in variable_definition_files: (filedir, filename) = os.path.split(os.path.abspath(variable_definition_file)) # Change to directory of variable_definition_file and parse it os.chdir(os.path.join(BASEDIR, filedir)) (metadata, dependencies) = parse_variable_tables(filedir, filename) metadata_define = merge_dictionaries(metadata_define, metadata) dependencies_define.update(dependencies) # Return to BASEDIR os.chdir(BASEDIR) # if typedefs_new_metadata: logging.info( 'Convert local names from new metadata format into old metadata format ...' ) # Keep track of which variables have already been converted converted_variables = [] for key in metadata_define.keys(): # Double-check that variable definitions are unique if len(metadata_define[key]) > 1: logging.error( "Multiple definitions of standard_name {0} in type/variable defintions" .format(key)) success = False return (success, local_name, converted_variables) = convert_local_name_from_new_metadata( metadata_define, key, typedefs_new_metadata, converted_variables) if not success: logging.error( "An error occurred during the conversion of variable {0} from new to old metadata format" .format(key)) return (success, metadata_define) # Update the local name of the variable, if necessary if not metadata_define[key][0].local_name == local_name: logging.debug( "Updating local name of variable {0} from {1} to {2}". format(key, metadata_define[key][0].local_name, local_name)) metadata_define[key][0].local_name = local_name # return (success, metadata_define, dependencies_define)
def gather_variable_definitions(variable_definition_files): """Scan all Fortran source files with variable definitions on the host model side.""" logging.info('Parsing metadata tables for variables provided by host model ...') success = True metadata_define = {} for variable_definition_file in variable_definition_files: (filedir, filename) = os.path.split(variable_definition_file) # Change to directory of variable_definition_file and parse it os.chdir(os.path.join(BASEDIR,filedir)) metadata = parse_variable_tables(filename) metadata_define = merge_metadata_dicts(metadata_define, metadata) # Return to BASEDIR os.chdir(BASEDIR) return (success, metadata_define)