コード例 #1
0
    def test_parse_bad_arg(self):
        args = argparse.argparse(
            Observable.from_(["--bar", "barz"]),
            Observable.just(argparse.Parser(description="test_parse")),
            Observable.from_([
                argparse.ArgumentDef(name="--foo"),
            ]))

        actual_result = None

        def on_error(error):
            nonlocal actual_result
            actual_result = error

        args.subscribe(on_error=on_error)
        self.assertIn("unrecognized arguments", actual_result)
コード例 #2
0
    def test_parse(self):
        args = argparse.argparse(
            Observable.from_(["--foo", "fooz"]),
            Observable.just(argparse.Parser(description="test_parse")),
            Observable.from_([
                argparse.ArgumentDef(name="--foo"),
            ]))

        expected_result = [argparse.Argument(key="foo", value="fooz")]

        actual_result = None

        def set_result(i):
            nonlocal actual_result
            actual_result = i

        args.to_list().subscribe(set_result)
        self.assertEqual(expected_result, actual_result)
コード例 #3
0
def read_configuration(source):
    args = argparse.argparse(
        argv=source.argv.skip(1),
        parser=Observable.just(argparse.Parser(description="deepspeaker")),
        arguments=Observable.from_([
            argparse.ArgumentDef(name='--config',
                                 help="Path of the configuration file")
        ]))

    read_config_file = Observable.just(
        file.Context(id='config',
                     observable=args.filter(lambda i: i.key == 'config').map(
                         lambda i: file.Read(id='config', path=i.value))))

    config = (source.file_response.filter(lambda i: i.id == "config").flat_map(
        lambda i: i.observable
    ).flat_map(lambda i: i.data).map(lambda i: json.loads(
        i, object_hook=lambda d: namedtuple('x', d.keys())(*d.values()))))

    return Sink(file_request=read_config_file, configuration=config)
コード例 #4
0
def deepspeech_server(sources):
    argv = sources.argv.argv
    stt = sources.httpd.route
    stt_response = sources.deepspeech.text.share()
    ds_logs = sources.deepspeech.log
    config_data = sources.file.response

    http_ds_error, route_ds_error = make_error_router()

    args = argparse.argparse(
        argv=argv.skip(1).subscribe_on(aio_scheduler),
        parser=Observable.just(
            argparse.Parser(description="deepspeech server")),
        arguments=Observable.from_([
            argparse.ArgumentDef(name='--config',
                                 help="Path of the server configuration file")
        ]))

    config_file = (args.filter(lambda i: i.key == 'config').map(
        lambda i: file.Read(id='config', path=i.value)))
    config = parse_config(config_data).subscribe_on(aio_scheduler)

    logs_config = (config.flat_map(lambda i: Observable.from_(i.log.level).map(
        lambda i: logging.SetLevel(logger=i.logger, level=i.level)).concat(
            Observable.just(logging.SetLevelDone()))))

    logs = Observable.merge(logs_config, ds_logs)
    log_ready = sources.logging.response.take(1)

    ds_stt = (stt.flat_map(lambda i: i.request).map(
        lambda i: deepspeech.SpeechToText(data=i.data, context=i.context)))

    ds_arg = (
        # config is hot, the combine operator allows to keep its last value
        # until logging is initialized
        log_ready.combine_latest(
            config, lambda _, i: i).map(lambda i: deepspeech.Initialize(
                model=i.deepspeech.model,
                alphabet=i.deepspeech.alphabet,
                lm=i.deepspeech.lm,
                trie=i.deepspeech.trie,
                features=deepspeech.FeaturesParameters(
                    n_features=i.deepspeech.features.n_features,
                    n_context=i.deepspeech.features.n_context,
                    beam_width=i.deepspeech.features.beam_width,
                    lm_alpha=i.deepspeech.features.lm_alpha,
                    lm_beta=i.deepspeech.features.lm_beta,
                ) if i.deepspeech.features is not None else None)))
    ds = ds_stt.merge(ds_arg)

    http_init = (config.flat_map(lambda i: Observable.from_([
        httpd.Initialize(request_max_size=i.server.http.request_max_size),
        httpd.AddRoute(
            methods=['POST'],
            path='/stt',
            id='stt',
        ),
        httpd.StartServer(host=i.server.http.host, port=i.server.http.port),
    ])))

    http_response = (stt_response.let(lambda x: route_ds_error(
        x,
        error_map=lambda e: httpd.Response(
            data="Speech to text error".encode('utf-8'),
            context=e.args[0].context,
            status=500))).map(lambda i: httpd.Response(
                data=i.text.encode('utf-8'),
                context=i.context,
            )))

    http = Observable.merge(http_init, http_response, http_ds_error)

    return DeepspeechSink(file=file.Sink(request=config_file),
                          logging=logging.Sink(request=logs),
                          deepspeech=deepspeech.Sink(speech=ds),
                          httpd=httpd.Sink(control=http))
コード例 #5
0
    def test_creation(self):
        args = argparse.argparse(Observable.empty(), Observable.empty(),
                                 Observable.empty())

        self.assertIsNotNone(args)