def test_carousel(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

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

        self.assertIsNotNone(mock_console._response)
        self.assertEqual(
            {
                'cards': [{
                    'buttons': [{
                        'postback': None,
                        'text': 'Hello',
                        'type': 'button',
                        'url': 'http://click.me'
                    }],
                    'image':
                    'http://servusai.com/aiml.png',
                    'subtitle':
                    'Home of ProgramY',
                    'title':
                    'Servusai',
                    'type':
                    'card'
                }],
                'type':
                'carousel'
            }, mock_console._response)
Beispiel #2
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.assertEqual({'items': [{'text': 'Item1', 'type': 'text'}, {'text': 'Item2', 'type': 'text'}], 'type': 'list'}, mock_console._response)
Beispiel #3
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.assertEqual({'seconds': '0', 'type': 'delay'}, mock_console._response)
Beispiel #4
0
    def test_delay(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

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

        data = mock_console._response
        self.assertTrue('delay' in data)
Beispiel #5
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.assertEqual({'type': 'image', 'url': 'http://servusai.com/aiml.png'}, mock_console._response)
Beispiel #6
0
    def test_reply_with_postback(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

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

        self.assertIsNotNone(mock_console._response)
        self.assertEqual({'postback': 'HELLO', 'text': 'Hello', 'type': 'reply'}, mock_console._response)
Beispiel #7
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)
    def test_location(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

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

        self.assertIsNotNone(mock_console._response)
        self.assertEqual({'type': 'location'}, mock_console._response)
Beispiel #9
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)
Beispiel #10
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)
Beispiel #11
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)
Beispiel #12
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)
Beispiel #13
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)
Beispiel #14
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.assertEqual({'text': 'Hello world', 'type': 'text'}, mock_console._response)
Beispiel #15
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)
Beispiel #16
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.assertEqual({'postback': None, 'text': 'Hello', 'type': 'button', 'url': 'http://click.me'}, mock_console._response)
Beispiel #17
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)
Beispiel #18
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)
Beispiel #19
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)
Beispiel #20
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.assertEqual({'type': 'video', 'url': 'http://servusai.com/aiml.mov'}, mock_console._response)
Beispiel #21
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 ProgramY</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 ProgramY', 'title': 'Servusai', 'type': 'card'}],'type': 'carousel'}, mock_console._response)
Beispiel #22
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>")

        data = mock_console._response
        self.assertTrue('reply' in data)
Beispiel #23
0
    def test_reply_with_postback(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

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

        self.assertIsNotNone(mock_console._response)
        self.assertEquals({'postback': 'HELLO', 'text': 'Hello', 'type': 'reply'}, mock_console._response)
Beispiel #24
0
    def test_split(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

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

        data = mock_console._response
        self.assertTrue('split' in data)
Beispiel #25
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.assertEqual({'postback': 'HELLO', 'text': 'Hello', 'type': 'button', 'url': None}, mock_console._response)
Beispiel #26
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.assertEqual({'type': 'split'}, mock_console._response)
Beispiel #27
0
    def test_location(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

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

        data = mock_console._response
        self.assertTrue('location' in data)
Beispiel #28
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.assertEqual({'text': 'Hello', 'type': 'link', 'url': 'http://click.me'}, mock_console._response)
Beispiel #29
0
    def test_text_only(self):
        mock_console = MockConsoleBotClient()
        renderer = JSONRenderer(mock_console)
        self.assertIsNotNone(renderer)

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

        data = mock_console._response
        self.assertTrue('text' in data)
        self.assertEquals(data['text'], "Hello world")
Beispiel #30
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>")

        data = mock_console._response
        self.assertTrue('video' in data)
Beispiel #31
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>")

        data = mock_console._response
        self.assertTrue('image' in data)
Beispiel #32
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>")

        data = mock_console._response
        self.assertTrue('olist' in data)
Beispiel #33
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>")

        data = mock_console._response
        self.assertTrue('link' in data)
Beispiel #34
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>")

        data = mock_console._response
        self.assertTrue('button' in data)
Beispiel #35
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 ProgramY</subtitle><button><text>Hello</text><url>http://click.me</url></button></card></carousel>"
        )

        data = mock_console._response
        self.assertTrue('carousel' in data)
Beispiel #36
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)

    def get_description(self):
        return 'ProgramY 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 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 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)

            client_context = self.create_client_context(userid)
            answer = self.process_question(client_context, 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
Beispiel #37
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)

    def get_description(self):
        return 'ProgramY 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 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 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)

            client_context = self.create_client_context(userid)
            answer = self.process_question(client_context, 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