Esempio n. 1
0
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)
Esempio n. 2
0
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
Esempio n. 4
0
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
Esempio n. 5
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
Esempio n. 6
0
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
Esempio n. 8
0
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
Esempio n. 9
0
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
Esempio n. 10
0
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
Esempio n. 11
0
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
Esempio n. 12
0
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
Esempio n. 13
0
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
Esempio n. 14
0
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