{ "info": { "author": "Luke Paris (Paradoxis)", "author_email": "luke@paradoxis.nl", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "# TransIP STACK API\n[![Build Status](https://travis-ci.org/Paradoxis/TransIP-STACK-API.svg?branch=master)](https://travis-ci.org/Paradoxis/TransIP-STACK-API)\n[![PyPI version](https://badge.fury.io/py/transip-stack-api.svg)](https://badge.fury.io/py/transip-stack-api)\n[![codecov](https://codecov.io/gh/Paradoxis/TransIP-Stack-API/branch/master/graph/badge.svg)](https://codecov.io/gh/Paradoxis/TransIP-Stack-API)\n\nUnofficial wrapper for the TransIP STACK API, written in Python 3\n\n## Installation\nTo install the library, simply install it using pip:\n\n```\n$ pip install transip-stack-api\n```\n\nFor development installations\n\n```\n$ pip install -e .[dev]\n```\n\n## Usage\nTo use the project, simply import the library into your project like so:\n\n```python\nfrom transip_stack import Stack, StackException\n\n\nwith Stack(username=\"foo\", password=\"bar\", hostname=\"stack.example.com\") as stack:\n try:\n url = stack.upload(\"local-foo.txt\", remote=\"remote-foo.txt\").share()\n print(\"[+] You can download remote-foo.txt at: {}\".format(url))\n\n except StackException as e:\n print(\"[!] Error: {}\".format(e))\n```\n\nThe package also ships with a command line interface to easily upload\nfiles in your current working directory to stack. Configuration is done\nvia environment variables:\n\n``` \n$ export STACK_USERNAME=...\n$ export STACK_PASSWORD=...\n$ export STACK_HOSTNAME=...\n$ export STACK_DIRECTORY=...\n```\n\nThen simply use the tool:\n\n``` \n$ stack upload .\n```\n\nNote that the command line interface is a work in progress\n\n## Examples\n\n```python\nfrom io import BytesIO\n\nfrom transip_stack import Stack, StackException\n\n\nwith Stack(username=\"foo\", password=\"bar\", hostname=\"stack.example.com\") as stack:\n for file in stack.files:\n print(file.name)\n\n for file in stack.ls(\"foo\"):\n print(file.name)\n\n stack.cd(\"/foo\")\n\n for file in stack.files:\n if not file.is_shared:\n file.share()\n\n print(file.share_url)\n\n user = stack.user(\"admin\")\n user.name = \"John Doe\"\n user.save()\n\n user = stack.user_or_create_new(\n name=\"Someone Else\", \n username=\"someone\", \n password=\"Pa$$w0rd!\", \n disk_quota=5 * 1000 * 1000)\n\n print(user.is_admin) # -> False\n\n\nwith Stack(username=\"someone\", password=\"Pa$$w0rd!\", hostname=\"stack.example.com\") as stack:\n stack.upload(\"foo.txt\")\n stack.download(\"foo.txt\", \"example.txt\")\n\n buff = BytesIO()\n stack.download_into(\"foo.txt\", buffer=buff)\n print(buff.getvalue().decode())\n\n try:\n user = stack.user('admin')\n except StackException as e:\n print(e) # -> \"Access denied ..\"\n```\n\nWithout context managers:\n\n```python\nfrom transip_stack import Stack\n\n\nstack = Stack(username=\"foo\", password=\"bar\", hostname=\"stack.example.com\")\nstack.login()\n\nstack.cd(\"/foo\")\n\nfor file in stack.files:\n file.unshare()\n\nstack.logout() # Important\n```\n\n---\n\n## API endpoints\n\n### Logging in\n* POST `/login`\n * Query\n * *None*\n * Body\n * username: str\n * password: str\n * Response\n * Success: HTTP 302\n * Failure: HTTP 200\n\n### Logging out\n* GET `/logout`\n * Query\n * *None*\n * Body\n * *None*\n * Response\n * Success: HTTP 302\n * Failure: *N/A*\n\n### Listing files\n* GET `/api/files`\n * Query\n * dir: str = \"/\"\n * type: str = \"files\"\n * public: bool = false\n * offset: int = 0\n * limit: int = 1\n * sortBy: str = \"default\"\n * order: str = \"asc\"\n * query: str = \"\"\n * Body\n * *None*\n\n### Sharing a file\n* POST `/api/files/update`\n * Headers\n * CSRF-Token\n * Query\n * *None*\n * Body (JSON)\n * Array of:\n * action: str = \"share\"\n * path: str = \"\"\n * active: bool = true\n * true: File will be shared and get assigned a token\n * false: File will no longer be shared\n * allowWrites: bool = false\n * updatePassword: bool = true\n * *Set to true if you want to set a password*\n * sharePassword: str = \"\"\n * *Required when setting a password*\n * updateExpireDate: bool = true\n * *Set to true if you want to set an expiry date\n * expireDate: date = \"\"\n * *Required when setting an expiry date*\n\n### Deleting a file\n* POST `/api/files/update`\n * Headers\n * CSRF-Token\n * Query\n * *None*\n * Body (JSON)\n * Array of:\n * action: str = \"delete\"\n * path: str = \"\"\n * query: str = \"\"\n * *Not sure why this is added, possibly for mass file deletion*\n\n### Getting file information\n* GET `/api/pathinfo`\n * Query\n * path: str = \"\"\n * Body\n * *None*\n\n### Marking a file as favorited\n* POST `/api/files/update`\n * Headers\n * CSRF-Token\n * Query\n * *None*\n * Body (JSON)\n * Array of:\n * action: str = \"favorite\"\n * active: bool\n * True = Favorited\n * False = Unfavorited\n * path: str = \"\"\n * query: str = \"\"\n * *Not sure why this is added, possibly for mass file deletion*\n\n### List users\n* GET `/api/users`\n * Body\n * *None*\n * Query\n * public: bool = false\n * offset: int = 0\n * limit: int = 50\n * query str = \"\"\n\n### Delete a user\n* POST `/api/users/update`\n * Body (JSON)\n * Array of:\n * action: str = \"delete\"\n * user: User \n * *The entire user object you got from `GET /api/users`\n * Query\n * *None*\n\n### Update a user's properties\n* POST `/api/users/update`\n * Body (JSON)\n * Array of:\n * action: str = \"update\"\n * user: User\n * Query\n * *None*\n\n## Headers\n* CSRF-Token\n * Found in `/files` in a meta tag with the name `csrf-token`\n\n## Types\n* Node (Dict)\n * fileId: int\n * path: str\n * mimetype: str\n * etag: str\n * shareToken: str\n * expirationDate: str\n * hasSharePassword: bool\n * shareTime: int\n * canUpload: bool\n * fileSize: int\n * isFavorited: bool\n * mtime: int\n * isPreviewable: bool\n * width: int\n * height: int\n\n* User (Dict)\n * username: str\n * displayName: str\n * quota: int\n * used: int\n * isAdmin: bool\n * isPremium: bool\n * language: str\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/Paradoxis/TransIP-STACK-API", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "transip-stack-api", "package_url": "https://pypi.org/project/transip-stack-api/", "platform": "", "project_url": "https://pypi.org/project/transip-stack-api/", "project_urls": { "Homepage": "https://github.com/Paradoxis/TransIP-STACK-API" }, "release_url": "https://pypi.org/project/transip-stack-api/1.3.0/", "requires_dist": [ "bs4 (>=0.0.1)", "lxml (>=3.8.0)", "requests (>=2.18.2)", "twine ; extra == 'dev'", "wheel ; extra == 'dev'", "codecov ; extra == 'test'", "coverage ; extra == 'test'" ], "requires_python": ">=3.5.0", "summary": "Unofficial wrapper for the TransIP STACK API", "version": "1.3.0" }, "last_serial": 5318874, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "f5613ddb0dd78b59a1090d537f7136be", "sha256": "01f1a3cd295528daedde5e735cdcea436db32a198135e8b9aa423a67bcba0682" }, "downloads": -1, "filename": "transip-stack-api-1.0.0.tar.gz", "has_sig": false, "md5_digest": "f5613ddb0dd78b59a1090d537f7136be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 891, "upload_time": "2017-07-30T10:24:27", "url": "https://files.pythonhosted.org/packages/ac/bd/3868cf46e9b553176ed23ea1680f45ee13661de52237f27a35a8863035ba/transip-stack-api-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "5b0a23e83e891424909ad2777e058d51", "sha256": "f084a04d593a398157257d779b79ecae75bb2ea6628c88e770ab6381e14abf31" }, "downloads": -1, "filename": "transip-stack-api-1.0.1.tar.gz", "has_sig": false, "md5_digest": "5b0a23e83e891424909ad2777e058d51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 888, "upload_time": "2017-07-31T18:33:09", "url": "https://files.pythonhosted.org/packages/53/0c/658f29fae6d854d635d365834df20a3e4be00ae9b6c6d7e17999e0530312/transip-stack-api-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "985223773f90ecd78e537940220b4094", "sha256": "4ab458c8bfa0951795a6cc1a387e8fd95a0903593c3c714a551180eedad62970" }, "downloads": -1, "filename": "transip-stack-api-1.0.2.tar.gz", "has_sig": false, "md5_digest": "985223773f90ecd78e537940220b4094", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2638, "upload_time": "2018-09-11T17:55:20", "url": "https://files.pythonhosted.org/packages/b4/75/65a25c77dee218bbfc2efb4fccfa9e93683625d8a3a089e19e1e9c5f9a37/transip-stack-api-1.0.2.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "610dea18b660fa02705cb96dab244cd4", "sha256": "6b10f09dbc252921b7899df952133b4d78690ccaed61cf6ce3ca7421e9011a62" }, "downloads": -1, "filename": "transip_stack_api-1.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "610dea18b660fa02705cb96dab244cd4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 10686, "upload_time": "2018-09-11T18:24:25", "url": "https://files.pythonhosted.org/packages/3e/12/aafac0b343df21d59aebaab4f77f98904c0d3cfebed75b19f8cfb64457f9/transip_stack_api-1.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "635b68a8c68eb06648af08a502204074", "sha256": "bff62a8deb15abaded9091e68322523367f3c4e1bdbf4e8f6973807b7c0b8f74" }, "downloads": -1, "filename": "transip-stack-api-1.0.5.tar.gz", "has_sig": false, "md5_digest": "635b68a8c68eb06648af08a502204074", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 11797, "upload_time": "2018-09-11T18:24:26", "url": "https://files.pythonhosted.org/packages/79/c1/18f1d788f898d998f09eb1f460d448a5aa46082b817ec1a9f189d8cd0f76/transip-stack-api-1.0.5.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "19df234053d5d453815b6346876bf1fd", "sha256": "0dc0b85f261ff5af5f6cbbe3d7b715679f7cafece53023787d61a8c817f0299b" }, "downloads": -1, "filename": "transip_stack_api-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "19df234053d5d453815b6346876bf1fd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 11462, "upload_time": "2018-09-15T14:35:19", "url": "https://files.pythonhosted.org/packages/a7/46/0aeb2ffc2b491b935bc20d81a8f8e0fe01c16d7ec683434d7919f34c0a1c/transip_stack_api-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fac43423fd14dbd78f0c40b05b370f3c", "sha256": "ba40e3334a5a8cbe5097def0a46d40eabb76afa930487ac7508818c2d4d8921f" }, "downloads": -1, "filename": "transip-stack-api-1.1.0.tar.gz", "has_sig": false, "md5_digest": "fac43423fd14dbd78f0c40b05b370f3c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 13000, "upload_time": "2018-09-15T14:35:20", "url": "https://files.pythonhosted.org/packages/51/63/03e1358a8d7e4073286a79919da3bd8d8384df2dc85bda83d8d42bc8822d/transip-stack-api-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "6c92808a5abb7166b213f6c1c69a57c3", "sha256": "09c7eced2f7be6bfab3467c2b97b255b70b6d8caab8f813d49fef3202085a4ce" }, "downloads": -1, "filename": "transip_stack_api-1.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6c92808a5abb7166b213f6c1c69a57c3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 11589, "upload_time": "2018-09-24T20:44:41", "url": "https://files.pythonhosted.org/packages/1c/72/0c645cae09e5e0403d57dc484f1fe7b3771433f02179d75dbf0d6fd700ce/transip_stack_api-1.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "813ca0ce696919b859db53d63cf11bf9", "sha256": "29033bcdbd815ee111be585c111dbd84d3bb4691d29149ff904167720ecf5dd3" }, "downloads": -1, "filename": "transip-stack-api-1.1.1.tar.gz", "has_sig": false, "md5_digest": "813ca0ce696919b859db53d63cf11bf9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 13196, "upload_time": "2018-09-24T20:44:43", "url": "https://files.pythonhosted.org/packages/de/13/dd7845d442c59a21bae8677690497ff598474beec6d891e8241330ed686a/transip-stack-api-1.1.1.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "6c301f68a9f5dad7606aa2bb05bcb9b1", "sha256": "33eeff5e13d524f6a58673d8b78bd8f26b000f2447a0cd8508f452951b3ce874" }, "downloads": -1, "filename": "transip_stack_api-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6c301f68a9f5dad7606aa2bb05bcb9b1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 11757, "upload_time": "2018-11-23T17:11:00", "url": "https://files.pythonhosted.org/packages/d7/49/3d8f39a7118598a3711f8d4468e89555c11fcef5161ddf1ca3a11e6485f1/transip_stack_api-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a91457d3fb8f24e022e7740c8b26a472", "sha256": "b2b23df7d95e17432cd2e3ebc9e779b8e6c1cd55d455864fa860687a5eecaf87" }, "downloads": -1, "filename": "transip-stack-api-1.2.1.tar.gz", "has_sig": false, "md5_digest": "a91457d3fb8f24e022e7740c8b26a472", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 12949, "upload_time": "2018-11-23T17:11:02", "url": "https://files.pythonhosted.org/packages/2c/05/468863651671c1ce1bf79196c7aae93dff35a9486d8357798837412de085/transip-stack-api-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "1c84bf22199ae3c173392995bc60aa47", "sha256": "133ff44e93592c305c7abcc7e118c7c6e0e3866e52c91dee89b3d56f5feace4e" }, "downloads": -1, "filename": "transip_stack_api-1.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1c84bf22199ae3c173392995bc60aa47", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 12738, "upload_time": "2019-04-23T16:40:15", "url": "https://files.pythonhosted.org/packages/8d/13/47a2e0c5a3eb034f0aefc5ee1b15f6275e978e71478f7d48d05b1bbc557a/transip_stack_api-1.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "192514ce43a40a605a63c9eb2e8ceb73", "sha256": "6c278737ff4b5a72c187f4c687f3d8ff8f0c852fd9d3b2e00b8648c9a5d86a8e" }, "downloads": -1, "filename": "transip-stack-api-1.2.2.tar.gz", "has_sig": false, "md5_digest": "192514ce43a40a605a63c9eb2e8ceb73", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 11211, "upload_time": "2019-04-23T16:40:16", "url": "https://files.pythonhosted.org/packages/0d/fa/e82e91ffcaaa90b9abab4235240f3446225016113a729a88fe8fe74eecef/transip-stack-api-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "2935fcca38a64d95f3c750e7498fe98a", "sha256": "87929581dca17653fdbc3d5a4cad60119a0d87d08b80e93d666192fddeb1d2d7" }, "downloads": -1, "filename": "transip_stack_api-1.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2935fcca38a64d95f3c750e7498fe98a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 12740, "upload_time": "2019-04-29T20:31:19", "url": "https://files.pythonhosted.org/packages/e2/71/72d6e8d80ec47f3d6de9af4fca0b9c21ee796d6d41f2b3c04963f260073f/transip_stack_api-1.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e0580ca5d274cd95480be097120d6ea5", "sha256": "a3e86cb26ccacdf2160167f73acf11d082da12453f9d06acf4b59e53bdc100e3" }, "downloads": -1, "filename": "transip-stack-api-1.2.3.tar.gz", "has_sig": false, "md5_digest": "e0580ca5d274cd95480be097120d6ea5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 11234, "upload_time": "2019-04-29T20:31:24", "url": "https://files.pythonhosted.org/packages/46/80/a8bf2ef293bceba0491a99b5d9b4ffe1d2119b8efd30f559acbbb6f63b35/transip-stack-api-1.2.3.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "25f710ff3b08ed4959180deb9acc988e", "sha256": "c4055472f60bc5babf004f68920823563fb164c5d2e99925582fdbe550ef05be" }, "downloads": -1, "filename": "transip_stack_api-1.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "25f710ff3b08ed4959180deb9acc988e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 14992, "upload_time": "2019-05-26T13:55:00", "url": "https://files.pythonhosted.org/packages/2b/7c/d2cc4b9bd1c064038f08c8aa4ddf8c634a2bcb6dad6c060c8dff080208d3/transip_stack_api-1.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b9b0ec3e475d99d7b8c1158c9f8275be", "sha256": "74168ae4d994d5055264360f598065c84f2ef956ccfd211b7977d2a2bdbdac7b" }, "downloads": -1, "filename": "transip-stack-api-1.3.0.tar.gz", "has_sig": false, "md5_digest": "b9b0ec3e475d99d7b8c1158c9f8275be", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 12883, "upload_time": "2019-05-26T13:55:02", "url": "https://files.pythonhosted.org/packages/64/ed/44ae8641eb3959522a3b8e53ccc10f47d5bee87567263de87ce5b0f57200/transip-stack-api-1.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "25f710ff3b08ed4959180deb9acc988e", "sha256": "c4055472f60bc5babf004f68920823563fb164c5d2e99925582fdbe550ef05be" }, "downloads": -1, "filename": "transip_stack_api-1.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "25f710ff3b08ed4959180deb9acc988e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 14992, "upload_time": "2019-05-26T13:55:00", "url": "https://files.pythonhosted.org/packages/2b/7c/d2cc4b9bd1c064038f08c8aa4ddf8c634a2bcb6dad6c060c8dff080208d3/transip_stack_api-1.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b9b0ec3e475d99d7b8c1158c9f8275be", "sha256": "74168ae4d994d5055264360f598065c84f2ef956ccfd211b7977d2a2bdbdac7b" }, "downloads": -1, "filename": "transip-stack-api-1.3.0.tar.gz", "has_sig": false, "md5_digest": "b9b0ec3e475d99d7b8c1158c9f8275be", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 12883, "upload_time": "2019-05-26T13:55:02", "url": "https://files.pythonhosted.org/packages/64/ed/44ae8641eb3959522a3b8e53ccc10f47d5bee87567263de87ce5b0f57200/transip-stack-api-1.3.0.tar.gz" } ] }