Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
    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