Skip to content

Commit

Permalink
Revert to shorter names with no digits; add repr implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
pp-mo committed Apr 15, 2024
1 parent ac57629 commit 8506605
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 32 deletions.
65 changes: 48 additions & 17 deletions iris_grib/grib_phenom_translation.py
Original file line number Diff line number Diff line change
Expand Up @@ -324,11 +324,11 @@ def cf_phenom_to_grib2_info(standard_name, long_name=None):
@dataclass
class GRIBCode:
edition: Optional[int] = None
grib1_table2_version: Optional[int] = None
grib1_centre_number: Optional[int] = None
grib2_discipline: Optional[int] = None
grib2_parameter_category: Optional[int] = None
parameter_number: Optional[int] = None
table_version: Optional[int] = None
centre_number: Optional[int] = None
discipline: Optional[int] = None
category: Optional[int] = None
number: Optional[int] = None

"""
An object representing a specific Grib phenomenon identity.
Expand Down Expand Up @@ -374,15 +374,15 @@ def __init__(self, edition, *args, **kwargs):
# Check edition + assign relevant keywords
if edition == 1:
argnames = [
"grib1_table2_version",
"grib1_centre_number",
"parameter_number"
"table_version",
"centre_number",
"number"
]
elif edition == 2:
argnames = [
"grib2_discipline",
"grib2_parameter_category",
"parameter_number",
"discipline",
"category",
"number",
]
else:
self._invalid_edition(edition)
Expand Down Expand Up @@ -446,18 +446,49 @@ def __str__(self):
if self.edition == 1:
format = 'GRIB1:t{:03d}c{:03d}n{:03d}'
result = format.format(
self.grib1_table2_version,
self.grib1_centre_number,
self.parameter_number
self.table_version,
self.centre_number,
self.number
)
elif self.edition == 2:
format = 'GRIB2:d{:03d}c{:03d}n{:03d}'
result = format.format(
self.grib2_discipline,
self.grib2_parameter_category,
self.parameter_number
self.discipline,
self.category,
self.number
)
else:
self._invalid_edition(self.edition)

return result

def __repr__(self):
edition = self.edition
ok_state = edition in (1, 2)
if ok_state:
result = f"GRIBCode(edition={edition}"
if edition == 1:
argnames = [
"table_version",
"centre_number",
"number"
]
elif self.edition == 2:
argnames = [
"discipline",
"category",
"number",
]
for argname in argnames:
value = getattr(self, argname, None)
if not isinstance(value, int):
ok_state = False
break
result += f", {argname}={value}"
result += ")"

if not ok_state:
# Invalid content somewhere : fall back on dataclass default repr
result = super().__repr__()

return result
Original file line number Diff line number Diff line change
Expand Up @@ -160,20 +160,21 @@ class TestGRIBcode(tests.IrisTest):
def test_create_from_keys(self):
gribcode = GRIBCode(
edition=2,
grib2_discipline=7,
grib2_parameter_category=4,
parameter_number=199)
discipline=7,
category=4,
number=199
)
self.assertEqual(gribcode.edition, 2)
self.assertEqual(gribcode.grib2_discipline, 7)
self.assertEqual(gribcode.grib2_parameter_category, 4)
self.assertEqual(gribcode.parameter_number, 199)
self.assertEqual(gribcode.discipline, 7)
self.assertEqual(gribcode.category, 4)
self.assertEqual(gribcode.number, 199)

def test_create_from_args(self):
gribcode = GRIBCode(2, 3, 12, 99)
self.assertEqual(gribcode.edition, 2)
self.assertEqual(gribcode.grib2_discipline, 3)
self.assertEqual(gribcode.grib2_parameter_category, 12)
self.assertEqual(gribcode.parameter_number, 99)
self.assertEqual(gribcode.discipline, 3)
self.assertEqual(gribcode.category, 12)
self.assertEqual(gribcode.number, 99)

def test_create_is_copy(self):
gribcode1 = GRIBCode(2, 3, 12, 99)
Expand All @@ -198,9 +199,10 @@ def test_create_from_own_string(self):
# Check that GRIBCode string reprs are valid as create arguments.
gribcode = GRIBCode(
edition=2,
grib2_discipline=17,
grib2_parameter_category=94,
parameter_number=231)
discipline=17,
category=94,
number=231
)
grib_param_string = str(gribcode)
newcode = GRIBCode(grib_param_string)
self.assertEqual(newcode, gribcode)
Expand Down Expand Up @@ -264,9 +266,7 @@ def test__str__(self):
def test__repr__(self):
result = repr(GRIBCode(2, 17, 3, 123))
expected = (
'GRIBCode(edition=2, grib1_table2_version=None, '
'grib1_centre_number=None, grib2_discipline=17, '
'grib2_parameter_category=3, parameter_number=123)'
'GRIBCode(edition=2, discipline=17, category=3, number=123)'
)
self.assertEqual(result, expected)

Expand Down

0 comments on commit 8506605

Please sign in to comment.