192 lines
7.0 KiB
Plaintext
192 lines
7.0 KiB
Plaintext
|
|
{
|
||
|
|
"cells": [
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": null,
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"\"\"\"\n",
|
||
|
|
"The module optimizer_server implements the connection to Optimizer server. \n",
|
||
|
|
"\n",
|
||
|
|
"\"\"\"\n",
|
||
|
|
"\n",
|
||
|
|
"import asyncio\n",
|
||
|
|
"import nest_asyncio\n",
|
||
|
|
"nest_asyncio.apply()\n",
|
||
|
|
"\n",
|
||
|
|
"class Optimizer():\n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" This class contains attributes and methods for connecting to a running Optimizer server, \n",
|
||
|
|
" optimizing commands and queries, returning the result queries to be executed by Secondo.\n",
|
||
|
|
" \n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" \n",
|
||
|
|
" def __init__(self, server, port):\n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" The constructor of the calss Optimizer.\n",
|
||
|
|
" \n",
|
||
|
|
" :param server: The IP-address of Optimizer server.\n",
|
||
|
|
" :param port: The port number of the socket.\n",
|
||
|
|
" :return: None.\n",
|
||
|
|
" \n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" \n",
|
||
|
|
" self.server = server\n",
|
||
|
|
" self.port = port\n",
|
||
|
|
" self.initialized = False\n",
|
||
|
|
" self.conn = None\n",
|
||
|
|
" self.optreader = None\n",
|
||
|
|
" self.optwriter = None\n",
|
||
|
|
" loop = asyncio.get_event_loop()\n",
|
||
|
|
" loop.run_until_complete(self.connect())\n",
|
||
|
|
" \n",
|
||
|
|
" \n",
|
||
|
|
" async def connect(self):\n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" This method connects to Optimizer server using asyncio methods and sets the connection, \n",
|
||
|
|
" stream- reader and writer attributes of the Optimizer class. \n",
|
||
|
|
" \n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" \n",
|
||
|
|
" if self.initialized == True:\n",
|
||
|
|
" raise SecondoAPI_Error('Optimizer already initialised.')\n",
|
||
|
|
" \n",
|
||
|
|
" elif self.initialized == False:\n",
|
||
|
|
" \n",
|
||
|
|
" try:\n",
|
||
|
|
" self.conn = asyncio.open_connection(self.server, int(self.port))\n",
|
||
|
|
" except ConnectionRefusedError as e:\n",
|
||
|
|
" raise SecondoAPI_Error(e.args[1] + ' - Connection to Optimizer server refused.')\n",
|
||
|
|
" except OSError as e:\n",
|
||
|
|
" raise SecondoAPI_Error(e.args[1] + ' - Connection to Optimizer couldnt be stablished.')\n",
|
||
|
|
" \n",
|
||
|
|
" \n",
|
||
|
|
" try:\n",
|
||
|
|
" self.optreader, self.optwriter = await asyncio.wait_for(self.conn, timeout = 10)\n",
|
||
|
|
" except ConnectionRefusedError as e:\n",
|
||
|
|
" raise SecondoAPI_Error(e.args[1] + ' - Connection to Optimizer server refused.')\n",
|
||
|
|
" except OSError as e:\n",
|
||
|
|
" raise SecondoAPI_Error(e.args[1] + ' - Connection to Optimizer couldnt be stablished.') \n",
|
||
|
|
" \n",
|
||
|
|
" \n",
|
||
|
|
" message = \"<who>\\n\"\n",
|
||
|
|
" while True:\n",
|
||
|
|
" self.optwriter.write(message.encode(\"utf-8\"))\n",
|
||
|
|
" await self.optwriter.drain()\n",
|
||
|
|
" \n",
|
||
|
|
" \n",
|
||
|
|
" line = await self.optreader.readline()\n",
|
||
|
|
" \n",
|
||
|
|
" line = line.decode(\"utf-8\")\n",
|
||
|
|
" \n",
|
||
|
|
" if not line:\n",
|
||
|
|
" break\n",
|
||
|
|
" \n",
|
||
|
|
" if line != \"<optimizer>\\n\":\n",
|
||
|
|
" break\n",
|
||
|
|
" \n",
|
||
|
|
" if line == \"<optimizer>\\n\":\n",
|
||
|
|
" self.initialized = True\n",
|
||
|
|
" print(\"Connection to Optimizer stablished...\")\n",
|
||
|
|
" break\n",
|
||
|
|
" \n",
|
||
|
|
" \n",
|
||
|
|
" def close(self):\n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" This method closes the connections to Optimizer server.\n",
|
||
|
|
"\n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" if not self.initialized:\n",
|
||
|
|
" raise SecondoAPI_Error('The connection to Optimizer has not been initialised.')\n",
|
||
|
|
" self.initialized = False\n",
|
||
|
|
" if self.optwriter is not None:\n",
|
||
|
|
" self.optwriter.close()\n",
|
||
|
|
" if self.conn is not None:\n",
|
||
|
|
" self.conn.close()\n",
|
||
|
|
" \n",
|
||
|
|
" \n",
|
||
|
|
" \n",
|
||
|
|
" def get_opt_conn(self):\n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" This method returns the connection attribute of Optimizer object.\n",
|
||
|
|
"\n",
|
||
|
|
" :return: The connection attribute of Optimizer object.\n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" if self.conn is not None:\n",
|
||
|
|
" return self.conn\n",
|
||
|
|
" else:\n",
|
||
|
|
" raise SecondoAPI_Error('The connection to Optimizer is reset.')\n",
|
||
|
|
" \n",
|
||
|
|
" \n",
|
||
|
|
" def get_opt_initialized(self):\n",
|
||
|
|
" if self.initialized:\n",
|
||
|
|
" return True\n",
|
||
|
|
" else:\n",
|
||
|
|
" raise SecondoAPI_Error('Optimizer is already initialised.')\n",
|
||
|
|
" \n",
|
||
|
|
" \n",
|
||
|
|
" def get_opt_streams(self):\n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" This method returns the stream reader/ writer attributes of Optimizer object.\n",
|
||
|
|
" \n",
|
||
|
|
" :return: The stream reader/ writer attributes of Optimizer object.\n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" if self.optreader is not None and self.optwriter is not None:\n",
|
||
|
|
" return self.optreader, self.optwriter\n",
|
||
|
|
" else:\n",
|
||
|
|
" raise SecondoAPI_Error('Connection Error, Streams not connected.')\n",
|
||
|
|
" #return None\n",
|
||
|
|
" \n",
|
||
|
|
" def get_server(self):\n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" This method returns the server attributes of Optimizer object.\n",
|
||
|
|
" \n",
|
||
|
|
" :return: The server attributes of Optimizer object, which consists of an IP-address eg. 127.0.0.0.\n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" return self.server\n",
|
||
|
|
" \n",
|
||
|
|
" \n",
|
||
|
|
" def get_port(self):\n",
|
||
|
|
" \n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" This method returns the port attributes of Optimizer object.\n",
|
||
|
|
" :return: The port attributes of Optimizer object, which consists of an integer number as port eg. 5678.\n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" return self.port\n",
|
||
|
|
" \n",
|
||
|
|
" \n",
|
||
|
|
" def set_opt_initialized(self, val):\n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" This method sets an attribute of Optimizer object that shows if the Optimizer is initialised and running.\n",
|
||
|
|
" :param initialized: A boolean value, when True means the Optimizer is initialised and running.\n",
|
||
|
|
" \"\"\"\n",
|
||
|
|
" self.initialized = val\n",
|
||
|
|
" \n",
|
||
|
|
" "
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"metadata": {
|
||
|
|
"kernelspec": {
|
||
|
|
"display_name": "Python 3",
|
||
|
|
"language": "python",
|
||
|
|
"name": "python3"
|
||
|
|
},
|
||
|
|
"language_info": {
|
||
|
|
"codemirror_mode": {
|
||
|
|
"name": "ipython",
|
||
|
|
"version": 3
|
||
|
|
},
|
||
|
|
"file_extension": ".py",
|
||
|
|
"mimetype": "text/x-python",
|
||
|
|
"name": "python",
|
||
|
|
"nbconvert_exporter": "python",
|
||
|
|
"pygments_lexer": "ipython3",
|
||
|
|
"version": "3.7.4"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"nbformat": 4,
|
||
|
|
"nbformat_minor": 2
|
||
|
|
}
|