def test_ask_question_no_charset(self): response_data = 'Hello' request_api = MockPublishedRestAPI(response=response_data) service = PublishedRestService(config=self._config, api=request_api) self.assertIsNotNone(service) params = RestParameters("http://test.publishdrest.url") params.set_method("GET") params.set_query('"userid": "test01", "question": "Hello"') params.set_header('"Content-type": "application/json"') params.set_body('{"json": {"data": "test"}}') service.params = params question = None response = service.ask_question(self._client_context, question) self.assertEqual('Hello', response)
def test_ask_question_set_parameter(self): service = PublishedRestService(config=self._config) self.assertIsNotNone(service) params = RestParameters("http://test.publishdrest.url") params.set_method("GET") params.set_query('"userid": "test01", "question": "Hello"') params.set_header('"Content-type": "application/json;charset=UTF-8"') params.set_body("Hello") service.params = params self.assertEqual('http://test.publishdrest.url', service.params.host) self.assertEqual('GET', service.params.method) self.assertEqual({"userid": "test01", "question": "Hello"}, service.params.query) self.assertEqual({"Content-type": "application/json;charset=UTF-8"}, service.params.header) self.assertEqual('Hello', service.params.body)
def test_ask_question_delete(self): response_data = 'Hello' request_api = MockPublishedRestAPI(response=response_data) service = PublishedRestService(config=self._config, api=request_api) self.assertIsNotNone(service) params = RestParameters("http://test.publishdrest.url") params.set_method("DELETE") params.set_query(None) params.set_header(None) params.set_body("Hello") service.params = params question = None response = service.ask_question(self._client_context, question) self.assertEqual('Hello', response)
def test_ask_question_invlid_method(self): response_data = 'Hello' request_api = MockPublishedRestAPI(response=response_data) service = PublishedRestService(config=self._config, api=request_api) self.assertIsNotNone(service) params = RestParameters("http://test.publishdrest.url") self.assertFalse(params.set_method("INSERT")) params.set_query(None) params.set_header(None) params.set_body("Hello") service.params = params self.assertEqual('GET', params.method) question = None response = service.ask_question(self._client_context, question) self.assertEqual("Hello", response)
def _published_REST_interface(self, client_context): self.host = None self.method = None self.query = None self.header = None self.body = None if self._host is not None: self.host = self._host.resolve(client_context) if self._method is not None: self.method = self._method.resolve(client_context) if self._query is not None: shift_text = self._query.resolve(client_context) self.query = self._delete_shift_code(shift_text) if self._header is not None: shift_text = self._header.resolve(client_context) self.header = self._delete_shift_code(shift_text) if self._body is not None: self.body = self._body.resolve(client_context) resolved = self.resolve_children_to_string(client_context) YLogger.debug(client_context, "[%s] resolved to [%s]", self.to_string(), resolved) error_msg = None if self._template is None: exec_params = RestParameters(self.host) if exec_params.host is None: error_msg = "sraix subagent-rest : invalid host parameter [%s]" % self.host if error_msg is None and self.body is not None: exec_params.set_body(self.body) if error_msg is None and self.method is not None: if exec_params.set_method(self.method) is False: error_msg = "sraix subagent-rest : invalid method parameter [%s]" % self.method if error_msg is None and self.query is not None: if exec_params.set_query(self.query) is False: error_msg = "sraix subagent-rest : invalid query parameter [%s]" % self.query if error_msg is None and self.header is not None: if exec_params.set_header(self.header) is False: error_msg = "sraix subagent-rest : invalid locale parameter [%s]" % self.header else: restParams = client_context.brain.rest_templates.rest_template( self._template) if restParams is None: error_msg = "sraix subagent-rest : REST-Template[%s] not found" % self._template YLogger.debug(client_context, error_msg) raise Exception(error_msg) exec_params = copy.copy(restParams) if self.host is not None: if exec_params.change_host(self.host) is False: error_msg = "sraix subagent-rest : invalid host parameter [%s]" % self.host if error_msg is None and self.body is not None: exec_params.join_body(self.body) if error_msg is None and self.method is not None: if exec_params.set_method(self.method) is False: error_msg = "sraix subagent-rest : invalid method parameter [%s]" % self.method if error_msg is None and self.query is not None: if exec_params.join_query(self.query) is False: error_msg = "sraix subagent-rest : invalid query parameter [%s]" % self.query if error_msg is None and self.header is not None: if exec_params.join_header(self.header) is False: error_msg = "sraix subagent-rest : invalid header parameter [%s]" % self.header if error_msg is not None: YLogger.debug(client_context, error_msg) raise Exception(error_msg) rest_service = ServiceFactory.get_service(self.SERVICE_PUBLISHED_REST) rest_service.params = exec_params if self._timeout is None: timeout = self.SRAIX_DEFAULT_TIMEOUT else: timeout = self._timeout response = rest_service.ask_question(client_context, resolved, timeout) YLogger.debug(client_context, "SRAIX host [%s] return [%s]", exec_params.host, response) conversation = client_context.bot.get_conversation(client_context) status_code = '' latency = '' try: status_code = rest_service.get_status_code() except NotImplementedError: pass try: latency = rest_service.get_latency() except NotImplementedError: pass if conversation.has_current_question() is True: conversation.current_question().set_property( '__SUBAGENT_STATUS_CODE__', status_code) conversation.current_question().set_property( '__SUBAGENT_LATENCY__', latency) if response is not None: if response == '' and self.default is not None: response = self.default variableName = "__SUBAGENT_BODY__" if conversation.has_current_question() is True: conversation.current_question().set_property( variableName, response) return response