{ "info": { "author": "Kloudless", "author_email": "hello@kloudless.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "Python library for the Kloudless API\n====================================\n\nPython library for the [Kloudless API](https://developers.kloudless.com).\n\n**You need to sign up and create an application first before using this SDK.**\n\nTable of Contents\n-----------------\n\n* [Requirements](#requirements)\n* [Installation](#installation)\n* [Getting Started](#getting-started)\n* [Making API Requests](#making-api-requests)\n* [Integrating OAuth Flow](#integrating-oauth-flow)\n* [Documentation](#documentation)\n\nRequirements\n-----------\n\nPython 2.7 or Python 3.5+\n\nInstallation\n------------\n\nInstall via pip:\n\n```bash\npip install kloudless\n```\n\nInstall from source:\n\n```bash\ngit clone git://github.com/kloudless/kloudless-python\ncd kloudless-python\npython setup.py install\n```\n\nGetting Started\n---------------\n\nMost Kloudless API endpoints require connecting to an upstream service\naccount first. Start by **navigating to**\n[API Explorer](https://developers.kloudless.com/api-explorer/) **and connecting\nan account.**\n\n![Get the Bearer Token](https://kloudless-static-assets.s3.amazonaws.com/p/platform/sdk/images/api-explorer-token.png)\n\nAfter the account has been connected, copy the Bearer Token from the text box\nand use it to initialize an Account object:\n\n```python\nfrom kloudless import Account\naccount = Account(token=\"YOUR_BEARER_TOKEN\")\n```\n\nMaking API Requests\n-------------------\n\nYou can now make an API request with the account instance you've created.\n\n### If Connecting to a Storage Service\n\n```python\n# retrieve folder contents\nroot_folder_contents = account.get('storage/folders/root/contents')\nfor resource in root_folder_contents:\n print(resource.data)\n\n# download the first file in root_folder\nfor resource in root_folder_contents:\n if resource.data['type'] == 'file':\n filename = resource.data['name']\n response = resource.get('contents')\n with open(filename, 'wb') as f:\n f.write(response.content)\n break\n\n# upload a file to root_folder\nfile_name = 'FILE_NAME_TO_UPLOAD'\nheaders = {\n 'X-Kloudless-Metadata': json.dumps(\n {'parent_id': 'root', 'name': file_name}\n )\n}\nwith open(file_name, 'rb') as f:\n file_resource = account.post('storage/files', data=f, headers=headers)\n```\n\n### If Connecting to a Calendar Service\n\n```python\n# retrieve primary calendar\ncalendar = account.get('cal/calendars/primary')\nprint('Primary Calendar: {}'.format(calendar.data['name']))\n\n# iterate through events in first page with page_size equals 5\nevents = calendar.get('events?page_size=5')\nfor e in events:\n data = e.data\n print('{}: {}~{}'.format(data['name'], data['start'], data['end']))\n\n# iterate thorough events in second page\nnext_page_events = events.get_next_page()\nfor e in next_page_events:\n data = e.data\n print('{}: {}~{}'.format(data['name'], data['start'], data['end']))\n\n# create a new event on primary calendar\nevent = events.post(json={\n 'start': '2019-01-01T12:30:00Z',\n 'end': '2019-01-01T13:30:00Z',\n 'name': 'Event test'}\n)\n```\n\nIntegrating OAuth Flow\n----------------------\n\nYou can use the [Authenticator JS library](https://github.com/kloudless/authenticator.js)\nto authenticate end-users via a pop-up and store the token server-side. \nBe sure to verify the token once it is transferred to your\nserver. See `kloudless.application.verify_token`.\n\nAn alternate approach is to use the OAuth Authorization Code grant flow to\nredirect the end-user to Kloudless to connect their account to your app.\n\n### OAuth Integration Demo server\n\n`examples/demo_server.py` provides the server-side logic of the 3-legged OAuth\nflow using helper methods from the Kloudless Python SDK. See \n`examples/README.md` for instructions on running the demo server.\n\n### Python Django Sample code\n\nInsert the following code into Django views under `views/` directory and\ncalling it via `urls.py`.\n\n```python\nfrom django.http import HttpResponseRedirect, HttpResponse\nfrom django.conf import settings\n\nfrom kloudless import get_authorization_url, get_token_from_code\n\n\ndef start_authorization_flow(request):\n \"\"\"\n Redirect the user to start authorization flow.\n \"\"\"\n url, state = get_authorization_url(app_id=settings.KLOUDLESS_APP_ID,\n redirect_uri=settings.KLOUDLESS_REDIRECT_URL,\n scope='any:normal.storage')\n\n request.session['authorization_state'] = state\n return HttpResponseRedirect(url)\n\n\ndef callback(request):\n \"\"\"\n The endpoint for settings.KLOUDLESS_REDIRECT_URL.\n \"\"\"\n params = request.GET.dict()\n token = get_token_from_code(app_id=settings.KLOUDLESS_APP_ID,\n api_key=settings.KLOUDLESS_API_KEY,\n orig_state=request.session['authorization_state'],\n orig_redirect_uri=settings.KLOUDLESS_REDIRECT_URL,\n **params)\n\n # store the token\n request.user.kloudless_token = token\n request.user.save()\n return HttpResponse('Account connects successfully.')\n```\n\nDocumentation\n-------------\n\nFull documentation is hosted at\n[Read the docs](https://kloudless.readthedocs.io/en/latest/).\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/kloudless/kloudless-python/", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "kloudless", "package_url": "https://pypi.org/project/kloudless/", "platform": "", "project_url": "https://pypi.org/project/kloudless/", "project_urls": { "Homepage": "https://github.com/kloudless/kloudless-python/" }, "release_url": "https://pypi.org/project/kloudless/2.0.0/", "requires_dist": [ "requests (>=1.0)", "python-dateutil", "six" ], "requires_python": "", "summary": "Python library for the Kloudless API", "version": "2.0.0" }, "last_serial": 5127024, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "c37fa1f804df04cff8e11b2056add6e8", "sha256": "05975bbc0109bc970a15b955a585061b3b5df1e74ddd101884ba4509e14cfbd3" }, "downloads": -1, "filename": "kloudless-0.1.0.tar.gz", "has_sig": false, "md5_digest": "c37fa1f804df04cff8e11b2056add6e8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9121, "upload_time": "2014-04-28T22:00:18", "url": "https://files.pythonhosted.org/packages/e5/24/ded75539fa2ac5e9bcc2f9db53f035bdacb15aef1666af32dd4e5ebf9fbb/kloudless-0.1.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "f5ff70cb238755a192e1e183db704c48", "sha256": "b56a40c0567fa9fb566003b4b42b00ae7ac31b51a0a1de67d47da8be89122734" }, "downloads": -1, "filename": "kloudless-1.0.0.tar.gz", "has_sig": false, "md5_digest": "f5ff70cb238755a192e1e183db704c48", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14563, "upload_time": "2017-04-11T21:07:12", "url": "https://files.pythonhosted.org/packages/11/a9/1d9449eaf554535f9d175b5e46d4770b2fe8bb5f01f19f6007e52b0d7e8c/kloudless-1.0.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "650125721895451102d55bcbee700ee3", "sha256": "3755e2668754e1b0c6f1475975e1fb6f18839b4675a84f5fcf01afc88f91324e" }, "downloads": -1, "filename": "kloudless-1.1.1.tar.gz", "has_sig": false, "md5_digest": "650125721895451102d55bcbee700ee3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15702, "upload_time": "2017-04-11T21:44:54", "url": "https://files.pythonhosted.org/packages/b7/98/4d417bbaacc058d764f901880cc6fd108073f659be635e01411c8a77c320/kloudless-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "2e1ec50dedb4904f22b3a510cd0c45e1", "sha256": "3a28d4e7c5ea024ebe6d5993ca450f616ce666d911380ec34661568477c33ed5" }, "downloads": -1, "filename": "kloudless-1.1.2.tar.gz", "has_sig": false, "md5_digest": "2e1ec50dedb4904f22b3a510cd0c45e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17190, "upload_time": "2017-10-03T20:11:14", "url": "https://files.pythonhosted.org/packages/91/f2/056a6279ad08dfe52e0d10fa84b2971f81689ec822d2c5d918a1481b3a6a/kloudless-1.1.2.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "e9132d4eefecaf507fd69a4f4cd2d9b4", "sha256": "83eaa64f7d94083f48a29a5fe7e054b7721b9eff8acbd7bc1ec728f842452800" }, "downloads": -1, "filename": "kloudless-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e9132d4eefecaf507fd69a4f4cd2d9b4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16160, "upload_time": "2019-04-11T04:18:14", "url": "https://files.pythonhosted.org/packages/82/7c/c12d30624bc4ce756cce9ae2e213b16580d39e6e9429db0a4a5ce6be5376/kloudless-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b9ab87f0e38c11a8c9df9fdf855736c5", "sha256": "a1d8a295d5180ccf703a03a53ca9ab4bc02342fbf6469e9504a2cc53e03a812d" }, "downloads": -1, "filename": "kloudless-2.0.0.tar.gz", "has_sig": false, "md5_digest": "b9ab87f0e38c11a8c9df9fdf855736c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11983, "upload_time": "2019-04-11T04:18:16", "url": "https://files.pythonhosted.org/packages/ca/1d/a2c41451f73eeab3eeb643bd92917f796565f3ea3006ca18e116c65648c8/kloudless-2.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e9132d4eefecaf507fd69a4f4cd2d9b4", "sha256": "83eaa64f7d94083f48a29a5fe7e054b7721b9eff8acbd7bc1ec728f842452800" }, "downloads": -1, "filename": "kloudless-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e9132d4eefecaf507fd69a4f4cd2d9b4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16160, "upload_time": "2019-04-11T04:18:14", "url": "https://files.pythonhosted.org/packages/82/7c/c12d30624bc4ce756cce9ae2e213b16580d39e6e9429db0a4a5ce6be5376/kloudless-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b9ab87f0e38c11a8c9df9fdf855736c5", "sha256": "a1d8a295d5180ccf703a03a53ca9ab4bc02342fbf6469e9504a2cc53e03a812d" }, "downloads": -1, "filename": "kloudless-2.0.0.tar.gz", "has_sig": false, "md5_digest": "b9ab87f0e38c11a8c9df9fdf855736c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11983, "upload_time": "2019-04-11T04:18:16", "url": "https://files.pythonhosted.org/packages/ca/1d/a2c41451f73eeab3eeb643bd92917f796565f3ea3006ca18e116c65648c8/kloudless-2.0.0.tar.gz" } ] }