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
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, )
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)
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))
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
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)