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 __init__(self, argument_parser=None): self._host = None self._port = None self._queue = None self._max_buffer = None self._server_socket = None self._client_connection = None EventBotClient.__init__(self, "Socket", argument_parser) if self._host is not None and \ self._port is not None and \ self._queue is not None: outputLog( self, "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) else: outputLog( self, "TCP Socket Client configuration not defined, unable to create socket!" )
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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_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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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")
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)
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)
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)
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)
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
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