def test_init_logging(mocker): log_mock = mocker.patch(TESTED + '.logging') handler = mocker.patch(TESTED + '.TimedRotatingFileHandler').return_value args = service.create_parser('brewblox').parse_args([]) service._init_logging(args) assert log_mock.basicConfig.call_count == 1 assert log_mock.getLogger().addHandler.call_count == 0 log_mock.getLogger.assert_has_calls([ call('pika'), call().setLevel(log_mock.CRITICAL), call('pika.adapters.base_connection'), call().setLevel(log_mock.CRITICAL), call('aio_pika.robust_connection'), call().setLevel(log_mock.CRITICAL), call('asyncio'), call().setLevel(log_mock.CRITICAL), ]) args = service.create_parser('brewblox').parse_args(['-o', 'outfile']) service._init_logging(args) assert log_mock.basicConfig.call_count == 2 log_mock.getLogger().addHandler.assert_called_once_with(handler)
def create_parser(default_name='history'): parser = service.create_parser(default_name=default_name) parser.add_argument('--write-interval', help='Interval (sec) between writing batches of received data to Influx. [%(default)s]', default=30, type=float) parser.add_argument('--ranges-interval', help='Interval (sec) between updates in live ranges. [%(default)s]', default=30, type=float) parser.add_argument('--metrics-interval', help='Interval (sec) between updates in live metrics. [%(default)s]', default=5, type=float) parser.add_argument('--redis-url', help='URL for the Redis database', default='redis://redis') parser.add_argument('--victoria-url', help='URL for the Victoria Metrics database', default='http://victoria:8428/victoria') parser.add_argument('--datastore-topic', help='Synchronization topic for datastore updates', default='brewcast/datastore') parser.add_argument('--minimum-step', help='Minimum period (sec) for range data downsampling', default=10, type=float) return parser
def create_parser(default_name='brewblox-sharemycook') -> ArgumentParser: # brewblox-service has some default arguments # We can add more arguments here before sending the parser back to brewblox-service # The parsed values for all arguments are placed in app['config'] # For documentation see https://docs.python.org/3/library/argparse.html parser: ArgumentParser = service.create_parser(default_name=default_name) # This will be used by publish_example # Note how we specify the type as float parser.add_argument( '--active-poll-interval', help= 'Interval (in seconds) between polling when active devices detected. [%(default)s]', type=float, default=2) parser.add_argument( '--inactive-poll-interval', help= 'Interval (in seconds) between polling when no active devices detected. [%(default)s]', type=float, default=300) parser.add_argument('--username', help='Share My Cook Username') parser.add_argument('--password', help='Share My Cook Password') return parser
def test_no_logging_mute(mocker): log_mock = mocker.patch(TESTED + '.logging') args = service.create_parser('brewblox').parse_args(['--debug']) service._init_logging(args) assert log_mock.getLogger.call_count == 0
def test_parse_args(): # test defaults parser = service.create_parser('brewblox') args = parser.parse_args([]) assert args.port == 5000 assert not args.debug assert not args.output assert args.host == '0.0.0.0' assert args.name == 'brewblox' # test host args = parser.parse_args(['-H', 'host_name']) assert args.host == 'host_name' # test output file name args = parser.parse_args(['-o', 'file_name']) assert args.output == 'file_name' # test name args = parser.parse_args(['-n', 'service_name']) assert args.name == 'service_name' # test port args = parser.parse_args(['-p', '1234']) assert args.port == 1234 # test debug mode args = parser.parse_args(['--debug']) assert args.debug
def test_create_w_parser(sys_args, app_config, mocker): parser = service.create_parser('brewblox') parser.add_argument('-t', '--test', action='store_true') sys_args += ['-t'] app = service.create_app(parser=parser, raw_args=sys_args[1:]) assert app['config']['test'] is True
def create_parser(default_name='spark'): parser = service.create_parser(default_name=default_name) # Device options group = parser.add_argument_group('Device communication') group.add_argument('--simulation', help='Start in simulation mode. Will not connect to a physical device. ' 'This option takes precedence over other connection options. ' 'The simulator is assigned the --device-id value if set or 123456789012345678901234. ' 'If you are using multiple simulators, you need to assign them unique device IDs. ' '[%(default)s]', action='store_true') group.add_argument('--device-host', help='Spark device URL host. ' 'Will only connect if device ID matches advertised ID, or is not set. [%(default)s]') group.add_argument('--device-port', help='Spark device URL port when accessing a device over WiFi. [%(default)s]', type=int, default=8332) group.add_argument('--device-serial', help='Spark device serial port. Takes precedence over URL connections. ' 'Will only connect if device ID matches advertised ID, or is not set. [%(default)s]') group.add_argument('--device-id', help='Spark serial number. Any spark is valid if not set. [%(default)s]') group.add_argument('--discovery', help='Enabled types of device discovery. ' '--device-serial and --device-host disable discovery. ' '--device-id specifies which discovered device is valid. ', choices=['all', 'usb', 'wifi'], default='all') # Service network options group = parser.add_argument_group('Service communication') group.add_argument('--command-timeout', help='Timeout period (in seconds) for controller commands. [$(default)s]', type=float, default=20) group.add_argument('--broadcast-interval', help='Interval (in seconds) between broadcasts of controller state. ' 'Set to a value <= 0 to disable broadcasting. [%(default)s]', type=float, default=5) group.add_argument('--broadcast-ttl', help='Time-to-live value in seconds for published state events. ' 'This does not apply to history data. [%(default)s]', type=float, default=60) group.add_argument('--volatile', action='store_true', help='Disable all outgoing network calls. [%(default)s]') # Updater options group = parser.add_argument_group('Firmware') group.add_argument('--skip-version-check', help='Skip firmware version check: will not raise error on mismatch', action='store_true') return parser
def create_parser(default_name='plaato'): parser = service.create_parser(default_name=default_name) # Service network options group = parser.add_argument_group('Service communication') group.add_argument( '--broadcast-interval', help='Interval (in seconds) between plaato queries [%(default)s]', type=float, default=30) return parser
def create_parser(default_name='plaato'): parser = service.create_parser(default_name=default_name) # Service network options group = parser.add_argument_group('Service communication') group.add_argument( '--broadcast-interval', help='Interval (in seconds) between plaato queries [%(default)s]', type=float, default=30) group.add_argument( '--broadcast-exchange', help= 'Eventbus exchange to which service state is broadcast. [%(default)s]', default='brewcast') return parser
def create_parser(default_name="tilt"): parser = service.create_parser(default_name=default_name) parser.add_argument( "--lower-bound", help="Lower bound of acceptable SG values. " "Out-of-bounds measurement values will be discarded. [%(default)s]", type=float, default=0.5) parser.add_argument( "--upper-bound", help="Upper bound of acceptable SG values. " "Out-of-bounds measurement values will be discarded. [%(default)s]", type=float, default=2) # Assumes a default configuration of running with --net=host parser.set_defaults(port=5001, mqtt_protocol="wss", mqtt_host="172.17.0.1") return parser
def create_parser(default_name='history'): parser = service.create_parser(default_name=default_name) parser.add_argument( '--broadcast-exchange', help= 'Eventbus exchange to which device services broadcast their state. [%(default)s]', default='brewcast.history') parser.add_argument( '--write-interval', help= 'Interval (sec) between writing batches of received data to Influx. [%(default)s]', default=5, type=float) parser.add_argument( '--poll-interval', help= 'Interval (sec) between queries in live SSE requests. [%(default)s]', default=5, type=float) return parser
def create_parser(default_name='YOUR_PACKAGE') -> ArgumentParser: # brewblox-service has some default arguments # We can add more arguments here before sending the parser back to brewblox-service # The parsed values for all arguments are placed in app['config'] # For documentation see https://docs.python.org/3/library/argparse.html parser: ArgumentParser = service.create_parser(default_name=default_name) # This argument will be used by poll_example # After the service started, you can get the value in # app['config']['history_exchange'] parser.add_argument('--history-exchange', help='RabbitMQ eventbus exchange. [%(default)s]', default='brewcast.history') # This will also be used by poll_example # Note how we specify the type as float parser.add_argument( '--poll-interval', help='Interval (in seconds) between polling. [%(default)s]', type=float, default=5) return parser
def create_parser(default_name='hass') -> ArgumentParser: parser: ArgumentParser = service.create_parser(default_name=default_name) group = parser.add_argument_group('HASS broker config') group.add_argument( '--hass-mqtt-protocol', help='Transport protocol used for HASS MQTT events. [%(default)s]', choices=['mqtt', 'mqtts', 'ws', 'wss'], default='mqtt') group.add_argument( '--hass-mqtt-host', help='Hostname at which the HASS broker can be reached [%(default)s]', default='eventbus') group.add_argument( '--hass-mqtt-port', help='Port at which the HASS can be reached [%(default)s]', type=int) group.add_argument( '--hass-mqtt-path', help= 'Path used for HASS MQTT events. Only applies if a ws protocol is used. [%(default)s]', default='/eventbus') return parser
def create_parser(default_name='spark'): parser = service.create_parser(default_name=default_name) # Device options group = parser.add_argument_group('Device communication') group.add_argument( '--simulation', help= 'Start in simulation mode. Will not connect to a physical device. [%(default)s]', action='store_true') group.add_argument( '--device-host', help='Spark device URL host. ' 'Will connect to this URL regardless of advertised device ID. [%(default)s]' ) group.add_argument( '--device-port', help= 'Spark device URL port when accessing a device over WiFi. [%(default)s]', type=int, default=8332) group.add_argument( '--device-serial', help='Spark device serial port. Takes precedence over URL connections. ' 'Will only connect if device ID matches advertised ID, or is not set. [%(default)s]' ) group.add_argument( '--device-id', help='Spark serial number. Any spark is valid if not set. ' 'This will be ignored if --device-host is used. [%(default)s]') group.add_argument( '--discovery', help='Enabled types of device discovery. ' '--device-serial and --device-host disable discovery. ' '--device-id specifies which discovered device is valid. ', choices=['all', 'usb', 'wifi'], default='all') group.add_argument('--list-devices', action='store_true', help='List connected devices and exit. [%(default)s]') # Service network options group = parser.add_argument_group('Service communication') group.add_argument( '--broadcast-exchange', help= 'Eventbus exchange to which controller state should be broadcasted. [%(default)s]', default='brewcast') group.add_argument( '--broadcast-interval', help='Interval (in seconds) between broadcasts of controller state.' 'Set to a value <= 0 to disable broadcasting. [%(default)s]', type=float, default=5) group.add_argument( '--sync-exchange', help= 'Eventbus exchange used to synchronize remote blocks. [%(default)s]', default='syncast') group.add_argument( '--mdns-host', help='Address of the BrewBlox mdns discovery service. [%(default)s]', default='172.17.0.1') group.add_argument( '--mdns-port', help='Port of the BrewBlox mdns discovery service. [%(default)s]', type=int, default=5000) group.add_argument( '--volatile', action='store_true', help='Disable all outgoing network calls. [%(default)s]') return parser