Esempio n. 1
0
 async def call_herald_event(ci, destination: str, event_name: str, **kwargs) -> Dict:
     """Send a :class:`rh.Request` to a specific destination, and wait for a
     :class:`rh.Response`."""
     if self.herald is None:
         raise rc.UnsupportedError("`royalherald` is not enabled on this Constellation.")
     request: rh.Request = rh.Request(handler=event_name, data=kwargs)
     response: rh.Response = await self.herald.request(destination=destination, request=request)
     if isinstance(response, rh.ResponseFailure):
         if response.name == "no_event":
             raise rc.CommandError(f"There is no event named {event_name} in {destination}.")
         elif response.name == "exception_in_event":
             # TODO: pretty sure there's a better way to do this
             if response.extra_info["type"] == "CommandError":
                 raise rc.CommandError(response.extra_info["message"])
             elif response.extra_info["type"] == "UserError":
                 raise rc.UserError(response.extra_info["message"])
             elif response.extra_info["type"] == "InvalidInputError":
                 raise rc.InvalidInputError(response.extra_info["message"])
             elif response.extra_info["type"] == "UnsupportedError":
                 raise rc.UnsupportedError(response.extra_info["message"])
             elif response.extra_info["type"] == "ConfigurationError":
                 raise rc.ConfigurationError(response.extra_info["message"])
             elif response.extra_info["type"] == "ExternalError":
                 raise rc.ExternalError(response.extra_info["message"])
             else:
                 raise TypeError(f"Herald action call returned invalid error:\n"
                                 f"[p]{response}[/p]")
     elif isinstance(response, rh.ResponseSuccess):
         return response.data
     else:
         raise TypeError(f"Other Herald Link returned unknown response:\n"
                         f"[p]{response}[/p]")
Esempio n. 2
0
 async def call_herald_event(ci, destination: str, event_name: str,
                             **kwargs) -> Dict:
     """Send a :class:`royalherald.Request` to a specific destination, and wait for a
     :class:`royalherald.Response`."""
     if self.herald is None:
         raise UnsupportedError(
             "`royalherald` is not enabled on this serf.")
     request: rh.Request = rh.Request(handler=event_name,
                                      data=kwargs)
     response: rh.Response = await self.herald.request(
         destination=destination, request=request)
     if isinstance(response, rh.ResponseFailure):
         if response.name == "no_event":
             raise ProgramError(
                 f"There is no event named {event_name} in {destination}."
             )
         elif response.name == "error_in_event":
             if response.extra_info["type"] == "CommandError":
                 raise CommandError(response.extra_info["message"])
             elif response.extra_info["type"] == "UserError":
                 raise UserError(response.extra_info["message"])
             elif response.extra_info[
                     "type"] == "InvalidInputError":
                 raise InvalidInputError(
                     response.extra_info["message"])
             elif response.extra_info["type"] == "UnsupportedError":
                 raise UnsupportedError(
                     response.extra_info["message"])
             elif response.extra_info[
                     "type"] == "ConfigurationError":
                 raise ConfigurationError(
                     response.extra_info["message"])
             elif response.extra_info["type"] == "ExternalError":
                 raise ExternalError(response.extra_info["message"])
             else:
                 raise ProgramError(
                     f"Invalid error in Herald event '{event_name}':\n"
                     f"[b]{response.extra_info['type']}[/b]\n"
                     f"{response.extra_info['message']}")
         elif response.name == "unhandled_exception_in_event":
             raise ProgramError(
                 f"Unhandled exception in Herald event '{event_name}':\n"
                 f"[b]{response.extra_info['type']}[/b]\n"
                 f"{response.extra_info['message']}")
         else:
             raise ProgramError(
                 f"Unknown response in Herald event '{event_name}':\n"
                 f"[b]{response.name}[/b]"
                 f"[p]{response}[/p]")
     elif isinstance(response, rh.ResponseSuccess):
         return response.data
     else:
         raise ProgramError(
             f"Other Herald Link returned unknown response:\n"
             f"[p]{response}[/p]")