Version bump
[infoex-autowx.git] / infoex-autowx.py
index 46ca9296f45daf5a8431f9a478168c2ce3fbe663..9df112c6d96c149786fc8749c287e01437730d74 100755 (executable)
@@ -27,6 +27,7 @@ import csv
 import datetime
 import logging
 import os
+import socket
 import sys
 import time
 import urllib3
@@ -43,7 +44,7 @@ import zeep
 import zeep.cache
 import zeep.transports
 
-__version__ = '3.4.1'
+__version__ = '3.4.5'
 
 LOG = logging.getLogger(__name__)
 LOG.setLevel(logging.NOTSET)
@@ -101,7 +102,7 @@ def setup_config(config):
         # NOTE: custom providers don't require units to be specified
         #       because they can do whatever they please with the units
         #       within their own program
-        if station['provider'] != "custom":
+        if station['provider'] != "python":
             station['units'] = config['station']['units']
 
             if station['units'] not in ['metric', 'english', 'american']:
@@ -344,7 +345,7 @@ def main():
         if station['provider'] == 'nrcs' and station['units'] == 'metric':
             infoex['wx_data'][element_cd] = convert_nrcs_units_to_metric(element_cd, infoex['wx_data'][element_cd])
 
-        if station['provider'] != 'custom' and station['units'] == 'american':
+        if station['provider'] != 'python' and station['units'] == 'american':
             infoex['wx_data'][element_cd] = convert_units_to_american(element_cd, infoex['wx_data'][element_cd])
 
         # Massage precision of certain values to fit InfoEx's
@@ -384,7 +385,10 @@ def main():
             return 1
 
         if not options.dry_run:
-            upload_csv(infoex['csv_filename'], infoex)
+            try:
+                upload_csv(infoex['csv_filename'], infoex)
+            except socket.timeout:
+                LOG.critical("FTP timed out")
 
     LOG.debug('DONE')
     return 0
@@ -480,15 +484,24 @@ def setup_infoex_counterparts_mapping(provider):
     elif provider == 'python':
         # we expect Python programs to use the InfoEx data type names
         iemap['precipitationGauge'] = 'precipitationGauge'
+        iemap['precipitationGaugeUnit'] = 'precipitationGaugeUnit'
         iemap['tempPres'] = 'tempPres'
+        iemap['tempPresUnit'] = 'tempPresUnit'
         iemap['tempMaxHour'] = 'tempMaxHour'
+        iemap['tempMaxHourUnit'] = 'tempMaxHourUnit'
         iemap['tempMinHour'] = 'tempMinHour'
+        iemap['tempMinHourUnit'] = 'tempMinHourUnit'
         iemap['hS'] = 'hS'
+        iemap['hsUnit'] = 'hsUnit'
         iemap['baro'] = 'baro'
         iemap['rH'] = 'rH'
         iemap['windSpeedNum'] = 'windSpeedNum'
+        iemap['windSpeedUnit'] = 'windSpeedUnit'
         iemap['windDirectionNum'] = 'windDirectionNum'
         iemap['windGustSpeedNum'] = 'windGustSpeedNum'
+        iemap['dewPointUnit'] = 'dewPointUnit'
+        iemap['hn24AutoUnit'] = 'hn24AutoUnit'
+        iemap['hstAutoUnit'] = 'hstAutoUnit'
 
     return iemap
 
@@ -843,7 +856,7 @@ def upload_csv(path_to_file, infoex_data):
     with open(path_to_file, 'rb') as file_object:
         LOG.debug("uploading FTP file '%s'", infoex_data['host'])
         ftp = FTP(infoex_data['host'], infoex_data['uuid'],
-                  infoex_data['api_key'])
+                  infoex_data['api_key'], timeout=10)
         ftp.storlines('STOR ' + path_to_file, file_object)
         ftp.close()
         file_object.close()