Skip to content

Commit

Permalink
Refactor services to be set via list in constructor
Browse files Browse the repository at this point in the history
  • Loading branch information
iamtrask committed Jul 17, 2020
1 parent 81758ee commit 361e225
Show file tree
Hide file tree
Showing 25 changed files with 187 additions and 76 deletions.
69 changes: 56 additions & 13 deletions examples/Dev.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -14,14 +14,44 @@
"from syft.core.nodes.device.device import Device\n",
"from syft.core.nodes.vm.vm import VirtualMachine\n",
"\n",
"from syft.core.message.repr_message import ReprMessage\n",
"from syft.core.nodes.vm.message.repr_message import ReprMessage\n",
"\n",
"from syft.core.io.route import route"
]
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"from syft.common.message import AbstractMessage"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[syft.core.message.syft_message.SyftMessage,\n",
" syft.core.message.abstract.vm.AbstractVirtualMachineMessage]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"AbstractMessage.__subclasses__()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -30,7 +60,7 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -40,7 +70,7 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -49,28 +79,41 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": []
"outputs": [
{
"data": {
"text/plain": [
"syft.core.nodes.vm.client.VirtualMachineClient"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(vm)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 6,
"metadata": {},
"outputs": [
{
"ename": "KeyError",
"evalue": "\"The worker <syft.common.id.UID object at 0x7f8bb85f9f10> of type <class 'syft.core.nodes.device.device.Device'> cannot process messages of type <class 'syft.core.message.repr_message.ReprMessage'> because there is no service running to process it.\"",
"evalue": "\"The worker <syft.common.id.UID object at 0x7fe5484130d0> of type <class 'syft.core.nodes.device.device.Device'> cannot process messages of type <class 'syft.core.nodes.vm.message.repr_message.ReprMessage'> because there is no service running to process it.\"",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m~/Dropbox/Laboratory/openmined/PySyft/PySyft/src/syft/core/nodes/abstract/worker.py\u001b[0m in \u001b[0;36mrecv_msg\u001b[0;34m(self, msg)\u001b[0m\n\u001b[1;32m 45\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 46\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmsg_router\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprocess\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mworker\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmsg\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 47\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mKeyError\u001b[0m: <class 'syft.core.message.repr_message.ReprMessage'>",
"\u001b[0;31mKeyError\u001b[0m: <class 'syft.core.nodes.vm.message.repr_message.ReprMessage'>",
"\nDuring handling of the above exception, another exception occurred:\n",
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-7-716aa7ffb1fb>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mcpu1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend_msg\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m<ipython-input-6-716aa7ffb1fb>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mcpu1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend_msg\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m~/Dropbox/Laboratory/openmined/PySyft/PySyft/src/syft/typecheck/typecheck.py\u001b[0m in \u001b[0;36mdecorator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 74\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdecorator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 75\u001b[0m \u001b[0mcheck_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 76\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mtypechecked\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdecorated\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 77\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 78\u001b[0m \u001b[0mdecorator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__qualname__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdecorated\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__qualname__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/opt/anaconda3/envs/syft/lib/python3.8/site-packages/typeguard/__init__.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 838\u001b[0m \u001b[0mmemo\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_CallMemo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpython_func\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_localns\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 839\u001b[0m \u001b[0mcheck_argument_types\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmemo\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 840\u001b[0;31m \u001b[0mretval\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 841\u001b[0m \u001b[0mcheck_return_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mretval\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmemo\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 842\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/Dropbox/Laboratory/openmined/PySyft/PySyft/src/syft/core/nodes/abstract/client.py\u001b[0m in \u001b[0;36msend_msg\u001b[0;34m(self, msg)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mtype_hints\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0msend_msg\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmsg\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mSyftMessage\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mSyftMessage\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconnection\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend_msg\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 16\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mtype_hints\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
Expand All @@ -83,7 +126,7 @@
"\u001b[0;32m~/Dropbox/Laboratory/openmined/PySyft/PySyft/src/syft/typecheck/typecheck.py\u001b[0m in \u001b[0;36mdecorator\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 74\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdecorator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 75\u001b[0m \u001b[0mcheck_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 76\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mtypechecked\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdecorated\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 77\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 78\u001b[0m \u001b[0mdecorator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__qualname__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdecorated\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__qualname__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/opt/anaconda3/envs/syft/lib/python3.8/site-packages/typeguard/__init__.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 838\u001b[0m \u001b[0mmemo\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_CallMemo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpython_func\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_localns\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 839\u001b[0m \u001b[0mcheck_argument_types\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmemo\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 840\u001b[0;31m \u001b[0mretval\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 841\u001b[0m \u001b[0mcheck_return_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mretval\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmemo\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 842\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/Dropbox/Laboratory/openmined/PySyft/PySyft/src/syft/core/nodes/abstract/worker.py\u001b[0m in \u001b[0;36mrecv_msg\u001b[0;34m(self, msg)\u001b[0m\n\u001b[1;32m 47\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmsg_router\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 49\u001b[0;31m raise KeyError(\n\u001b[0m\u001b[1;32m 50\u001b[0m \u001b[0;34mf\"The worker {self.id} of type {type(self)} cannot process messages of type \"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34mf\"{type(msg)} because there is no service running to process it.\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mKeyError\u001b[0m: \"The worker <syft.common.id.UID object at 0x7f8bb85f9f10> of type <class 'syft.core.nodes.device.device.Device'> cannot process messages of type <class 'syft.core.message.repr_message.ReprMessage'> because there is no service running to process it.\""
"\u001b[0;31mKeyError\u001b[0m: \"The worker <syft.common.id.UID object at 0x7fe5484130d0> of type <class 'syft.core.nodes.device.device.Device'> cannot process messages of type <class 'syft.core.nodes.vm.message.repr_message.ReprMessage'> because there is no service running to process it.\""
]
}
],
Expand Down
2 changes: 2 additions & 0 deletions src/syft/common/message.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class AbstractMessage:
""""""
2 changes: 0 additions & 2 deletions src/syft/core/message/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,3 @@
from .run_class_method_message import RunClassMethodMessage
from .run_function_or_constructor_message import RunFunctionOrConstructorMessage
from .save_object_message import SaveObjectMessage
from .repr_message import ReprMessage
from .repr_message import ReprReplyMessage
Empty file.
5 changes: 5 additions & 0 deletions src/syft/core/message/abstract/vm.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from ....common.message import AbstractMessage


class AbstractVirtualMachineMessage(AbstractMessage):
""""""
5 changes: 4 additions & 1 deletion src/syft/core/message/syft_message.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
class SyftMessage:
from ...common.message import AbstractMessage


class SyftMessage(AbstractMessage):
def __init__(self, route, msg_id=None):
self.route = route
self.msg_id = msg_id
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
from __future__ import annotations
from ..... import type_hints

from ....message import SyftMessage

from .....common import AbstractWorker

from .... import type_hints
from ...message import SyftMessage
from ....common import AbstractWorker
from typing import List

class WorkerService:
@staticmethod
Expand All @@ -14,5 +12,5 @@ def process(worker: AbstractWorker, msg: SyftMessage) -> object:

@staticmethod
@type_hints
def message_type_handler() -> SyftMessage:
def message_handler_types() -> List[type]:
raise NotImplementedError
18 changes: 16 additions & 2 deletions src/syft/core/nodes/abstract/worker.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,12 @@ def __init__(self, name: str = None):
self.store = ObjectStore()
self.msg_router = {}

self._register_services()
self.services_registered = False


@type_hints
def recv_msg(self, msg: SyftMessage) -> SyftMessage:

try:
return self.msg_router[type(msg)].process(worker=self, msg=msg)
except KeyError as e:
Expand All @@ -51,8 +53,20 @@ def recv_msg(self, msg: SyftMessage) -> SyftMessage:
+ f"{type(msg)} because there is no service running to process it."
)
else:

if not self.services_registered:
raise Exception("Please call _register_services on worker. This seems to have"
"been skipped for some reason.")

raise e


@type_hints
def _set_services(self, services):
self.services = services

@type_hints
def _register_services(self) -> None:
raise NotImplementedError

for s in self.services:
self.msg_router[s.message_handler_types()] = s()
10 changes: 5 additions & 5 deletions src/syft/core/nodes/device/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ def __init__(self, name: str):
# a lookup table to lookup VMs by name instead of ID
self.vm_name2id = {}

services = list()
# TODO: populate list of services

self._set_services(services=services)

def create_vm(self, name: str) -> VirtualMachineClient:
vm = VirtualMachine(name=name)

Expand All @@ -35,9 +40,4 @@ def get_client(self) -> DeviceClient:
conn_client = create_virtual_connection(worker=self)
return DeviceClient(device_id=self.id, connection=conn_client)

@type_hints
def _register_services(self) -> None:
services = list()

for s in services:
self.msg_router[s.message_handler_type()] = s()
18 changes: 18 additions & 0 deletions src/syft/core/nodes/device/service/vm_service.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from __future__ import annotations

from ..... import type_hints
from ...abstract.service import WorkerService
from ....message.abstract.vm import AbstractVirtualMachineMessage
from ..device import Device


class VMService(WorkerService):
@staticmethod
@type_hints
def process(device: Device, msg: AbstractVirtualMachineMessage) -> AbstractVirtualMachineMessage:
return device.vms[msg.route.pri_route.vm].recv_msg(msg)

@staticmethod
@type_hints
def message_type_handler() -> type:
return AbstractVirtualMachineMessage
Empty file.
Empty file.
2 changes: 1 addition & 1 deletion src/syft/core/nodes/vm/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
"""

from .service.worker_service import WorkerService
from ..abstract.service import WorkerService
from typing import Dict

message_service_mapping: Dict[str, WorkerService] = {}
Expand Down
Empty file.
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
from .syft_message import SyftMessage
from ...typecheck import type_hints
from .vm_message import VirtualMachineMessage
from .vm_message import VirtualMachineReplyMessage
from .....typecheck import type_hints
from typing import final


class ReprMessage(SyftMessage):
@final
class ReprMessage(VirtualMachineMessage):
def __init__(self, route, msg_id=None):
super().__init__(route=route, msg_id=msg_id)


class ReprReplyMessage(SyftMessage):
@final
class ReprReplyMessage(VirtualMachineReplyMessage):
def __init__(self, value, route, msg_id=None):
super().__init__(route=route, msg_id=msg_id)
self.value = value
Expand Down
21 changes: 21 additions & 0 deletions src/syft/core/nodes/vm/message/vm_message.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from ....message.syft_message import SyftMessage
from .....typecheck import type_hints
from ....message.abstract.vm import AbstractVirtualMachineMessage
from typing import final


@final
class VirtualMachineMessage(SyftMessage, AbstractVirtualMachineMessage):
def __init__(self, route, msg_id=None):
super().__init__(route=route, msg_id=msg_id)


@final
class VirtualMachineReplyMessage(SyftMessage, AbstractVirtualMachineMessage):
def __init__(self, value, route, msg_id=None):
super().__init__(route=route, msg_id=msg_id)
self.value = value

@type_hints
def __repr__(self) -> str:
return f"VirtualMachineReplyMessage:{self.value}"
1 change: 0 additions & 1 deletion src/syft/core/nodes/vm/service/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,4 @@
from . import run_class_service
from . import run_function_or_constructor_service
from . import save_object_service
from . import worker_service
from . import repr_service

0 comments on commit 361e225

Please sign in to comment.