Skip to content

Commit

Permalink
PI-3677: Remove regex from standard names check (#3679)
Browse files Browse the repository at this point in the history
* Remove regex from standard names check

* remove duplicated test

* Added test cases for none, empty and only spaces

* Remove duplicated test

* Address comments

* Blackify code
  • Loading branch information
Javier Vegas-Regidor authored Jun 3, 2020
1 parent 715d019 commit e54e2ff
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 13 deletions.
27 changes: 14 additions & 13 deletions lib/iris/_cube_coord_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ def get_valid_standard_name(name):
# modifier, separated by one or more blank spaces

if name is not None:
name_is_valid = False
# Supported standard name modifiers. Ref: [CF] Appendix C.
valid_std_name_modifiers = [
"detection_minimum",
Expand All @@ -55,19 +54,21 @@ def get_valid_standard_name(name):
"status_flag",
]

valid_name_pattern = re.compile(r"""^([a-zA-Z_]+)( *)([a-zA-Z_]*)$""")
name_groups = valid_name_pattern.match(name)

name_groups = name.split(maxsplit=1)
if name_groups:
std_name, whitespace, std_name_modifier = name_groups.groups()
if (std_name in iris.std_names.STD_NAMES) and (
bool(whitespace)
== (std_name_modifier in valid_std_name_modifiers)
):
name_is_valid = True

if name_is_valid is False:
raise ValueError("{!r} is not a valid standard_name".format(name))
std_name = name_groups[0]
name_is_valid = std_name in iris.std_names.STD_NAMES
try:
std_name_modifier = name_groups[1]
except IndexError:
pass # No modifier
else:
name_is_valid &= std_name_modifier in valid_std_name_modifiers

if not name_is_valid:
raise ValueError(
"{!r} is not a valid standard_name".format(name)
)

return name

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,26 @@ class Test(tests.IrisTest):
def setUp(self):
self.emsg = "'{}' is not a valid standard_name"

def test_pass_thru_none(self):
name = None
self.assertEqual(get_valid_standard_name(name), name)

def test_pass_thru_empty(self):
name = ""
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_valid_standard_name(self):
name = "air_temperature"
self.assertEqual(get_valid_standard_name(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_invalid_standard_name(self):
name = "not_a_standard_name"
with self.assertRaisesRegex(ValueError, self.emsg.format(name)):
Expand Down

0 comments on commit e54e2ff

Please sign in to comment.