Ejemplo n.º 1
0
    def test_carousel(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

        renderer.render(
            "testuser",
            "<carousel><card><image>http://servusai.com/aiml.png</image><title>Servusai</title><subtitle>Home of programr</subtitle><button><text>Hello</text><url>http://click.me</url></button></card></carousel>"
        )

        self.assertIsNotNone(mock_console._response)
        self.assertEquals(
            {
                'cards': [{
                    'buttons': [{
                        'postback': None,
                        'text': 'Hello',
                        'type': 'button',
                        'url': 'http://click.me'
                    }],
                    'image':
                    'http://servusai.com/aiml.png',
                    'subtitle':
                    'Home of programr',
                    'title':
                    'Servusai',
                    'type':
                    'card'
                }],
                'type':
                'carousel'
            }, mock_console._response)
Ejemplo n.º 2
0
    def test_location(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

        renderer.render("testuser", "<location />")

        self.assertIsNotNone(mock_console._response)
        self.assertEquals({'type': 'location'}, mock_console._response)
Ejemplo n.º 3
0
    def test_split(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

        renderer.render("testuser", "<split />")

        self.assertIsNotNone(mock_console._response)
        self.assertEquals({'type': 'split'}, mock_console._response)
Ejemplo n.º 4
0
    def __init__(self, argument_parser=None):
        EventBotClient.__init__(self, "Socket", argument_parser)

        print("TCP Socket Client server now listening on %s:%d" %
              (self._host, self._port))
        self._server_socket = self.create_socket_connection(
            self._host, self._port, self._queue, self._max_buffer)

        self._renderer = JSONRenderer(self)

        config = self.client_context.brain.configuration
        self.client_context.brain.load_services(config)
Ejemplo n.º 5
0
    def test_delay(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

        renderer.render("testuser", "<delay><seconds>0</seconds></delay>")

        self.assertIsNotNone(mock_console._response)
        self.assertEquals({
            'seconds': '0',
            'type': 'delay'
        }, mock_console._response)
Ejemplo n.º 6
0
    def test_text_only(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

        renderer.render("testuser", "Hello world")

        self.assertIsNotNone(mock_console._response)
        self.assertEquals({
            'text': 'Hello world',
            'type': 'text'
        }, mock_console._response)
Ejemplo n.º 7
0
    def test_reply_without_postback(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

        renderer.render("testuser", "<reply><text>Hello</text></reply>")

        self.assertIsNotNone(mock_console._response)
        self.assertEquals({
            'postback': None,
            'text': 'Hello',
            'type': 'reply'
        }, mock_console._response)
Ejemplo n.º 8
0
    def test_video(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

        renderer.render("testuser",
                        "<video>http://servusai.com/aiml.mov</video>")

        self.assertIsNotNone(mock_console._response)
        self.assertEquals(
            {
                'type': 'video',
                'url': 'http://servusai.com/aiml.mov'
            }, mock_console._response)
Ejemplo n.º 9
0
    def test_image(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

        renderer.render("testuser",
                        "<image>http://servusai.com/aiml.png</image>")

        self.assertIsNotNone(mock_console._response)
        self.assertEquals(
            {
                'type': 'image',
                'url': 'http://servusai.com/aiml.png'
            }, mock_console._response)
Ejemplo n.º 10
0
    def test_link(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

        renderer.render(
            "testuser",
            "<link><text>Hello</text><url>http://click.me</url></link>")

        self.assertIsNotNone(mock_console._response)
        self.assertEquals(
            {
                'text': 'Hello',
                'type': 'link',
                'url': 'http://click.me'
            }, mock_console._response)
Ejemplo n.º 11
0
    def test_postback_button(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

        renderer.render(
            "testuser",
            "<button><text>Hello</text><postback>HELLO</postback></button>")

        self.assertIsNotNone(mock_console._response)
        self.assertEquals(
            {
                'postback': 'HELLO',
                'text': 'Hello',
                'type': 'button',
                'url': None
            }, mock_console._response)
Ejemplo n.º 12
0
    def test_url_button(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

        renderer.render(
            "testuser",
            "<button><text>Hello</text><url>http://click.me</url></button>")

        self.assertIsNotNone(mock_console._response)
        self.assertEquals(
            {
                'postback': None,
                'text': 'Hello',
                'type': 'button',
                'url': 'http://click.me'
            }, mock_console._response)
Ejemplo n.º 13
0
    def test_olist(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

        renderer.render("testuser",
                        "<olist><item>Item1</item><item>Item2</item></olist>")

        self.assertIsNotNone(mock_console._response)
        self.assertEquals(
            {
                'items': [{
                    'text': 'Item1',
                    'type': 'text'
                }, {
                    'text': 'Item2',
                    'type': 'text'
                }],
                'type':
                'list'
            }, mock_console._response)
Ejemplo n.º 14
0
class SocketBotClient(EventBotClient):
    def __init__(self, argument_parser=None):
        EventBotClient.__init__(self, "Socket", argument_parser)

        print("TCP Socket Client server now listening on %s:%d" %
              (self._host, self._port))
        self._server_socket = self.create_socket_connection(
            self._host, self._port, self._queue, self._max_buffer)

        self._renderer = JSONRenderer(self)

        config = self.client_context.brain.configuration
        self.client_context.brain.load_services(config)

    def get_description(self):
        return 'ProgramR AIML2.0 TCP Socket Client'

    def get_client_configuration(self):
        return SocketConfiguration()

    def parse_configuration(self):
        self._host = self.configuration.client_configuration.host
        self._port = self.configuration.client_configuration.port
        self._queue = self.configuration.client_configuration.queue
        self._max_buffer = self.configuration.client_configuration.max_buffer

    def extract_question(self, receive_payload):
        question = None
        if 'question' in receive_payload:
            question = receive_payload['question']
        if question is None or question == "":
            raise Exception("Clientid missing from payload")
        return question

    def extract_userid(self, receive_payload):
        userid = None
        if 'userid' in receive_payload:
            userid = receive_payload['userid']
        if userid is None or userid == "":
            raise Exception("Clientid missing from payload")
        return userid

    def extract_servicename(self, receive_payload):
        servicename = None
        if 'servicename' in receive_payload:
            servicename = receive_payload['servicename']
        if servicename is None or servicename == "":
            raise Exception("servicename missing from payload")
        return servicename

    def ask_question_from_service(self, servicename, question):
        service = ServiceFactory.get_service(servicename)
        answer = service.ask_question(self.client_context, question)
        return answer

    def create_socket_connection(self, host, port, queue, max_buffer):
        return SocketConnection(host, port, queue, max_buffer)

    def process_question(self, client_context, question):
        # Returns a response
        return client_context.bot.ask_question(client_context,
                                               question,
                                               responselogger=self)

    def render_response(self, client_context, response):
        # Calls the renderer which handles RCS context, and then calls back to the client to show response
        self._renderer.render(client_context, response)

    def process_response(self, client_context, response):
        self._client_connection.send_response(client_context.userid, response)

    def run_loop(self):
        bot = self.bot_factory.bot("bot")
        self._running = True
        bot.initiate_conversation_storage()

        while self._running:
            self._running = self.wait_and_answer()

    def wait_and_answer(self, ):
        running = True
        try:
            self._client_connection = self._server_socket.accept_connection()

            receive_payload = self._client_connection.receive_data()

            question = self.extract_question(receive_payload)
            userid = self.extract_userid(receive_payload)
            service_name = self.extract_servicename(receive_payload)

            client_context = self.create_client_context(userid)

            answer = self.ask_question_from_service(service_name, question)

            self.render_response(client_context, answer)

        except KeyboardInterrupt:
            running = False
            YLogger.debug(self, "Cleaning up and exiting...")

        except Exception as e:
            if self._client_connection is not None:
                self._client_connection.send_error(e)

        finally:
            if self._client_connection is not None:
                self._client_connection.close()

        return running

    def run(self):
        if self.arguments.noloop is False:
            YLogger.info(self, "Entering conversation loop...")

            self.prior_to_run_loop()

            self.run_loop()

            self.post_run_loop()

        else:
            YLogger.debug(self, "noloop set to True, exiting...")