Exemplo n.º 1
0
def get_names(cf_coord_var, coord_name, attributes):
    """Determine the standard_name, long_name and var_name attributes."""

    standard_name = getattr(cf_coord_var, CF_ATTR_STD_NAME, None)
    long_name = getattr(cf_coord_var, CF_ATTR_LONG_NAME, None)
    cf_name = str(cf_coord_var.cf_name)

    if standard_name is not None:
        try:
            standard_name = _get_valid_standard_name(standard_name)
        except ValueError:
            if long_name is not None:
                attributes["invalid_standard_name"] = standard_name
                if coord_name is not None:
                    standard_name = coord_name
                else:
                    standard_name = None
            else:
                if coord_name is not None:
                    attributes["invalid_standard_name"] = standard_name
                    standard_name = coord_name
                else:
                    standard_name = None

    else:
        if coord_name is not None:
            standard_name = coord_name

    # Last attempt to set the standard name to something meaningful.
    if standard_name is None:
        if cf_name in iris.std_names.STD_NAMES:
            standard_name = cf_name

    return (standard_name, long_name, cf_name)
Exemplo n.º 2
0
def build_cube_metadata(engine):
    """Add the standard meta data to the cube."""

    cf_var = engine.cf_var
    cube = engine.cube

    # Determine the cube's name attributes
    cube.var_name = cf_var.cf_name
    standard_name = getattr(cf_var, CF_ATTR_STD_NAME, None)
    long_name = getattr(cf_var, CF_ATTR_LONG_NAME, None)
    cube.long_name = long_name

    if standard_name is not None:
        try:
            cube.standard_name = _get_valid_standard_name(standard_name)
        except ValueError:
            if cube.long_name is not None:
                cube.attributes["invalid_standard_name"] = standard_name
            else:
                cube.long_name = standard_name

    # Determine the cube units.
    attr_units = get_attr_units(cf_var, cube.attributes)
    cube.units = attr_units

    # Incorporate cell methods
    nc_att_cell_methods = getattr(cf_var, CF_ATTR_CELL_METHODS, None)
    with warnings.catch_warnings(record=True) as warning_records:
        cube.cell_methods = parse_cell_methods(nc_att_cell_methods)
    # Filter to get the warning we are interested in.
    warning_records = [
        record for record in warning_records
        if issubclass(record.category, UnknownCellMethodWarning)
    ]
    if len(warning_records) > 0:
        # Output an enhanced warning message.
        warn_record = warning_records[0]
        name = "{}".format(cf_var.cf_name)
        msg = warn_record.message.args[0]
        msg = msg.replace("variable", "variable {!r}".format(name))
        warnings.warn(message=msg, category=UnknownCellMethodWarning)

    # Set the cube global attributes.
    for attr_name, attr_value in cf_var.cf_group.global_attributes.items():
        try:
            cube.attributes[str(attr_name)] = attr_value
        except ValueError as e:
            msg = "Skipping global attribute {!r}: {}"
            warnings.warn(msg.format(attr_name, str(e)))
 def test_valid_standard_valid_name_modifier_extra_names(self):
     name = "air_temperature standard_error extra words"
     with self.assertRaisesRegex(ValueError, self.emsg.format(name)):
         _get_valid_standard_name(name)
 def test_valid_standard_name_valid_modifier_extra_spaces(self):
     name = "air_temperature      standard_error"
     self.assertEqual(_get_valid_standard_name(name), name)
 def test_invalid_standard_name_valid_modifier(self):
     name = "not_a_standard_name standard_error"
     with self.assertRaisesRegex(ValueError, self.emsg.format(name)):
         _get_valid_standard_name(name)
 def test_standard_name_alias(self):
     name = "atmosphere_optical_thickness_due_to_pm1_ambient_aerosol"
     self.assertEqual(_get_valid_standard_name(name), name)
 def test_valid_standard_name(self):
     name = "air_temperature"
     self.assertEqual(_get_valid_standard_name(name), name)
 def test_pass_thru_whitespace(self):
     name = "       "
     self.assertEqual(_get_valid_standard_name(name), name)
 def test_pass_thru_empty(self):
     name = ""
     self.assertEqual(_get_valid_standard_name(name), name)
Exemplo n.º 10
0
 def test_pass_thru_none(self):
     name = None
     self.assertEqual(_get_valid_standard_name(name), name)