{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Command format: restore [database] database_name from \n", "async def restore_command(reader, writer, bin_list, command):\n", " \n", " if reader and writer:\n", " if not command.startswith('(') :\n", " command = '(' + command.strip() + ')'\n", " \n", " CmdNL = NLparse(command, False)\n", " print(CmdNL)\n", " length = len(CmdNL)\n", " if length != 4 and length != 5:\n", " print(\"restore_command(): command lenght wrong!\") \n", " return None\n", " if length == 5: #restore database\n", " if CmdNL[0] != 'restore' or CmdNL[1] != 'database' or CmdNL[3] != 'from':\n", " print(\"restore_command: command wrong\") \n", " return None\n", " name = CmdNL[2]\n", " filename = CmdNL[4]\n", " database = True\n", " if length == 4:\n", " if CmdNL[0] != 'restore' or CmdNL[2] != 'from':\n", " print(\"restore_command: command wrong\") \n", " return None\n", " name = CmdNL[1]\n", " filename = CmdNL[3]\n", " database = False\n", " \n", " typ = AtomType(filename)\n", " if not typ in (\"string\", \"symbol\", \"text\"):\n", " print(\"restore_command: filename wrong\") \n", " return None\n", " \n", " \n", " tag = \"DbRestore\" if database else \"ObjectRestore\"\n", " message = \"<\" + tag + \">\\n\"\n", " message = message.encode()\n", " writer.write(message)\n", " \n", "\n", " message = name + \"\\n\"\n", " print(\"name:\")\n", " print(name)\n", " message = message.encode()\n", " writer.write(message)\n", " \n", " \n", " message = \"\\n\"\n", " message = message.encode()\n", " writer.write(message)\n", " \n", " with open(filename, \"rb\") as f:\n", " #with open(filename, \"rb\", encoding=\"utf8\", errors='ignore') as f: \n", " byte = f.read(1)\n", " size = 0\n", " while byte:\n", " size += 1\n", " byte = f.read(1)\n", " print(str(size)) \n", " \n", " \n", " #flen1 = os.path.getsize(f.name)\n", " #flen = len(file)\n", " message = str(size) + \"\\n\"\n", " message = message.encode()\n", " writer.write(message)\n", " await writer.drain()\n", " \n", " \n", " #reading contents of file via io.stream\n", " stream = open(filename, 'rb')\n", " message = stream.read()\n", " stream.close()\n", " writer.write(message)\n", " \n", " #with open(filename, \"rb\") as f:\n", " #, encoding=\"utf8\", errors='ignore'\n", " #message = f.read()\n", " #writer.write(message)\n", " \n", " message = \"\\n\"\n", " message = message.encode()\n", " #print(message)\n", " writer.write(message)\n", " \n", " message = \"\\n\"\n", " message = message.encode()\n", " writer.write(message)\n", " await writer.drain()\n", " #print(message)\n", " \n", " #### secondoresponse- ReceiveResponse\n", " print(\"calling Receive_Response()\")\n", " resp = await Receive_Response(reader, bin_list)\n", " #print(resp)\n", " if resp[0] == 0:\n", " print('restore was seccessful!')\n", " else:\n", " print('Error occured during restore!')\n", " \n", " return resp\n", " \n", " else:\n", " print(\"reader and writer Sockets null\")\n", " return None\n", " \n", " \n", "\n", "#Command format: save database/ to \n", "async def save_command(reader, writer, bin_list, command):\n", " \n", " if reader and writer:\n", " if not command.startswith('(') :\n", " command = '(' + command.strip() + ')'\n", " \n", " CmdNL = NLparse(command, False)\n", " print(CmdNL)\n", " \n", " \n", " if CmdNL[0] != 'save' or CmdNL[2] != 'to':\n", " print(\"save_command: command wrong\") \n", " return None\n", " obj_name = CmdNL[1]\n", " filename = CmdNL[3]\n", " \n", " typ = AtomType(filename)\n", " if not typ in (\"string\", \"symbol\", \"text\"):\n", " print(\"save_command: filename wrong\") \n", " return None\n", " \n", " if obj_name == \"database\":\n", " writer.write(\"\\n\".encode())\n", " else:\n", " writer.write(\"\\n\".encode())\n", " writer.write((obj_name + \"\\n\").encode())\n", " writer.write(\"\\n\".encode())\n", " \n", " await writer.drain()\n", " resp = await Receive_Response(reader, bin_list)\n", " if resp:\n", " if resp[0] == 0:\n", " stream = open(filename, 'w')\n", " stream.writelines(resp[3])\n", " stream.close()\n", " print('Save Successful!')\n", " return resp\n", " else:\n", " return None\n", " else:\n", " print(\"reader and writer Sockets null\")\n", " return None\n", "\n", "\n", "async def general_command(reader, writer, bin_list, command):\n", " \n", " if reader and writer:\n", " \n", " if 'pysend[' in command.lower():\n", " \n", " async def handle_RecFromSec(reader, writer):\n", " \n", " list = os.listdir(os.getcwd() + '/tmp')\n", " \n", " try:\n", " f = open('tmp/send' + str(len(list) + 1), 'w')\n", " count = 0\n", " while True:\n", " line = await reader.readline()\n", " f.write(line.decode())\n", " \n", " #line = base64.b64decode(line)\n", " #f.write(base64.b64decode(line) + '\\n')\n", " \n", " count +=1\n", " if 'quit' in line.decode():\n", " break\n", " except IOError:\n", " print(\"Error writing to file!\")\n", " finally:\n", " f.close()\n", " \n", " print('Stream of {} Tuples received from SecondoServer.'.format(str(count)))\n", " \n", " \n", " idx1 = command.find('pysend[') + 7\n", " idx2 = command.find(']', int(idx1))\n", " port = int(command[idx1:idx2])\n", " print('port:')\n", " print(port)\n", " loop = asyncio.get_event_loop()\n", " loop.create_task(asyncio.start_server(handle_RecFromSec, '127.0.0.1', port))\n", " #server = loop.create_task(asyncio.start_server(handle_RecFromSec, '127.0.0.1', port))\n", " #server.close()\n", " #loop.run_until_complete(server.wait_closed())\n", " \n", " if 'pyreceive[' in command.lower():\n", " \n", " async def handle_send2Sec(reader, writer):\n", " #try:\n", " #file = input(\"Enter the file name containing the tuples:\\n\")\n", " #except EOFError as e:\n", " #print(\"Error getting the file name!\")\n", " \n", " try:\n", " f = open('tmp/send19', 'r')\n", " lines = f.readlines()\n", " except IOError:\n", " print(\"No such file!\")\n", " finally:\n", " f.close()\n", " \n", " count = 0\n", " for line in lines:\n", " if not line.startswith('(stream') and not line.startswith('quit'):\n", " print (line)\n", " writer.write(line.encode())\n", " await writer.drain()\n", " count +=1\n", " \n", " print('Stream of {} Tuples sent to SecondoServer.'.format(str(count)))\n", " writer.close()\n", " \n", " idx1 = command.find('pyreceive[') + 10\n", " idx2 = command.find(']', int(idx1))\n", " port = int(command[idx1:idx2])\n", " loop = asyncio.get_event_loop()\n", " loop.create_task(asyncio.start_server(handle_send2Sec, '127.0.0.1', port))\n", " #server = loop.create_task(asyncio.start_server(handle_send2Sec, '127.0.0.1', port))\n", " #server.close()\n", " #loop.run_until_complete(server.wait_closed())\n", " \n", " cmdLevel = str(0 if ((command.lstrip()).lower()).startswith('(') else 1)\n", " \n", " message = \"\\n\"\n", " message = message.encode()\n", " writer.write(message)\n", " \n", " cmdLevel += \"\\n\"\n", " message = cmdLevel.encode()\n", " writer.write(message)\n", " \n", " message = command\n", " message = message.encode()\n", " writer.write(message)\n", "\n", " message = \"\\n\\n\"\n", " message = message.encode()\n", " writer.write(message)\n", " await writer.drain()\n", " \n", " print(\"in general_command writing finished, if Pysend and receive start server, run Receive_Response(sec)\")\n", " result = await Receive_Response(reader, bin_list)\n", " print(\"in general_command writing finished Receive_Response(sec)\")\n", " return result\n", " else:\n", " print(\"reader and writer Sockets null\")\n", " return None\n", " \n", " \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 }