Correct and simplify URLError exception handling
[weather.git] / weather.py
index bdda3ee..2258c80 100644 (file)
@@ -6,7 +6,7 @@ weather_copyright = """\
 # provided in the LICENSE file distributed with this software.
 #"""
 
-weather_version = "2.4"
+weather_version = "2.4.1"
 
 radian_to_km = 6372.795484
 radian_to_mi = 3959.871528
@@ -89,14 +89,10 @@ class Selections:
                 return self.config.get(argument, option)
         if option in self.options.__dict__:
             return self.options.__dict__[option]
-        else:
-            import os, sys
-            message = "%s error: no URI defined for %s\n" % (
-                os.path.basename( sys.argv[0] ),
-                option
-            )
-            sys.stderr.write(message)
-            exit(1)
+        import sys
+        message = "WARNING: no URI defined for %s\n" % option
+        sys.stderr.write(message)
+        return None
     def get_bool(self, option, argument=None):
         """Get data and coerce to a boolean if necessary."""
         return bool(self.get(option, argument))
@@ -225,18 +221,10 @@ def get_uri(
             data = urlopen(uri).read().decode("utf-8")
         except URLError:
             if ignore_fail: return ""
-            else:
-                import os, sys, traceback
-                message = "%s error: failed to retrieve\n   %s\n   %s" % (
-                        os.path.basename( sys.argv[0] ),
-                        uri,
-                        traceback.format_exception_only(
-                            sys.exc_type,
-                            sys.exc_value
-                        )[0]
-                    )
-                sys.stderr.write(message)
-                sys.exit(1)
+            import os, sys
+            sys.stderr.write("%s error: failed to retrieve\n   %s\n\n" % (
+                os.path.basename( sys.argv[0] ), uri))
+            raise
         # Some data sources are HTML with the plain text wrapped in pre tags
         if "<pre>" in data:
             data = data[data.find("<pre>")+5:data.find("</pre>")]
@@ -324,11 +312,7 @@ def get_alert(
 ):
     """Return alert notice for the specified URI."""
     if not uri:
-        import os, sys
-        message = "%s error: Alert URI required for alerts\n" % \
-            os.path.basename( sys.argv[0] )
-        sys.stderr.write(message)
-        sys.exit(1)
+        return ""
     alert = get_uri(
         uri,
         ignore_fail=True,
@@ -400,14 +384,9 @@ def get_options(config):
             + "flash_flood_watch," \
             + "flood_statement," \
             + "flood_warning," \
-            + "marine_weather_statement," \
-            + "river_statement," \
             + "severe_thunderstorm_warning," \
             + "severe_weather_statement," \
-            + "short_term_forecast," \
-            + "special_marine_warning," \
             + "special_weather_statement," \
-            + "tornado_warning," \
             + "urgent_weather_message"
     option_parser.add_option("--atypes",
         dest="atypes",