{ "info": { "author": "Shawn Wilkinson", "author_email": "shawn+dataserv@storj.io", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "########\ndataserv\n########\n\n\n|BuildLink|_ |CoverageLink|_ |LicenseLink|_ |IssuesLink|_\n\n\n.. |BuildLink| image:: https://travis-ci.org/Storj/dataserv.svg?branch=master\n.. _BuildLink: https://travis-ci.org/Storj/dataserv\n\n.. |CoverageLink| image:: https://coveralls.io/repos/Storj/dataserv/badge.svg\n.. _CoverageLink: https://coveralls.io/r/Storj/dataserv\n\n.. |LicenseLink| image:: https://img.shields.io/badge/license-MIT-blue.svg\n.. _LicenseLink: https://raw.githubusercontent.com/Storj/dataserv\n\n.. |IssuesLink| image:: https://img.shields.io/github/issues/Storj/dataserv.svg\n.. _IssuesLink: https://github.com/Storj/dataserv\n\n\n#############\nWhat is this?\n#############\n\nFederated server for getting, pushing, and auditing data on untrusted nodes. Primarily used\nfor capacity tests for `Test Group B `_ , as well as federated\nserver based file transfer.\n\n#####\nSetup\n#####\n\nHow to install and run on a clean install of Ubuntu 14.04 (LTS):\n\n::\n\n # install dependencies\n apt-get update\n apt-get upgrade\n apt-get install -y postgresql postgresql-contrib authbind\n apt-get install -y python-virtualenv screen git python3 libpq-dev python3-dev\n\n # clone project\n git clone https://github.com/Storj/dataserv\n cd dataserv\n\n # setup virtualenv and install required python packages\n virtualenv -p /usr/bin/python3 env\n source env/bin/activate\n pip install -r requirements.txt\n\n # init db and start server\n cd dataserv\n python app.py db upgrade\n python app.py runserver\n curl http://127.0.0.1:5000/api/online/json\n\n\n\n###\nAPI\n###\n\n\nRegistration\n************\n\nRegistration of farmers into the database. All farmers must register with the node before they\ncan perform any other actions.\n\n::\n\n GET /api/register//<(optional)payout address>\n\nSuccess Example:\n\n::\n\n GET /api/register/12guBkWfVjiqBnu5yRdTseBB7wBM5WSWnm\n RESPONSE:\n Status Code: 200\n Text: {\"last_seen\": 0, \"btc_addr\": \"12guBkWfVjiqBnu5yRdTseBB7wBM5WSWnm, \"height\": 0, \"payout_addr\": \"12guBkWfVjiqBnu5yRdTseBB7wBM5WSWnm\"}\n\n GET /api/register/12guBkWfVjiqBnu5yRdTseBB7wBM5WSWnm/1BZR9GHs9a1bBfh6cwnDtvq6GEvNwVWxFa\n RESPONSE:\n Status Code: 200\n Text: {\"last_seen\": 0, \"btc_addr\": \"12guBkWfVjiqBnu5yRdTseBB7wBM5WSWnm\", \"height\": 0, \"payout_addr\": \"1BZR9GHs9a1bBfh6cwnDtvq6GEvNwVWxFa\"}\n\n\nFail Examples:\n\n::\n\n GET /api/register/notvalidaddress\n RESPONSE:\n Status Code: 400\n Text: Registration Failed: Invalid BTC Address.\n\n GET /api/register/12guBkWfVjiqBnu5yRdTseBB7wBM5WSWnm\n RESPONSE:\n Status Code: 409\n Text: Registration failed: Address already is registered.\n\n GET /api/register/1BZR9GHs9a1bBfh6cwnDtvq6GEvNwVWxFa\n RESPONSE:\n Status Code: 401\n Text: Registration failed: Invalid authentication headers.\n\nPing-Pong\n*********\n\nThe farmer must maintain a rudimentary keep-alive with the node. This way we know if the farmer\nhas gone offline, and that we should not issue more challenges.\n\n::\n\n GET /api/ping/\n\nSuccess Example:\n\n::\n\n GET /api/ping/191GVvAaTRxLmz3rW3nU5jAV1rF186VxQc\n RESPONSE:\n Status Code: 200\n Text: Ping accepted.\n\nFail Examples:\n\n::\n\n GET /api/ping/notvalidaddress\n RESPONSE:\n Status Code: 400\n Text: Ping failed: Invalid Bitcoin address.\n\n GET /api/ping/1EawBV7n7f2wDbgxJfNzo1eHyQ9Gj77oJd\n RESPONSE:\n Status Code: 404\n Text: Ping Failed: Farmer not found.\n\nOnline Status - Readable\n************************\n\nThis API call was built to be human readable rather than machine readable. We get a simple\nlist of the all the farmers, their addresses, and their advertised heights. All of this is ordered by height.\nWe only display farmers that have done a ping in the last `online_time` minutes, which by default\nis 15 minutes.\n\n::\n\n GET /api/online\n\nSuccess Example:\n\n::\n\n GET /api/online\n RESPONSE:\n Status Code: 200\n Text:\n 18RZNu2nxTdeNyuDCwAMq8aBpgC3FFERPp | Last Seen: 3 second(s) | Height: 7634\n 137x69jwmcyy4mYCBtQUVoxa21p9Fxyss5 | Last Seen: 7 second(s) | Height: 6234\n 14wLMb2A9APqrdXJhTQArYLyivmEAf7Y1r | Last Seen: 10 second(s) | Height: 431\n 1CgLoZT1ZuSHPBp3H4rLTXJvEUDV3kK7QK | Last Seen: 13 second(s) | Height: 245\n 1QACy1Tx5JFzGDyPd8J3oU8SrjhkZkru4H | Last Seen: 14 second(s) | Height: 88\n 1NeV1z5BMmFpCXgotwVeZjuN5k124W76MA | Last Seen: 14 second(s) | Height: 10\n\nOnline Status - JSON\n********************\n\nThis API call was built to be human readable rather than machine readable. We get a simple\nlist of the all the farmers, their addresses, and their advertised heights. All of this is ordered by height.\nWe only display farmers that have done a ping in the last `online_time` minutes, which by default\nis 15 minutes. Last seen is the amount of seconds since we have last seen an API call from the farmer.\n\n::\n\n GET /api/online/json\n\nSuccess Example:\n\n::\n\n GET /api/online\n RESPONSE:\n Status Code: 200\n Text:\n {\n \"farmers\": [\n {\n \"btc_addr\": \"1JdEaubcd36ufmT64drdVsGu5SN65A3Z1L\",\n \"height\": 0,\n \"last_seen\": 30\n },\n {\n \"btc_addr\": \"1JdEaubcM36ufmT64drdVsGu5SN65A3Z1A\",\n \"height\": 0,\n \"last_seen\": 2\n }\n ]\n }\n\nAddress\n*******\nDisplay the unique address used for authentication for the node.\n\n::\n\n GET /api/online\n RESPONSE:\n {\n \"address\": \"16ZcxFDdkVJR1P8GMNmWFyhS4EKrRMsWNG\"\n }\n\nTotal Bytes\n***********\n\nGet the total number of terabytes currently being managed by the node.\n\n::\n\n GET /api/total\n\nSuccess Example:\n\n::\n\n GET /api/total\n RESPONSE:\n Status Code: 200\n Text: 35 TB\n\nAdvertise Height\n****************\n\nAllows the user to let the node know how much space they have generated via the client side generation scheme.\n\n::\n\n GET /api/height//\n\nSuccess Example:\n\n::\n\n GET /api/height/191GVvAaTRxLmz3rW3nU5jAV1rF186VxQc/50\n RESPONSE:\n Status Code: 200\n Text: Height accepted.\n\nFail Examples:\n\n::\n\n GET /api/height/notvalidaddress/50\n RESPONSE:\n Status Code: 400\n Text: Ping Failed: Invalid Bitcoin address.\n\n GET /api/height/1EawBV7n7f2wDbgxJfNzo1eHyQ9Gj77oJd/50\n RESPONSE:\n Status Code: 404\n Text: Ping Failed: Farmer not found.", "description_content_type": null, "docs_url": null, "download_url": "https://pypi.python.org/packages/3.4/d/dataserv/dataserv-2.2.13-py2.py3-none-any.whl", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://storj.io", "keywords": "", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "dataserv", "package_url": "https://pypi.org/project/dataserv/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/dataserv/", "project_urls": { "Download": "https://pypi.python.org/packages/3.4/d/dataserv/dataserv-2.2.13-py2.py3-none-any.whl", "Homepage": "http://storj.io" }, "release_url": "https://pypi.org/project/dataserv/2.2.13/", "requires_dist": null, "requires_python": null, "summary": "Federated server for getting, pushing, and auditing data on untrusted nodes.", "version": "2.2.13" }, "last_serial": 1727115, "releases": { "1.0.0": [], "1.0.1": [ { "comment_text": "", "digests": { "md5": "178f4b0c95ade3584aabaf0ccb03152f", "sha256": "bb6ccda2182f647d57e78932ff0d42bb074048ba279adcfb24b59335a3188a9f" }, "downloads": -1, "filename": "dataserv-1.0.1.tar.gz", "has_sig": false, "md5_digest": "178f4b0c95ade3584aabaf0ccb03152f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11966, "upload_time": "2015-07-20T17:32:14", "url": "https://files.pythonhosted.org/packages/96/5d/ba4cfe44e72b6ebee76eb204725010dcd8eed65185740a803a021613e3a5/dataserv-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "954344e6425128f967b38d83e5831ee0", "sha256": "d7b6d38e4f49759bcd802985cda1b0bb3ccad714c5d274bd84cf8ae30f6a2fe0" }, "downloads": -1, "filename": "dataserv-1.0.2.tar.gz", "has_sig": false, "md5_digest": "954344e6425128f967b38d83e5831ee0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7901, "upload_time": "2015-08-07T16:02:03", "url": "https://files.pythonhosted.org/packages/05/32/1967f4529d6cf728fe429d3a5231a4e0a04aceeb6f4e2af71ecf89dbd33f/dataserv-1.0.2.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "098f7797206355c7788d339e8d85b7a1", "sha256": "243769777c0c54fd52f7864a7633fd33f49d34af757bef91f00ce66e316f1154" }, "downloads": -1, "filename": "dataserv-2.0.0.tar.gz", "has_sig": false, "md5_digest": "098f7797206355c7788d339e8d85b7a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10352, "upload_time": "2015-08-20T19:20:27", "url": "https://files.pythonhosted.org/packages/9e/eb/0eb2f68137a9e7c256ff2bdeb1c86aed394d13e46f45b289aa2f0be8e4da/dataserv-2.0.0.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "45d3ecf7f8b1aa138694a1d2b49a1379", "sha256": "5a3592f3723f8d3fb125e192dcea3a5c0cf7732405ba5829496a3381a81a50d4" }, "downloads": -1, "filename": "dataserv-2.1.0.tar.gz", "has_sig": false, "md5_digest": "45d3ecf7f8b1aa138694a1d2b49a1379", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10364, "upload_time": "2015-08-22T12:08:21", "url": "https://files.pythonhosted.org/packages/6b/09/93108ee192b83c432454f73e258c90e4a436ce03fde2e63a95a6789db48a/dataserv-2.1.0.tar.gz" } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "ccae3db9efa14bd67f65572f0989557f", "sha256": "46e7a488cc247adf128d9c1d6eb13b3809b032fc2c0afcc083581ba8db08224a" }, "downloads": -1, "filename": "dataserv-2.1.1.tar.gz", "has_sig": false, "md5_digest": "ccae3db9efa14bd67f65572f0989557f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10380, "upload_time": "2015-08-24T00:40:15", "url": "https://files.pythonhosted.org/packages/e0/20/75809caa3393e3d1a19a60dad1c9dcac15de38d6dc143fc28d43738596d5/dataserv-2.1.1.tar.gz" } ], "2.2.0": [ { "comment_text": "", "digests": { "md5": "953aaccea92ea2f21a37c332053f52ce", "sha256": "64cfca9e172d6831513b8505ee9def4c88f396117ce6d1b32b12116271b31c50" }, "downloads": -1, "filename": "dataserv-2.2.0.tar.gz", "has_sig": false, "md5_digest": "953aaccea92ea2f21a37c332053f52ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10523, "upload_time": "2015-08-24T17:05:43", "url": "https://files.pythonhosted.org/packages/52/e6/bda8765763bd38171b6bd506d94a736518044f95c33eb12f12f914cb69c0/dataserv-2.2.0.tar.gz" } ], "2.2.1": [ { "comment_text": "", "digests": { "md5": "dcaefc4c16355875433cee500adb0136", "sha256": "115f9763900f067ab5fbfc72942d3c68058a08c652dcfec8dceeaf0f0a9182db" }, "downloads": -1, "filename": "dataserv-2.2.1.tar.gz", "has_sig": false, "md5_digest": "dcaefc4c16355875433cee500adb0136", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10537, "upload_time": "2015-08-24T18:06:42", "url": "https://files.pythonhosted.org/packages/8b/f4/c61823dc361be9c41fd1b880496bfcb901a6d65792cde93dd1226312ff33/dataserv-2.2.1.tar.gz" } ], "2.2.10": [ { "comment_text": "", "digests": { "md5": "d2b88d2cb759aff28b4f4a6d3c1d2b1b", "sha256": "bb1c62a928ee0f7576fd14c3094f1fa725a2b463a8b55ca60ab3515f11f79829" }, "downloads": -1, "filename": "dataserv-2.2.10.tar.gz", "has_sig": false, "md5_digest": "d2b88d2cb759aff28b4f4a6d3c1d2b1b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13884, "upload_time": "2015-09-17T18:02:13", "url": "https://files.pythonhosted.org/packages/9e/19/8ef04c7c76179be72e844bf6a17ae06f072c9b46940feacb45be98070a05/dataserv-2.2.10.tar.gz" } ], "2.2.11": [ { "comment_text": "", "digests": { "md5": "f7f5cae532e759133f95102af35dd4d7", "sha256": "036ce5f4aac1a3c606c21bd27afbbc3a10c40966429feb2d3c8d9862a26f4ab8" }, "downloads": -1, "filename": "dataserv-2.2.11-py3-none-any.whl", "has_sig": false, "md5_digest": "f7f5cae532e759133f95102af35dd4d7", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 19929, "upload_time": "2015-09-17T18:23:18", "url": "https://files.pythonhosted.org/packages/e9/81/74d59a6589d0126e01fdf81b4fd19a079f93229bbf652df8fdb2d21029b2/dataserv-2.2.11-py3-none-any.whl" } ], "2.2.12": [ { "comment_text": "", "digests": { "md5": "f10bd882357481c47f07a55bac29c867", "sha256": "c5d64b9ecb3084ea2de97caeacfd2181dfdbede367cf0e5a694cc92fcbbede3d" }, "downloads": -1, "filename": "dataserv-2.2.12-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f10bd882357481c47f07a55bac29c867", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 19954, "upload_time": "2015-09-17T18:33:32", "url": "https://files.pythonhosted.org/packages/47/58/e4f9ac24be3e8c3d7fa695ec8b3a9ce6c6bd3471cf6cbfbf1bd89ef84f8f/dataserv-2.2.12-py2.py3-none-any.whl" } ], "2.2.13": [ { "comment_text": "", "digests": { "md5": "7bbcf27b97b1aad37ccb470e09c2d6c0", "sha256": "91aab535bdcd91bc37a063482e801d7b7f01aa1209bf80bcbaa4e11b2564f81d" }, "downloads": -1, "filename": "dataserv-2.2.13-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7bbcf27b97b1aad37ccb470e09c2d6c0", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 19954, "upload_time": "2015-09-17T18:37:28", "url": "https://files.pythonhosted.org/packages/3c/88/df20bbed46a20b1f03db6929bd81b1b23325ac9eab5c861b33a69e6fd4e7/dataserv-2.2.13-py2.py3-none-any.whl" } ], "2.2.2": [ { "comment_text": "", "digests": { "md5": "92a97a5d9294f3c215b969484decf97a", "sha256": "a7f95001d8b65e6250272a99b609b5c943c7733ee063614a93094c1fd415b45d" }, "downloads": -1, "filename": "dataserv-2.2.2.tar.gz", "has_sig": false, "md5_digest": "92a97a5d9294f3c215b969484decf97a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12817, "upload_time": "2015-09-03T16:09:33", "url": "https://files.pythonhosted.org/packages/48/7b/b1d095496256d1921ab838d295292310430e210698992d40e365f36359c6/dataserv-2.2.2.tar.gz" } ], "2.2.5": [ { "comment_text": "", "digests": { "md5": "7e198737d23d2cc3561579494d9b801e", "sha256": "43f366c10ffade1352120c69c3f582f622fce0fac11c40d1322a36d649028972" }, "downloads": -1, "filename": "dataserv-2.2.5.tar.gz", "has_sig": false, "md5_digest": "7e198737d23d2cc3561579494d9b801e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13776, "upload_time": "2015-09-16T19:28:52", "url": "https://files.pythonhosted.org/packages/07/d0/6f673dbb0626fbabfa07697f1cc6c22be2d469811bcdee88b7ddf73561dd/dataserv-2.2.5.tar.gz" } ], "2.2.6": [ { "comment_text": "", "digests": { "md5": "3956d2beb13ff9ab1e15390df41db331", "sha256": "7feaa6a54c04beef5dd5003e9947beb3a2155aa6265bdf96481e20baf3cf54e8" }, "downloads": -1, "filename": "dataserv-2.2.6.tar.gz", "has_sig": false, "md5_digest": "3956d2beb13ff9ab1e15390df41db331", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13839, "upload_time": "2015-09-17T12:28:27", "url": "https://files.pythonhosted.org/packages/86/f1/90b3ebdee340ffd2ea0c263a59b5055b6d942052115bfa016432d0d93fd1/dataserv-2.2.6.tar.gz" } ], "2.2.7": [ { "comment_text": "", "digests": { "md5": "ab7a529efcd0fe82c917209bd9a6c8c5", "sha256": "6a618cf99dbd5cbea7a627b37da6a75f29c668f2103283c5e6a4643459491591" }, "downloads": -1, "filename": "dataserv-2.2.7.tar.gz", "has_sig": false, "md5_digest": "ab7a529efcd0fe82c917209bd9a6c8c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13839, "upload_time": "2015-09-17T15:37:31", "url": "https://files.pythonhosted.org/packages/fe/86/1bf8988bf8d165fb61e05cc80a2ab675ecfbc386d08df6b052147e018450/dataserv-2.2.7.tar.gz" } ], "2.2.8": [ { "comment_text": "", "digests": { "md5": "97df3f33b0fcbe1c7989e358ff84128b", "sha256": "21916c7d92670897508970664c61a7b879d3af04b700485580a88865243b61b5" }, "downloads": -1, "filename": "dataserv-2.2.8.tar.gz", "has_sig": false, "md5_digest": "97df3f33b0fcbe1c7989e358ff84128b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14424, "upload_time": "2015-09-17T16:48:48", "url": "https://files.pythonhosted.org/packages/e7/61/a25a487bb11f6ed678256330f64a2e88d8c178992a5d2ec424934309be57/dataserv-2.2.8.tar.gz" } ], "2.2.9": [ { "comment_text": "", "digests": { "md5": "93cd1dfce2adf4e510e47f0956634faa", "sha256": "046c9c30355c39a546cbbfbbe8553b722be93efe2c086b6b92efd1c1aca8fcd9" }, "downloads": -1, "filename": "dataserv-2.2.9.tar.gz", "has_sig": false, "md5_digest": "93cd1dfce2adf4e510e47f0956634faa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24823, "upload_time": "2015-09-17T17:14:11", "url": "https://files.pythonhosted.org/packages/bd/f4/c9ad30daebfe24fd100dcb4e3eb602760780cc1252b0271e1c01631e40a7/dataserv-2.2.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7bbcf27b97b1aad37ccb470e09c2d6c0", "sha256": "91aab535bdcd91bc37a063482e801d7b7f01aa1209bf80bcbaa4e11b2564f81d" }, "downloads": -1, "filename": "dataserv-2.2.13-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7bbcf27b97b1aad37ccb470e09c2d6c0", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 19954, "upload_time": "2015-09-17T18:37:28", "url": "https://files.pythonhosted.org/packages/3c/88/df20bbed46a20b1f03db6929bd81b1b23325ac9eab5c861b33a69e6fd4e7/dataserv-2.2.13-py2.py3-none-any.whl" } ] }