예제 #1
0
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)
예제 #2
0
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)