From d4554cd9574683b15af2336e6f64eac0e4588e01 Mon Sep 17 00:00:00 2001
From: Nick Bearson <nickb@ssec.wisc.edu>
Date: Fri, 13 May 2022 10:39:01 -0500
Subject: [PATCH] ensure --ctr-lat and --ctr-lon are valid latitudes &
 longitudes

---
 gridded_glm/libexec/_minute_gridder.py | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/gridded_glm/libexec/_minute_gridder.py b/gridded_glm/libexec/_minute_gridder.py
index 320c59f..66eea03 100644
--- a/gridded_glm/libexec/_minute_gridder.py
+++ b/gridded_glm/libexec/_minute_gridder.py
@@ -64,7 +64,15 @@ import dask
 dask.config.set(num_workers=1)
 
 def create_parser():
+    def bounded_float(afloat, inclusive_min, inclusive_max):
+        value = float(afloat)
+        if inclusive_min <= value <= inclusive_max:
+            return value
+        else:
+            raise argparse.ArgumentTypeError('valid range %s to %s' % (inclusive_min, inclusive_max))
+
     import argparse
+    from functools import partial
     prog = os.getenv('PROG_NAME', sys.argv[0])
     parser = argparse.ArgumentParser(prog=prog,
                                      description=parse_desc, 
@@ -83,10 +91,10 @@ def create_parser():
                              "(default: full)")
     parser.add_argument("-t", "--create-tiles", default=False, action='store_true',
                         help="create AWIPS-compatible tiles (default: off)")
-    parser.add_argument('--ctr-lat', metavar='latitude',
-                        type=float, help='center latitude (required for meso)')
-    parser.add_argument('--ctr-lon', metavar='longitude',
-                        type=float, help='center longitude (required for meso)')
+    parser.add_argument('--ctr-lat', metavar='LATITUDE',
+                        type=partial(bounded_float, inclusive_min=-90, inclusive_max=90), help='center latitude (required for meso)')
+    parser.add_argument('--ctr-lon', metavar='LONGITUDE',
+                        type=partial(bounded_float, inclusive_min=-180, inclusive_max=180), help='center longitude (required for meso)')
     parser.add_argument('-r', "--realtime", default=False, action='store_true',
                         help="enable 'realtime' mode, where we expect only one input file,\n"
                         "find the surrounding trio, and automatically determine if a full minute\n"
-- 
GitLab