From 098714d37d4c0e2e6269ea91cc878ff03dfb8e6c Mon Sep 17 00:00:00 2001 From: Sergey Morozov Date: Mon, 26 Aug 2019 14:52:27 +0300 Subject: [PATCH] registerups: Reworked configuration parsing. It looks more complicated, but contains error handling. --- registerups/registerups.cfg.example | 1 - registerups/registerups.py | 56 ++++++++++++++++++++--------- 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/registerups/registerups.cfg.example b/registerups/registerups.cfg.example index 2ea1010..7a97019 100644 --- a/registerups/registerups.cfg.example +++ b/registerups/registerups.cfg.example @@ -2,7 +2,6 @@ # IP addres or hostname of UPS SNMP card address = 192.168.0.105 # TCP port -# default - 3052 port = 3052 # Secret phrase for software authentication. This value must be the # same as configured on the UPS web interface diff --git a/registerups/registerups.py b/registerups/registerups.py index b213c97..f4a3cbb 100755 --- a/registerups/registerups.py +++ b/registerups/registerups.py @@ -78,30 +78,52 @@ class cps_ups: def help(): print('Usage: ' + sys.argv[0] + ' ') +configuration_structure = {'UPS': ['address', + 'secret_key', + 'port'], + 'HOST': ['ip_address', + 'shutdown_time', + 'delay_time', + 'hostname', + 'outlet_id', + 'bank_id', + 'isps', + 'contact', + 'location', + 'bedt']} try: configfile = sys.argv[1] except IndexError: help() sys.exit(1) - if not os.path.isfile(configfile): print('Error: configuration file ' + configfile + ' doesn\'t exists') sys.exit(2) +configuration = {} +try: + config = configparser.ConfigParser() + config.read(configfile) + for section in configuration_structure: + configuration[section] = {} + for param in configuration_structure[section]: + configuration[section][param] = config.get(section, param) +except (configparser.NoOptionError, + configparser.MissingSectionHeaderError, + configparser.ParsingError) as err: + print('Configuration file parsing error:\n' + str(err)) + sys.exit(3) -config = configparser.ConfigParser() -config.read(configfile) +u = cps_ups(address = configuration['UPS']['address'], + secret_key = configuration['UPS']['secret_key'], + port = int(configuration['UPS']['port'])) -u = cps_ups(address = config.get('UPS', 'address'), - secret_key = config.get('UPS','secret_key'), - port = int(config.get('UPS', 'port', fallback='3052'))) - -u.register(ip_address = config.get('HOST','ip_address'), - shutdown_time = config.get('HOST','shutdown_time'), - delay_time = config.get('HOST','delay_time'), - hostname = config.get('HOST','hostname'), - outlet_id = config.get('HOST','outlet_id'), - bank_id = config.get('HOST','bank_id'), - isps = config.get('HOST','isps'), - contact = config.get('HOST','contact'), - location = config.get('HOST','location'), - bedt = config.get('HOST','bedt')) +u.register(ip_address = configuration['HOST']['ip_address'], + shutdown_time = configuration['HOST']['shutdown_time'], + delay_time = configuration['HOST']['delay_time'], + hostname = configuration['HOST']['hostname'], + outlet_id = configuration['HOST']['outlet_id'], + bank_id = configuration['HOST']['bank_id'], + isps = configuration['HOST']['isps'], + contact = configuration['HOST']['contact'], + location = configuration['HOST']['location'], + bedt = configuration['HOST']['bedt'])