Example #1
0
    def get(  # type: ignore
        self,
        event: str,
        condition: Optional[Dict[str, str]] = None,
    ):
        extra = condition or {}
        try:
            group, param_basket = self.find_route(
                f".{event}",
                self.DEFAULT_METHOD,
                self,
                {"__params__": {}, "__matches__": {}},
                extra=extra,
            )
        except NotFound:
            message = "Could not find signal %s"
            terms: List[Union[str, Optional[Dict[str, str]]]] = [event]
            if extra:
                message += " with %s"
                terms.append(extra)
            raise NotFound(message % tuple(terms))

        params = param_basket["__params__"]
        if not params:
            params = {
                param.name: param_basket["__matches__"][idx]
                for idx, param in group.params.items()
            }

        return group, [route.handler for route in group], params
Example #2
0
    def event(self, event: str, timeout: Optional[Union[int, float]] = None):
        events = set()
        for app in self.apps:
            signal = app.signal_router.name_index.get(event)
            if not signal:
                raise NotFound("Could not find signal %s" % event)
            events.add(signal.ctx.event)

        return asyncio.wait(
            [event.wait() for event in events],
            return_when=asyncio.FIRST_COMPLETED,
            timeout=timeout,
        )
Example #3
0
 async def event(self,
                 event: str,
                 timeout: Optional[Union[int, float]] = None):
     signal = self.signal_router.name_index.get(event)
     if not signal:
         if self.config.EVENT_AUTOREGISTER:
             self.signal_router.reset()
             self.add_signal(None, event)
             signal = self.signal_router.name_index.get(event)
             self.signal_router.finalize()
         else:
             raise NotFound("Could not find signal %s" % event)
     return await wait_for(signal.ctx.event.wait(), timeout=timeout)
Example #4
0
 def get(  # type: ignore
     self,
     event: str,
     condition: Optional[Dict[str, str]] = None,
 ):
     extra = condition or {}
     try:
         return self.resolve(f".{event}", extra=extra)
     except NotFound:
         message = "Could not find signal %s"
         terms: List[Union[str, Optional[Dict[str, str]]]] = [event]
         if extra:
             message += " with %s"
             terms.append(extra)
         raise NotFound(message % tuple(terms))
Example #5
0
    def get(  # type: ignore
        self,
        event: str,
        condition: Optional[Dict[str, str]] = None,
    ):
        extra = condition or {}
        try:
            group, param_basket = self.find_route(
                f".{event}",
                self.DEFAULT_METHOD,
                self,
                {
                    "__params__": {},
                    "__matches__": {}
                },
                extra=extra,
            )
        except NotFound:
            message = "Could not find signal %s"
            terms: List[Union[str, Optional[Dict[str, str]]]] = [event]
            if extra:
                message += " with %s"
                terms.append(extra)
            raise NotFound(message % tuple(terms))

        # Regex routes evaluate and can extract params directly. They are set
        # on param_basket["__params__"]
        params = param_basket["__params__"]
        if not params:
            # If param_basket["__params__"] does not exist, we might have
            # param_basket["__matches__"], which are indexed based matches
            # on path segments. They should already be cast types.
            params = {
                param.name: param_basket["__matches__"][idx]
                for idx, param in group.params.items()
            }

        return group, [route.handler for route in group], params
Example #6
0
 def event(self, event: str, timeout: Optional[Union[int, float]] = None):
     signal = self.signal_router.name_index.get(event)
     if not signal:
         raise NotFound("Could not find signal %s" % event)
     return wait_for(signal.ctx.event.wait(), timeout=timeout)