コード例 #1
0
    def discover(self, thing_filter, dnssd_find_kwargs=None):
        """Starts the discovery process that will provide ThingDescriptions
        that match the optional argument filter of type ThingFilter."""

        supported_methods = [
            DiscoveryMethod.ANY, DiscoveryMethod.LOCAL,
            DiscoveryMethod.MULTICAST
        ]

        if thing_filter.method not in supported_methods:
            err = NotImplementedError("Unsupported discovery method")
            # noinspection PyUnresolvedReferences
            return Observable.throw(err)

        if thing_filter.query:
            err = NotImplementedError(
                "Queries are not supported yet (please use filter.fragment)")
            # noinspection PyUnresolvedReferences
            return Observable.throw(err)

        observables = []

        if thing_filter.method in [DiscoveryMethod.ANY, DiscoveryMethod.LOCAL]:
            observables.append(
                self._build_local_discover_observable(thing_filter))

        if thing_filter.method in [
                DiscoveryMethod.ANY, DiscoveryMethod.MULTICAST
        ]:
            observables.append(
                self._build_dnssd_discover_observable(thing_filter,
                                                      dnssd_find_kwargs))

        # noinspection PyUnresolvedReferences
        return Observable.merge(*observables)
コード例 #2
0
ファイル: when.py プロジェクト: ESSL-CQQ/RxPY
    def subscribe(observer):
        active_plans = []
        external_subscriptions = {}

        def on_error(err):
            for v in external_subscriptions.values():
                v.on_error(err)
            observer.on_error(err)

        out_observer = AnonymousObserver(observer.on_next, on_error, observer.on_completed)

        def deactivate(active_plan):
            active_plans.remove(active_plan)
            if not len(active_plans):
                observer.on_completed()
        try:
            for plan in plans:
                active_plans.append(plan.activate(external_subscriptions, 
                                                  out_observer, deactivate))
        except Exception as ex:
            Observable.throw(ex).subscribe(observer)

        group = CompositeDisposable()
        for join_observer in external_subscriptions.values():
            join_observer.subscribe()
            group.add(join_observer)

        return group
コード例 #3
0
ファイル: when.py プロジェクト: Austin-cp/cp-0.1.1
    def subscribe(observer):
        active_plans = []
        external_subscriptions = {}

        def on_error(err):
            for v in external_subscriptions.values():
                v.on_error(err)
            observer.on_error(err)

        out_observer = AnonymousObserver(observer.on_next, on_error,
                                         observer.on_completed)

        def deactivate(active_plan):
            active_plans.remove(active_plan)
            if not len(active_plans):
                observer.on_completed()

        try:
            for plan in plans:
                active_plans.append(
                    plan.activate(external_subscriptions, out_observer,
                                  deactivate))
        except Exception as ex:
            Observable.throw(ex).subscribe(observer)

        group = CompositeDisposable()
        for join_observer in external_subscriptions.values():
            join_observer.subscribe()
            group.add(join_observer)

        return group
コード例 #4
0
ファイル: file.py プロジェクト: Costigun/Mozilla_deepspeech
 def on_next(i):
     if type(i) is Read:
         try:
             with open(i.path, i.mode) as content_file:
                 content = content_file.read(i.size)
                 data = Observable.just(content)
                 observer.on_next(
                     ReadResponse(id=i.id, path=i.path, data=data))
         except Exception as e:
             observer.on_next(Observable.throw(e))
     elif type(i) is ReadLine:
         try:
             with open(i.path) as content_file:
                 data = Observable.from_(content_file)
                 observer.on_next(
                     ReadResponse(id=i.id, path=i.path, data=data))
         except Exception as e:
             observer.on_next(Observable.throw(e))
     elif type(i) is Write:
         try:
             if i.mkdirs is True:
                 os.makedirs(os.path.split(i.path)[0],
                             exist_ok=True)
             with open(i.path, i.mode) as content_file:
                 size = content_file.write(i.data)
                 status = 0 if size == len(i.data) else -1
                 observer.on_next(
                     WriteResponse(id=i.id,
                                   path=i.path,
                                   status=status))
         except Exception as e:
             observer.on_next(Observable.throw(e))
     else:
         observer.on_error("file unknown command: {}".format(i))
コード例 #5
0
ファイル: client.py プロジェクト: agmangas/wot-py
    def on_event(self, td, name):
        """Subscribes to an event on a remote Thing.
        Returns an Observable."""

        if name not in td.events:
            # noinspection PyUnresolvedReferences
            return Observable.throw(FormNotFoundException())

        form = pick_form(td, td.get_event_forms(name), WebsocketSchemes.list())

        if not form:
            # noinspection PyUnresolvedReferences
            return Observable.throw(FormNotFoundException())

        ws_url = form.resolve_uri(td.base)

        msg_req = WebsocketMessageRequest(method=WebsocketMethods.ON_EVENT,
                                          params={"name": name},
                                          msg_id=uuid.uuid4().hex)

        def on_next(observer, msg_item):
            observer.on_next(EmittedEvent(init=msg_item.data, name=name))

        subscribe = self._build_subscribe(ws_url, msg_req, on_next)

        # noinspection PyUnresolvedReferences
        return Observable.create(subscribe)
コード例 #6
0
ファイル: client.py プロジェクト: agmangas/wot-py
    def on_property_change(self, td, name):
        """Subscribes to property changes on a remote Thing.
        Returns an Observable."""

        if name not in td.properties:
            # noinspection PyUnresolvedReferences
            return Observable.throw(FormNotFoundException())

        form = pick_form(td, td.get_property_forms(name),
                         WebsocketSchemes.list())

        if not form:
            # noinspection PyUnresolvedReferences
            return Observable.throw(FormNotFoundException())

        ws_url = form.resolve_uri(td.base)

        msg_req = WebsocketMessageRequest(
            method=WebsocketMethods.ON_PROPERTY_CHANGE,
            params={"name": name},
            msg_id=uuid.uuid4().hex)

        def on_next(observer, msg_item):
            init_name = msg_item.data["name"]
            init_value = msg_item.data["value"]
            init = PropertyChangeEventInit(name=init_name, value=init_value)
            observer.on_next(PropertyChangeEmittedEvent(init=init))

        subscribe = self._build_subscribe(ws_url, msg_req, on_next)

        # noinspection PyUnresolvedReferences
        return Observable.create(subscribe)
コード例 #7
0
 def create():
     return xs.group_join(
         ys, lambda x: Observable.timer(x.interval).flat_map(
             Observable.throw(ex)
             if x.value == 6 else Observable.empty()),
         lambda y: Observable.timer(y.interval), lambda x, yy: yy.map(
             lambda y: str(x.value) + y.value)).merge_all()
コード例 #8
0
            async def _request(request):
                nonlocal session

                if session is None:
                    session = aiohttp.ClientSession()

                try:
                    response = await session.request(
                        request.method,
                        request.url,
                        params=request.params,
                        data=request.data,
                        headers=request.headers,
                        allow_redirects=request.allow_redirects,
                        max_redirects=request.max_redirects
                    )

                    data = await response.read()
                    observer.on_next(Response(
                        id=request.id,
                        response=Observable.just(HttpResponse(
                            status=response.status, reason=response.status,
                            method=response.method, url=response.url,
                            data=data, cookies=response.cookies,
                            headers=response.headers,
                            content_type=response.content_type
                        ))
                    ))

                except Exception as e:
                    print("exception: {}".format(e))
                    observer.on_next(Response(
                        id=request.id,
                        response=Observable.throw(e)))
コード例 #9
0
            def on_next(item):
                nonlocal client
                nonlocal bucket

                if type(item) is Configure:
                    session = Session(aws_access_key_id=item.access_key,
                                      aws_secret_access_key=item.secret_key)
                    client = session.client('s3',
                                            endpoint_url=item.endpoint_url,
                                            region_name=item.region_name)
                    bucket = item.bucket

                elif type(item) is UploadObject:
                    try:
                        data = BytesIO(item.data)
                        client.upload_fileobj(data, bucket, item.key)
                        loop.call_soon_threadsafe(
                            observer.on_next(
                                Observable.just(
                                    UploadReponse(key=item.key, id=item.id))))
                    except:
                        loop.call_soon_threadsafe(
                            observer.on_next(
                                Observable.throw(
                                    Exception(
                                        UploadError(key=item.key,
                                                    id=item.id)))))

                else:
                    loop.call_soon_threadsafe(
                        observer.on_error,
                        "unknown item: {}".format(type(item)))
コード例 #10
0
    def test_route_error(self):
        actual_sequence = []

        def on_chain_item(i):
            nonlocal actual_sequence
            actual_sequence.append(i)

        sink, route_error = make_error_router()

        origin = (
            Observable.from_([
                Observable.just(1),
                Observable.throw(-1)
            ])
            .do_action(lambda i: print)
            .let(route_error,
                error_map=lambda e: e.args[0] * 100,
            )
            .do_action(lambda i: print)
        )

        result = Observable.merge(origin, sink)
        disposable = result.subscribe(on_chain_item)
        disposable.dispose()

        expected_sequence = [1, -100]
        self.assertEqual(actual_sequence, expected_sequence)
コード例 #11
0
 def create():
     return xs.join(ys,
         lambda x: Observable.timer(x.interval),
         lambda y: Observable.timer(y.interval).flat_map(
             Observable.throw(ex) if y.value == "tin" else Observable.empty()),
         lambda x, y: str(x.value) + y.value
     )
コード例 #12
0
    def test_throw_observer_throws(self):
        scheduler = TestScheduler()
        xs = Observable.throw('ex')
        xs.subscribe_(lambda x: None,
                      lambda ex: _raise('ex'),
                      lambda: None,
                      scheduler=scheduler)

        self.assertRaises(RxException, scheduler.start)
コード例 #13
0
ファイル: thing.py プロジェクト: agmangas/wot-py
    def on_property_change(self, name):
        """Returns an Observable for the Property specified in the name argument,
        allowing subscribing to and unsubscribing from notifications."""

        try:
            interaction = self._find_interaction(name=name)
        except ValueError:
            # noinspection PyUnresolvedReferences
            return Observable.throw(Exception("Unknown property"))

        if not interaction.observable:
            # noinspection PyUnresolvedReferences
            return Observable.throw(Exception("Property is not observable"))

        def property_change_filter(item):
            return item.name == DefaultThingEvent.PROPERTY_CHANGE and \
                   item.data.name == name

        # noinspection PyUnresolvedReferences
        return self._events_stream.filter(property_change_filter)
コード例 #14
0
    def observe_file(url):
        text_request = requests.get(url)
        if text_request.ok == False:
            return Observable.throw("request failed: {}\n{}".format(
                text_request.reason, text_request.url))

        temp = NamedTemporaryFile(delete=False)
        temp.file.write(text_request.content)
        temp.close()
        return Observable.from_(open(temp.name))\
                         .map(lambda line: line.strip())\
                         .filter(lambda l: l != "")
コード例 #15
0
            def on_deepspeech_request(item):
                nonlocal ds_model

                if type(item) is SpeechToText:
                    if ds_model is not None:
                        try:
                            # use ffmpeg to convert to raw
                            out, _ = (ffmpeg.input(
                                '-',
                                format='ogg',
                            ).output('-',
                                     format='s16le',
                                     acodec='pcm_s16le',
                                     ac=1,
                                     ar='16k').run(capture_stdout=True,
                                                   input=item.data))

                            # to numpy array
                            audio = np.frombuffer(out, dtype=np.int16)
                            fs = 16000

                            # fs, audio = wav.read(io.BytesIO(item.data))

                            # convert to mono.
                            # todo: move to a component or just a function here
                            if len(audio.shape) > 1:
                                audio = audio[:, 0]
                            text = ds_model.stt(audio, fs)
                            log("STT result: {}".format(text))
                            observer.on_next(
                                Observable.just(
                                    TextResult(
                                        text=text,
                                        context=item.context,
                                    )))
                        except Exception as e:
                            log("STT error: {}".format(e))
                            observer.on_next(
                                Observable.throw(
                                    TextError(
                                        error=e,
                                        context=item.context,
                                    )))
                elif type(item) is Initialize:
                    log("initialize: {}".format(item))
                    ds_model = setup_model(
                        item.model, item.alphabet, item.lm, item.trie,
                        item.features or FeaturesParameters())
                else:
                    log("unknown item: {}".format(item),
                        level=logging.CRITICAL)
                    observer.on_error("Unknown item type: {}".format(
                        type(item)))
コード例 #16
0
ファイル: thing.py プロジェクト: agmangas/wot-py
    def on_event(self, name):
        """Returns an Observable for the Event specified in the name argument,
        allowing subscribing to and unsubscribing from notifications."""

        if name not in self.thing.events:
            # noinspection PyUnresolvedReferences
            return Observable.throw(Exception("Unknown event"))

        def event_filter(item):
            return item.name == name

        # noinspection PyUnresolvedReferences
        return self._events_stream.filter(event_filter)
コード例 #17
0
    def test_forward_error(self):
        numbers = Observable.throw(ValueError())
        expected_numbers = []
        actual_numbers = []
        actual_error = None

        def on_next(i):
            actual_numbers.append(i)

        def on_error(e):
            nonlocal actual_error
            actual_error = e

        integer_passthrough(numbers).subscribe(on_next=on_next,
                                               on_error=on_error)

        self.assertIsInstance(actual_error, ValueError)
        self.assertEqual(expected_numbers, actual_numbers)
コード例 #18
0
            def on_deepspeech_request(item):
                nonlocal ds_model

                if type(item) is SpeechToText:
                    if ds_model is not None:
                        try:
                            audio, orig_sr = sf.read(io.BytesIO(item.data),
                                                     always_2d=True)
                            # convert to mono.
                            # todo: move to a component or just a function here
                            if len(audio.shape) > 1:
                                audio = audio[:, 0]

                            # convert to 16K
                            if orig_sr != 16000:
                                audio = librosa.resample(y=audio,
                                                         orig_sr=orig_sr,
                                                         target_sr=16000,
                                                         scale=False)
                            maxv = np.iinfo(np.int16).max
                            audio_int16 = (audio * maxv).astype(np.int16)

                            text = ds_model.stt(audio_int16, aSampleRate=16000)
                            log("STT result: {}".format(text))
                            observer.on_next(Observable.just(TextResult(
                                text=text,
                                context=item.context,
                            )))
                        except Exception as e:
                            log("STT error: {}".format(e))
                            observer.on_next(Observable.throw(TextError(
                                error=e,
                                context=item.context,
                            )))
                elif type(item) is Initialize:
                    log("initialize: {}".format(item))
                    ds_model = setup_model(
                        item.model, item.alphabet, item.lm, item.trie, item.features or FeaturesParameters())
                else:
                    log("unknown item: {}".format(item), level=logging.CRITICAL)
                    observer.on_error(
                        "Unknown item type: {}".format(type(item)))
コード例 #19
0
 def on_next(item):
     nonlocal samplerate
     nonlocal bitdepth
     if type(item) is Configure:
         print("configure: {}".format(item))
         samplerate = item.samplerate
         bitdepth = item.bitdepth
     elif type(item) is EncodeMp3:
         try:
             encoded_data = mp3_to_flac(item.data, samplerate,
                                        bitdepth)
             observer.on_next(
                 Observable.just(
                     EncodeResult(id=item.id,
                                  key=item.key,
                                  data=encoded_data)))
         except:
             observer.on_next(
                 Observable.throw(
                     Exception(EncodeError(key=item.key,
                                           id=item.id))))
     else:
         observer.on_error("unknown item: {}".format(type(item)))
コード例 #20
0
            def on_deepspeech_request(item):
                nonlocal ds_model

                if type(item) is SpeechToText:
                    if ds_model is not None:
                        try:
                            fs, audio = wav.read(io.BytesIO(item.data))
                            # convert to mono.
                            # todo: move to a component or just a function here
                            if len(audio.shape) > 1:
                                audio = audio[:, 0]
                            text = ds_model.stt(audio)  # , fs)
                            log("STT result: {}".format(text))
                            observer.on_next(
                                Observable.just(
                                    TextResult(
                                        text=text,
                                        context=item.context,
                                    )))
                        except Exception as e:
                            log("STT error: {}".format(e))
                            observer.on_next(
                                Observable.throw(
                                    TextError(
                                        error=e,
                                        context=item.context,
                                    )))
                elif type(item) is Initialize:
                    log("initialize: {}".format(item))
                    ds_model = setup_model(
                        item.model, item.alphabet, item.lm, item.trie,
                        item.features or FeaturesParameters())
                else:
                    log("unknown item: {}".format(item),
                        level=logging.CRITICAL)
                    observer.on_error("Unknown item type: {}".format(
                        type(item)))
コード例 #21
0
 def create():
     return Observable.throw(ex).sample(0)
コード例 #22
0
 def factory():
     return Observable.throw('ex')
コード例 #23
0
from rx import Observable

error = Observable.throw("Something wrong happened")
error.subscribe(on_next=lambda i: print("item: {}".format(i)),
                on_error=lambda e: print("error: {}".format(e)),
                on_completed=lambda: print("completed"))
コード例 #24
0
ファイル: test_transduce.py プロジェクト: xyicheng/RxPY
 def create():
     Observable.throw(RxException()).transduce(
         compose(filtering(even),
                 mapping(mul10))).subscribe_(noop, throw_error)
コード例 #25
0
from rx import Observable

exception = Observable.throw(NotImplementedError("I do nothing"))
exception.subscribe(on_next=lambda i: print("item: {}".format(i)),
                    on_error=lambda e: print("error: {}".format(e)),
                    on_completed=lambda: print("completed"))
コード例 #26
0
            def on_deepspeech_request(item):
                nonlocal ds_model

                if type(item) is SpeechToText:
                    if ds_model is not None:
                        temp_dir = tempfile.mkdtemp()
                        noise_temp_filepath = temp_dir + "/noise.wav"
                        noise_prof_temp_filepath = temp_dir + "/noise.prof"
                        input_temp_filepath = temp_dir + "/input.wav"
                        output_temp_filepath = temp_dir + "/output.wav"

                        try:
                            # ffmpeg -i input.wav -acodec pcm_s16le -ac 1 -ar 16000 -af lowpass=3000,highpass=200 ...
                            #   output.wav
                            # sox input.wav -b 16 output.wav channels 1 rate 16k sinc 200-3k -

                            fs, audio = wav.read(io.BytesIO(item.data))
                            wav.write(input_temp_filepath, fs, audio)

                            # Get noise profile
                            noise = sox.Transformer()
                            noise.trim(0.0, 0.1)
                            noise.build(input_temp_filepath,
                                        noise_temp_filepath)
                            noise_prof = sox.Transformer()
                            noise_prof.noiseprof(noise_temp_filepath,
                                                 noise_prof_temp_filepath)

                            # Convert WAV file to a cleaner representation that will be better for inference.
                            cbn = sox.Transformer()
                            cbn.set_output_format(rate=16000,
                                                  channels=1,
                                                  bits=16,
                                                  encoding="signed-integer")
                            cbn.noisered(noise_prof_temp_filepath, 0.05)
                            cbn.build(input_temp_filepath,
                                      output_temp_filepath)
                            fs, audio = wav.read(
                                open(output_temp_filepath, 'rb'))

                            if len(audio.shape) > 1:
                                audio = audio[:, 0]
                            text = ds_model.stt(audio, fs)
                            log("STT result: {}".format(text))
                            observer.on_next(
                                Observable.just(
                                    TextResult(
                                        text=text,
                                        context=item.context,
                                    )))
                        except Exception as e:
                            log("STT error: {}".format(e))
                            observer.on_next(
                                Observable.throw(
                                    TextError(
                                        error=e,
                                        context=item.context,
                                    )))
                        finally:
                            shutil.rmtree(temp_dir)
                elif type(item) is Initialize:
                    log("initialize: {}".format(item))
                    ds_model = setup_model(
                        item.model, item.alphabet, item.lm, item.trie,
                        item.features or FeaturesParameters())
                else:
                    log("unknown item: {}".format(item),
                        level=logging.CRITICAL)
                    observer.on_error("Unknown item type: {}".format(
                        type(item)))
コード例 #27
0
 def create():
     return Observable.throw(ex).time_interval()
コード例 #28
0
        def create():
            def handler(e):
                handler_called[0] = True
                return o2

            return Observable.throw('ex').catch_exception(handler)
コード例 #29
0
 def _subscribe(self, observer: Observer) -> Disposable:
     if self.is_disposed:
         return Observable.throw(DisposedException('Trying to access an already disposed object')) \
             .subscribe(observer)
     else:
         return self._collectionChanges.subscribe(observer)
コード例 #30
0
 def create():
     return Observable.throw(ex).debounce(10)
コード例 #31
0
 def test_for_each_index_throws(self):
     ex = Exception()
     xs = Observable.throw(ex)
     self.assertRaises(Exception, lambda:xs.to_blocking().for_each(lambda x, i: _raise(ex)))