Пример #1
0
 def _normalize_result(result: EventEnvelope, result_obj: any):
     if isinstance(result, EventEnvelope):
         if result.get_status() == 200:
             if isinstance(result.get_body(), type(result_obj)):
                 return result.get_body()
             else:
                 raise AppException(500, str(result.get_body()))
         else:
             raise AppException(result.get_status(), str(result.get_body()))
Пример #2
0
 def request(self,
             route: str,
             timeout_seconds: float,
             headers: dict = None,
             body: any = None,
             correlation_id: str = None) -> EventEnvelope:
     self.util.validate_service_name(route, True)
     if headers is None and body is None:
         raise ValueError(
             'Unable to make RPC call because both headers and body are missing'
         )
     timeout_value = self.util.get_float(timeout_seconds)
     if timeout_value <= 0:
         raise ValueError(
             'timeout value in seconds must be positive number')
     event = EventEnvelope().set_to(route)
     if headers is not None:
         if not isinstance(headers, dict):
             raise ValueError('headers must be dict')
         for h in headers:
             event.set_header(h, str(headers[h]))
     if body is not None:
         event.set_body(body)
     if correlation_id is not None:
         event.set_correlation_id(str(correlation_id))
     response = self.platform.request(event, timeout_seconds)
     if isinstance(response, EventEnvelope):
         if response.get_tag('exception') is None:
             return response
         else:
             raise AppException(response.get_status(), response.get_body())
     raise ValueError(
         f'Expect response is EventEnvelope, actual: ({response})')
Пример #3
0
 def single_request(self, event: EventEnvelope, timeout_seconds: float):
     response = self.platform.request(event, timeout_seconds)
     if isinstance(response, EventEnvelope):
         if response.get_tag('exception') is None:
             return response
         else:
             raise AppException(response.get_status(), response.get_body())
     raise ValueError(
         f'Expect response is EventEnvelope, actual: ({response})')
Пример #4
0
 def reader():
     while not self.eof:
         # if input stream has nothing, it will throw TimeoutError
         result = self.po.request(self.route,
                                  timeout_seconds,
                                  headers={'type': 'read'})
         if isinstance(result, EventEnvelope):
             if result.get_status() == 200:
                 payload_type = result.get_headers().get('type')
                 if 'eof' == payload_type:
                     self.eof = True
                     break
                 if 'body' == payload_type:
                     yield result.get_body()
             else:
                 raise AppException(result.get_status(),
                                    str(result.get_body()))