{
"info": {
"author": "Wiktor",
"author_email": "wiktor.node@gmail.com",
"bugtrack_url": null,
"classifiers": [
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3"
],
"description": "# Colab\n\nThose simple Node and Python packages with will let you easy run Python for Node\n\n*Builded on top of [zeroRPC](https://www.zerorpc.io/)*\n\nTo run this package corectly you need to use both `node` and `python` versions\n\n## Features\n\n- Call Python functions from node\n- Decorate Python functions to get better results\n\n## Installing\n\nUsing npm:\n\n```bash\n$ npm install node-python-collaboration\n```\n\nUsing pip:\n\n```bash\n$ pip install nodePythonCollaboration\n```\n\n## Quick start \n\nNode client side (with sync setup)\n\n```js\nconst colab = require('node-python-collaboration')\n\n// Configure methods object synchronously\nconst methods = colab([\n ['test_method', false],\n],\n/*options*/\n)\n\n// Call some methods\nmethods.test_method(1)\n .then(res => console.log(res)) // logs 2\n .catch(err => console.log(err)) \n```\n\nNode client side (with async setup)\n\n> **Note** that in async setup client get methods from python server\n\n```js\nconst colab = require('node-python-collaboration')\n\nasync function main() {\n try {\n // Configure methods object asynchronously\n const methods = await colab.asyncInit(/*options*/)\n\n // Call some methods\n console.log(await methods.test_method(1)) // logs 2\n\n } catch(err) {\n console.log(err)\n }\n}\n\nmain()\n```\n\nPython server side\n\n```python\nimport nodePythonCollaboration as colab\n\n# Define main class with methods\nclass main():\n def test_method(self,x):\n return x + 1\n\n# Start Python server with those methods\ncolab.start(main)\n```\n\n## Colab functions\n\n### In Node.js:\n\n
\n\n#### colab(methodsArr, { options })\n\n\nReturns an object with properties that are functions with the names given in method_name\n\n`methodsArr`\n```js\n [\n [method_name, method_type],\n [method_name, method_type]\n ...\n ]\n```\n`options` optional **need to match up with python ones**\n```js\n // those are default options\n {\n port: '4242',\n server: '127.0.0.1' // it is recommended not to change\n }\n```\n`Example`\n```js\n methods = colab([\n ['test_method', false],\n ['test_method_2', false]\n ],{\n port: '4242'\n })\n // Do some stuff with methods\n```\n*OR*\n```js\n methods = colab([\n ['test_method', false],\n ['test_method_2', false]\n ])\n // Do some stuff with methods\n```\n\n
\n\n#### colab.asyncInit({ options })\n\nReturns a promise when promise is resolved promise returns methods\n\nIn async init we don't need to give methodsArr because `colab` asks for available methods our `Python server`\n\n`Example`\n```js\n colab.asyncInit(/*options*/)\n .then((methods) => {\n // Do some stuff with methods\n })\n```\n*better way to do this async/await*\n```js\nasync function main() {\n methods = await colab.asyncInit(/*options*/)\n // Do some stuff with methods\n\n}\n\nmain()\n```\n\n
\n\n#### methods\n\n- Types\n\n - false\n\n *the fastest*\n ```js\n [\n [method_name, false]\n ]\n ```\n This is just normal method nothing special\n\n - complexFile\n\n *slower*\n ```js\n [\n [method_name, 'complexFile']\n ]\n ```\n If you are getting error \"OverflowError: Python int too large to convert to C unsigned long\"
\n then this is the solution **remember that on python side you need to use method decorator**\n\n Basically what it does: python saves the output to the file located in /data folder and then sends the name of the file to node\n so node can read the file and then delete it\n\n - bigComputation\n\n *the slowest*\n ```js\n [\n [method_name, 'bigComputation']\n ]\n ```\n If you are getting error \"HeartbeatError: Lost remote after 10000ms\"
\n then this is the solution **remember that on python side you need to use method decorator**\n\n Basically what it does: python runs your function in another process so it don't bock the main process\n then it saves the output to the file \n\n- Overview\n - returns a promise\n - executes python function `in python`\n - arguments given to the method are passed to the python\n\n- Example\n ```js\n const colab = require('node-python-collaboration')\n colab([\n ['test_method',false]\n ])\n .then(methods => {\n methods.test_method(1)\n .then(response => console.log(response)) //logs 2\n })\n ```\n *better way to do this async/await*\n ```js\n const colab = require('node-python-collaboration')\n\n async function main() {\n methods = await colab.asyncInit()\n console.log(methods.test_method(1)) //logs 2\n }\n main()\n ```\n
\n\n### In Python:\n\n
\n\n#### colab.start(class, optionsArr)\n\nStarts up python server with methods in class default on 127.0.0.1:4242\n\n`class`\n```python\nclass main():\n def test_method(self,x):\n return x + 1\n```\nnow method \"test_method\" is available\n\n`optionsArr` optional\n\n```python\noptionsArr = [ data_folder_path, server_ip_and_port ]\n\n#defining new data flder path\noptionsArr = [ './test/test/data' ]\n\n#defining new server port (data folder path stay default)\noptionsArr = [ None, ':5323']\n\n#defining new server ip and port (data folder path stay default)\noptionsArr = [ None, '0.0.0.0:5323'] # it's very not recommeded to change ip, in most cases it won't run\n```\n\n
\n\n### colab decorators\n\nThey are described above in node section\n- @colab.complexFile\n- @colab.bigComputation\n\n`Example`\n```python\nimport nodePythonCollaboration as colab\nfrom math import factorial\nfrom time import sleep\n\nclass main():\n\n def Example(self, x, y):\n return x + y # Just simple computation\n\n @colab.complexFile\n def Example_complexFile(self, x):\n return factorial(x) # In most cases that will be very big number\n\n @colab.bigComputation\n def Example_bigComputation(self, x, y):\n for i in range(11):\n print(i + 1)\n sleep(1) # Simulating big computation\n return x + y\n\n\ncolab.start(main)\n```\n\n### Node and Python:\n\n`Example`\n\n*server code*\n```python\nimport nodePythonCollaboration as colab # import colab\nfrom math import factorial\nfrom time import sleep\n\nclass main(): # define methods\n\n def Example(self, x, y):\n return x + y \n\n @colab.complexFile\n def Example_complexFile(self, x):\n return factorial(x)\n\n @colab.bigComputation\n def Example_bigComputation(self, x, y):\n for i in range(11):\n print(i + 1)\n sleep(1)\n return x + y\n\n\ncolab.start(main) # start server with default options\n```\n\n*client code*\n```js\nconst colab = require('node-python-collaboration') // import colab\n\nasync function main() {\n try {\n // Configure methods object asynchronously with default options\n const methods = await colab.asyncInit()\n\n console.log(await methods.Example(2, 2)) //logs 4\n console.log(await methods.Example_complexFile(10000)) //logs 2846259680917054518906413212119868890148051401702799230794179994274411340003764443772990786757784775815884062142317528830042339940...\n console.log(await methods.Example_bigComputation(2, 2)) //after 11s logs 4\n\n } catch(err) {\n console.log(err)\n }\n}\n\nmain()\n```\n\n\n",
"description_content_type": "text/markdown",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/wiwi1212/node-python-collaboration",
"keywords": "",
"license": "",
"maintainer": "",
"maintainer_email": "",
"name": "nodePythonCollaboration",
"package_url": "https://pypi.org/project/nodePythonCollaboration/",
"platform": "",
"project_url": "https://pypi.org/project/nodePythonCollaboration/",
"project_urls": {
"Homepage": "https://github.com/wiwi1212/node-python-collaboration"
},
"release_url": "https://pypi.org/project/nodePythonCollaboration/0.0.3/",
"requires_dist": [
"zerorpc"
],
"requires_python": "",
"summary": "Those simple Node and Python packages with will let you easy run Python for Node",
"version": "0.0.3"
},
"last_serial": 5665301,
"releases": {
"0.0.1": [
{
"comment_text": "",
"digests": {
"md5": "d52f3765a7b22393c80d2b7c3de0bbb5",
"sha256": "d03f2d4497568624be3455324e9ed77708799ded66400fe70545cf28a32a9b4d"
},
"downloads": -1,
"filename": "nodePythonCollaboration-0.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d52f3765a7b22393c80d2b7c3de0bbb5",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 5717,
"upload_time": "2019-08-11T18:01:47",
"url": "https://files.pythonhosted.org/packages/30/fc/a7fb4690ebcd4e55b2efbecab11da7d06a8155f5361a2090e08bb5639913/nodePythonCollaboration-0.0.1-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "b4b9232cdc6e446edd1190ceff382960",
"sha256": "09900229379ae809570493351d0b719284522babb4e724a2223f9a297fa60f7b"
},
"downloads": -1,
"filename": "nodePythonCollaboration-0.0.1.tar.gz",
"has_sig": false,
"md5_digest": "b4b9232cdc6e446edd1190ceff382960",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 4983,
"upload_time": "2019-08-11T18:01:49",
"url": "https://files.pythonhosted.org/packages/1c/c1/94d72a08a551da1a5850e6a8aec410d779603983e1452fafcd72723f2c76/nodePythonCollaboration-0.0.1.tar.gz"
}
],
"0.0.2": [
{
"comment_text": "",
"digests": {
"md5": "e0dd4c083a12d770a4370796c80d21b6",
"sha256": "0fc736a9db8a53bd1032ec6778ffc85c2c938d56dddb839db5ba5f0b20e8089d"
},
"downloads": -1,
"filename": "nodePythonCollaboration-0.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e0dd4c083a12d770a4370796c80d21b6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 5718,
"upload_time": "2019-08-11T18:14:56",
"url": "https://files.pythonhosted.org/packages/13/ec/183223679af6ca322d0deb7ccb9980986a071149a814bb8fcac01114cf51/nodePythonCollaboration-0.0.2-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "9d705816848365efcbea0cceaf162eac",
"sha256": "873fe8157dc72b1ce0496846ef34a2b1d64d98f70305aaae3cfe52676cfae580"
},
"downloads": -1,
"filename": "nodePythonCollaboration-0.0.2.tar.gz",
"has_sig": false,
"md5_digest": "9d705816848365efcbea0cceaf162eac",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 4985,
"upload_time": "2019-08-11T18:14:58",
"url": "https://files.pythonhosted.org/packages/9a/4f/3ee14e6ff693d6698814a65d325ba083e249fb7458dfa44ba9a310c310d3/nodePythonCollaboration-0.0.2.tar.gz"
}
],
"0.0.3": [
{
"comment_text": "",
"digests": {
"md5": "b5b49a85fca5bc5a25d8852c8592a1d7",
"sha256": "46c50c0de111141a1a6bf8dbf722794979041a25fd69ec6dfaea592dbcaf1865"
},
"downloads": -1,
"filename": "nodePythonCollaboration-0.0.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b5b49a85fca5bc5a25d8852c8592a1d7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 5712,
"upload_time": "2019-08-12T09:55:45",
"url": "https://files.pythonhosted.org/packages/2e/24/59f6fad50f0ba7ad59234a7a599c1b8353d147f8c7333add0280a6e0ac03/nodePythonCollaboration-0.0.3-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "e81946c98fca5500928005583b4f8e71",
"sha256": "e8a41d6db34541c6b01e4b00dbcce7acbd1d2c016eb5758758a0b32162c9264e"
},
"downloads": -1,
"filename": "nodePythonCollaboration-0.0.3.tar.gz",
"has_sig": false,
"md5_digest": "e81946c98fca5500928005583b4f8e71",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 4971,
"upload_time": "2019-08-12T09:55:47",
"url": "https://files.pythonhosted.org/packages/6f/8e/9019c3973150fcbdfe6e9ed41d9e3d839b620c59433debb4fea422adefe1/nodePythonCollaboration-0.0.3.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "b5b49a85fca5bc5a25d8852c8592a1d7",
"sha256": "46c50c0de111141a1a6bf8dbf722794979041a25fd69ec6dfaea592dbcaf1865"
},
"downloads": -1,
"filename": "nodePythonCollaboration-0.0.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b5b49a85fca5bc5a25d8852c8592a1d7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 5712,
"upload_time": "2019-08-12T09:55:45",
"url": "https://files.pythonhosted.org/packages/2e/24/59f6fad50f0ba7ad59234a7a599c1b8353d147f8c7333add0280a6e0ac03/nodePythonCollaboration-0.0.3-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "e81946c98fca5500928005583b4f8e71",
"sha256": "e8a41d6db34541c6b01e4b00dbcce7acbd1d2c016eb5758758a0b32162c9264e"
},
"downloads": -1,
"filename": "nodePythonCollaboration-0.0.3.tar.gz",
"has_sig": false,
"md5_digest": "e81946c98fca5500928005583b4f8e71",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 4971,
"upload_time": "2019-08-12T09:55:47",
"url": "https://files.pythonhosted.org/packages/6f/8e/9019c3973150fcbdfe6e9ed41d9e3d839b620c59433debb4fea422adefe1/nodePythonCollaboration-0.0.3.tar.gz"
}
]
}