Add __pycache__/ to .gitignore
[infoex-autowx.git] / infoex-autowx.py
index 0755e4a1d9252340b01c0442fd092b587ac98837..ea23bc3e9567b47ac3a710ed7f3938fc4fc71a27 100755 (executable)
@@ -31,7 +31,7 @@ import sys
 import time
 
 from ftplib import FTP
-from optparse import OptionParser
+from argparse import ArgumentParser
 
 import requests
 
@@ -39,30 +39,34 @@ import zeep
 import zeep.cache
 import zeep.transports
 
-__version__ = '2.0.1'
+__version__ = '2.2.0'
 
 LOG = logging.getLogger(__name__)
 LOG.setLevel(logging.NOTSET)
 
 def get_parser():
     """Return OptionParser for this program"""
-    parser = OptionParser(version=__version__)
+    parser = ArgumentParser()
 
-    parser.add_option("--config",
-                      dest="config",
-                      metavar="FILE",
-                      help="location of config file")
+    parser.add_argument("--version",
+                        action="version",
+                        version=__version__)
 
-    parser.add_option("--log-level",
-                      dest="log_level",
-                      default=None,
-                      help="set the log level (debug, info, warning)")
+    parser.add_argument("--config",
+                        dest="config",
+                        metavar="FILE",
+                        help="location of config file")
 
-    parser.add_option("--dry-run",
-                      action="store_true",
-                      dest="dry_run",
-                      default=False,
-                      help="fetch data but don't upload to InfoEx")
+    parser.add_argument("--log-level",
+                        dest="log_level",
+                        default=None,
+                        help="set the log level (debug, info, warning)")
+
+    parser.add_argument("--dry-run",
+                        action="store_true",
+                        dest="dry_run",
+                        default=False,
+                        help="fetch data but don't upload to InfoEx")
 
     return parser
 
@@ -155,7 +159,7 @@ def setup_logging(log_level):
 def main():
     """Main routine: sort through args, decide what to do, then do it"""
     parser = get_parser()
-    (options, args) = parser.parse_args()
+    options = parser.parse_args()
 
     config = configparser.ConfigParser(allow_no_value=False)
 
@@ -214,6 +218,20 @@ def main():
             LOG.warning("BAD KEY wx_data['%s']", element_cd)
             continue
 
+        # Massage precision of certain values to fit InfoEx's
+        # expectations
+        #
+        # 0 decimal places: wind speed, wind direction, wind gust, snow depth
+        # 1 decimal place:  air temp, baro
+        # Avoid transforming None values
+        if infoex['wx_data'][element_cd] is None:
+            continue
+        elif element_cd in ['wind_speed', 'WSPD', 'wind_direction',
+                            'WDIR', 'wind_gust', 'SNWD', 'snow_depth']:
+            infoex['wx_data'][element_cd] = round(infoex['wx_data'][element_cd])
+        elif element_cd in ['TOBS', 'air_temp', 'PRES', 'pressure']:
+            infoex['wx_data'][element_cd] = round(infoex['wx_data'][element_cd], 1)
+
         # CONSIDER: Casting every value to Float() -- need to investigate if
         #           any possible elementCds we may want are any other data
         #           type than float.
@@ -298,6 +316,8 @@ def setup_infoex_counterparts_mapping(provider):
     if provider == 'nrcs':
         iemap['PREC'] = 'precipitationGauge'
         iemap['TOBS'] = 'tempPres'
+        iemap['TMAX'] = 'tempMaxHour'
+        iemap['TMIN'] = 'tempMinHour'
         iemap['SNWD'] = 'hS'
         iemap['PRES'] = 'baro'
         iemap['RHUM'] = 'rH'
@@ -308,6 +328,8 @@ def setup_infoex_counterparts_mapping(provider):
     elif provider == 'mesowest':
         iemap['precip_accum'] = 'precipitationGauge'
         iemap['air_temp'] = 'tempPres'
+        iemap['air_temp_high_24_hour'] = 'tempMaxHour'
+        iemap['air_temp_low_24_hour'] = 'tempMinHour'
         iemap['snow_depth'] = 'hS'
         iemap['pressure'] = 'baro'
         iemap['relative_humidity'] = 'rH'