Skip to content

Commit

Permalink
Fix boolean commandline flags. Cleanup argparse parameters.
Browse files Browse the repository at this point in the history
  • Loading branch information
Matthias Endler committed Oct 27, 2015
1 parent 4d4b62f commit a998a99
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 16 deletions.
33 changes: 17 additions & 16 deletions kafka_influxdb/config/loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import logging
import argparse
import collections
import sys


class ObjectView(object):
Expand Down Expand Up @@ -81,40 +82,40 @@ def flatten(d, parent_key='', sep='_'):
return dict(items)


def parse_args():
def parse_args(args=sys.argv[1:]):
parser = argparse.ArgumentParser(description='A Kafka consumer for InfluxDB',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--kafka_host', type=str, default=argparse.SUPPRESS, required=False,
parser.add_argument('--kafka_host', type=str, default=argparse.SUPPRESS,
help="Hostname or IP of Kafka message broker (default: localhost)")
parser.add_argument('--kafka_port', type=int, default=argparse.SUPPRESS, required=False,
parser.add_argument('--kafka_port', type=int, default=argparse.SUPPRESS,
help="Port of Kafka message broker (default: 9092)")
parser.add_argument('--kafka_topic', type=str, default=argparse.SUPPRESS, required=False,
parser.add_argument('--kafka_topic', type=str, default=argparse.SUPPRESS,
help="Topic for metrics (default: my_topic)")
parser.add_argument('--kafka_group', type=str, default=argparse.SUPPRESS, required=False,
parser.add_argument('--kafka_group', type=str, default=argparse.SUPPRESS,
help="Kafka consumer group (default: my_group)")
parser.add_argument('--influxdb_host', type=str, default=argparse.SUPPRESS, required=False,
parser.add_argument('--influxdb_host', type=str, default=argparse.SUPPRESS,
help="InfluxDB hostname or IP (default: localhost)")
parser.add_argument('--influxdb_port', type=int, default=argparse.SUPPRESS, required=False,
parser.add_argument('--influxdb_port', type=int, default=argparse.SUPPRESS,
help="InfluxDB API port (default: 8086)")
parser.add_argument('--influxdb_user', type=str, default=argparse.SUPPRESS, required=False,
parser.add_argument('--influxdb_user', type=str, default=argparse.SUPPRESS,
help="InfluxDB username (default: root)")
parser.add_argument('--influxdb_password', type=str, default=argparse.SUPPRESS, required=False,
parser.add_argument('--influxdb_password', type=str, default=argparse.SUPPRESS,
help="InfluxDB password (default: root)")
parser.add_argument('--influxdb_dbname', type=str, default=argparse.SUPPRESS, required=False,
parser.add_argument('--influxdb_dbname', type=str, default=argparse.SUPPRESS,
help="InfluxDB database to write metrics into (default: metrics)")
parser.add_argument('--influxdb_use_ssl', default=argparse.SUPPRESS,
parser.add_argument('--influxdb_use_ssl', default=argparse.SUPPRESS, action="store_true",
help="Use SSL connection for InfluxDB (default: False)")
parser.add_argument('--influxdb_verify_ssl', default=argparse.SUPPRESS,
parser.add_argument('--influxdb_verify_ssl', default=argparse.SUPPRESS, action="store_true",
help="Verify the SSL certificate before connecting (default: False)")
parser.add_argument('--influxdb_timeout', type=int, default=argparse.SUPPRESS,
help="Max number of seconds to establish a connection to InfluxDB (default: 5)")
parser.add_argument('--influxdb_use_udp', default=argparse.SUPPRESS,
parser.add_argument('--influxdb_use_udp', default=argparse.SUPPRESS, action="store_true",
help="Use UDP connection for InfluxDB (default: False)")
parser.add_argument('--influxdb_retention_policy', type=str, default=argparse.SUPPRESS, required=False,
parser.add_argument('--influxdb_retention_policy', type=str, default=argparse.SUPPRESS,
help="Retention policy for incoming metrics (default: default)")
parser.add_argument('--influxdb_time_precision', type=str, default=argparse.SUPPRESS,
help="Precision of incoming metrics. Can be one of 's', 'm', 'ms', 'u' (default: s)")
parser.add_argument('--encoder', type=str, default=argparse.SUPPRESS, required=False,
parser.add_argument('--encoder', type=str, default=argparse.SUPPRESS,
help="Input encoder which converts an incoming message to dictionary "
"(default: collectd_graphite_encoder)")
parser.add_argument('--buffer_size', type=int, default=argparse.SUPPRESS,
Expand All @@ -128,6 +129,6 @@ def parse_args():
help="Run benchmark (default: False)")
parser.add_argument('-v', '--verbose', action='count', default=argparse.SUPPRESS,
help="Set verbosity level. Increase verbosity by adding a v: -v -vv -vvv (default: 0)")
cli_args = parser.parse_args()
cli_args = parser.parse_args(args)
# Convert config from argparse Namespace to dict
return vars(cli_args)
21 changes: 21 additions & 0 deletions kafka_influxdb/tests/config_test/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,17 @@
from mock import MagicMock
from kafka_influxdb.config import loader, default_config


class Config:
def __init__(self, configfile):
self.configfile = configfile


class ParsedConfig:
def __init__(self, kafka):
self.kafka_host = kafka


class TestConfig(unittest.TestCase):
def setUp(self):
path = os.path.dirname(os.path.abspath(__file__))
Expand All @@ -38,6 +41,23 @@ def test_load_config(self):
self.assertEqual(parsed_config["buffer_size"], 444)
self.assertEqual(parsed_config["statistics"], True)

def test_argparse_flags(self):
long_flags = [
'influxdb_use_ssl',
'influxdb_verify_ssl',
'influxdb_use_udp',
'benchmark',
'statistics'
]
for flag in long_flags:
parsed = loader.parse_args(['--' + flag])
self.assertEqual(parsed[flag], True)

parsed = loader.parse_args(['-s'])
self.assertEqual(parsed['statistics'], True)
parsed = loader.parse_args(['-b'])
self.assertEqual(parsed['benchmark'], True)

def test_cli_overwrite(self):
# Fake commandline arguments
# Argparse returns a namespace, not a dictionary
Expand All @@ -57,5 +77,6 @@ def test_overwrite_default_config(self):
config = loader.overwrite_config(default_config, {'kafka_host': 'otherhost'})
self.assertEqual(config['kafka_host'], 'otherhost')


if __name__ == '__main__':
unittest.main()

0 comments on commit a998a99

Please sign in to comment.