From 3d2bcb21872d46546bfe8a7e57b460b635d6e44c Mon Sep 17 00:00:00 2001 From: Sanjay Santhanam <51058514+Sanjays2402@users.noreply.github.com> Date: Mon, 20 Jul 2026 04:18:12 -0700 Subject: [PATCH 1/3] Fix IGRA release time parsing Use the four-character HHMM field width when converting release times so both hour digits are preserved. Add a regression for 11:42. --- src/siphon/simplewebservice/igra2.py | 2 +- tests/test_igra2.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/siphon/simplewebservice/igra2.py b/src/siphon/simplewebservice/igra2.py index 0e61636d5..f4ac69d33 100644 --- a/src/siphon/simplewebservice/igra2.py +++ b/src/siphon/simplewebservice/igra2.py @@ -201,7 +201,7 @@ def _cflag(val): def _ctime(strformat='MMMSS'): """Return a function converting a string from MMMSS or HHMM to seconds.""" def _ctime_strformat(val): - time = val.strip().zfill(5) + time = val.strip().zfill(5 if strformat == 'MMMSS' else 4) if int(time) < 0 or int(time) == 9999: return np.nan diff --git a/tests/test_igra2.py b/tests/test_igra2.py index 9535f67b3..3f96bce17 100644 --- a/tests/test_igra2.py +++ b/tests/test_igra2.py @@ -56,6 +56,13 @@ def subsetter(response): return subsetter +def test_release_time_converter_uses_hhmm_width(): + """Test that release times preserve both hour digits when converted.""" + converter = IGRAUpperAir()._get_fwf_params()['header']['converters']['release_time'] + + assert converter('1142') == 11 * 3600 + 42 * 60 + + @recorder.use_cassette('igra2_sounding', before_record_response=subset_date(datetime(2010, 6, 1))) def test_igra2(): From 81a4aff28f35af2b7a9272576ae0d16e2433f18a Mon Sep 17 00:00:00 2001 From: Sanjay Santhanam <51058514+Sanjays2402@users.noreply.github.com> Date: Mon, 20 Jul 2026 17:31:20 -0700 Subject: [PATCH 2/3] fix: raise ValueError for unrecognized IGRA time format and drop unused sys import --- src/siphon/simplewebservice/igra2.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/siphon/simplewebservice/igra2.py b/src/siphon/simplewebservice/igra2.py index f4ac69d33..b11a42260 100644 --- a/src/siphon/simplewebservice/igra2.py +++ b/src/siphon/simplewebservice/igra2.py @@ -6,7 +6,6 @@ import datetime from io import BytesIO, StringIO import itertools -import sys import warnings from zipfile import ZipFile @@ -215,7 +214,7 @@ def _ctime_strformat(val): minutes = int(time[2:4]) time_seconds = hours * 3600 + minutes * 60 else: - sys.exit('Unrecognized time format') + raise ValueError(f'Unrecognized time format "{strformat}"') return time_seconds return _ctime_strformat From 9be5b1b538fbadde326e479c7855218dc87592ef Mon Sep 17 00:00:00 2001 From: Sanjay Santhanam <51058514+Sanjays2402@users.noreply.github.com> Date: Thu, 30 Jul 2026 23:15:03 -0700 Subject: [PATCH 3/3] Use len(strformat) for zero-fill width in IGRA time converter --- src/siphon/simplewebservice/igra2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/siphon/simplewebservice/igra2.py b/src/siphon/simplewebservice/igra2.py index b11a42260..4940fe2c4 100644 --- a/src/siphon/simplewebservice/igra2.py +++ b/src/siphon/simplewebservice/igra2.py @@ -200,7 +200,7 @@ def _cflag(val): def _ctime(strformat='MMMSS'): """Return a function converting a string from MMMSS or HHMM to seconds.""" def _ctime_strformat(val): - time = val.strip().zfill(5 if strformat == 'MMMSS' else 4) + time = val.strip().zfill(len(strformat)) if int(time) < 0 or int(time) == 9999: return np.nan