{ "info": { "author": "Mike Kazantsev", "author_email": "mk.fraggod@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Plugins", "Framework :: Twisted", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "License :: OSI Approved", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 2 :: Only", "Topic :: Internet", "Topic :: System :: Archiving", "Topic :: System :: Filesystems" ], "description": "txu1\n----\n\nTwisted-based async interface for `Ubuntu One `_\n`Files Cloud REST API\nv1 `_.\n\n- `U1 API\n docs `_\n- `U1 API Auth\n docs `_\n\nImplemented from scratch on top of Twisted and\n`oauth2 `_ (name might be\nconfusing - it's actually OAuth 1.0 helper), does not require any\nubuntu-specific libs, daemons or modules.\n\nUsage Example\n-------------\n\nNote that email/password credentials are only needed to get the OAuth\n1.0 consumer/token (which can be revoked through `ubuntu single sign on\ninterface `_) once, see\n`docs `_\nfor more details.\n\nIncluded \"u1-cli\" script can also be used to generate these OAuth\ncredentials for the apps.\n\n::\n\n from twisted.internet import defer, reactor\n from txu1 import txU1, DoesNotExist\n\n @defer.inlineCallbacks\n def do_stuff():\n api = txU1(debug_requests=True)\n\n try:\n api.auth_consumer, api.auth_token =\\\n (open(n).read().splitlines() for n in ['u1_consumer', 'u1_token'])\n except (OSError, IOError):\n print 'Getting new OAuth credentials'\n\n # Query credentials from terminal\n email = raw_input('U1 Email: ').strip()\n password = raw_input('U1 Password: ').strip()\n assert email and password, (email, password)\n\n auth = yield api.auth_create_token(email, password)\n open('u1_consumer', 'w').write('{}\\n{}\\n'.format(*api.auth_consumer))\n open('u1_token', 'w').write('{}\\n{}\\n'.format(*api.auth_token))\n print 'Auth data acquired: {}'.format(auth)\n\n print 'Storage info: {}'.format((yield api.info_storage()))\n print 'Public files: {}'.format((yield api.info_public_files()))\n\n vol_list = yield api.volume_info(type_filter='udf')\n vol_count = len(vol_list)\n print 'UDF volumes: {}'.format(vol_list)\n\n try: vol_info = yield api.volume_info('~/test')\n except DoesNotExist:\n vol_info = yield api.volume_create('~/test')\n vol_count += 1\n print 'Using volume: {}'.format(vol_info)\n if vols_count > 1: api.default_volume = '~/test'\n\n try: print 'dir info: {}'.format((yield api.node_info('/a/b/c', children=True)))\n except DoesNotExist: print 'mkdir: {}'.format((yield api.node_mkdir('/a/b/c')))\n\n contents = 'somecontents'\n print 'put: {}'.format(\n (yield api.file_put_into('/a/b/c', name='test_file', data=contents)) )\n print 'put_magic: {}'.format(\n (yield api.file_put_magic('/a/b/c/test_file2', data=contents)) )\n\n print 'get: {}'.format((yield api.file_get('/a/b/c/test_file')))\n\n print \"Hey! I'm running some DELETE operations, don't mind me...\"\n yield api.node_delete('/a/b/c/test_file2')\n yield api.node_delete('/a/b/c/test_file')\n yield api.node_delete('/a/b/c')\n yield api.volume_delete('~/test')\n\n print 'Done'\n\n do_stuff().addBoth(lambda ignored: reactor.stop())\n reactor.run()\n\nMore comprehensive docs are always welcome!\n\nInstallation\n------------\n\nIt's a regular package for Python 2.7 (not 3.X).\n\nUsing `pip `_ is the best way:\n\n::\n\n % pip install txu1\n\nIf you don't have it, use:\n\n::\n\n % easy_install pip\n % pip install txu1\n\nAlternatively (`see\nalso `_):\n\n::\n\n % curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python\n % pip install txu1\n\nOr, if you absolutely must:\n\n::\n\n % easy_install txu1\n\nBut, you really shouldn't do that.\n\nCurrent-git version can be installed like this:\n\n::\n\n % pip install 'git+https://github.com/mk-fg/txu1.git#egg=txu1'\n\nNote that to install stuff in system-wide PATH and site-packages,\nelevated privileges are often required. Use \"install --user\",\n`~/.pydistutils.cfg `_\nor `virtualenv `_ to do\nunprivileged installs into custom paths.\n\nRequirements\n~~~~~~~~~~~~\n\n- `Python 2.7 (not 3.X) `_\n\n- `Twisted `_ (core, web, at least 12.2.0)\n\n- `oauth2 `_", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/mk-fg/txu1", "keywords": "ubuntu one,u1,ubuntu,one,twisted,sso,async,api,rest,json,storage,storage provider,file hosting", "license": "WTFPL", "maintainer": null, "maintainer_email": null, "name": "txu1", "package_url": "https://pypi.org/project/txu1/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/txu1/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/mk-fg/txu1" }, "release_url": "https://pypi.org/project/txu1/13.06.0/", "requires_dist": null, "requires_python": null, "summary": "Twisted-based async interface for Ubuntu One Files Cloud REST API v1", "version": "13.06.0" }, "last_serial": 770437, "releases": { "13.03.4": [ { "comment_text": "", "digests": { "md5": "49cd7dc21b441281391c9fb0995abe98", "sha256": "37e6ce2c2a38688c5fab9bf524847ddcc932816e538be2125a50569b1c8fa915" }, "downloads": -1, "filename": "txu1-13.03.4.tar.gz", "has_sig": true, "md5_digest": "49cd7dc21b441281391c9fb0995abe98", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9550, "upload_time": "2013-03-31T09:11:56", "url": "https://files.pythonhosted.org/packages/24/cb/ec5f45736425f358fe0ce7ce6c4a4ccc9c39562ad09835d631f680ba3001/txu1-13.03.4.tar.gz" } ], "13.03.5": [ { "comment_text": "", "digests": { "md5": "d300dad6ad2d24d6b19d6a2b5b3439c7", "sha256": "5f77e64c81e379abf4dfda78363ca5da48c7e5d52887528543df6861fd06501a" }, "downloads": -1, "filename": "txu1-13.03.5.tar.gz", "has_sig": true, "md5_digest": "d300dad6ad2d24d6b19d6a2b5b3439c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12163, "upload_time": "2013-03-31T09:13:10", "url": "https://files.pythonhosted.org/packages/24/a0/10931bbf2a411186e03b0624cedad6885088ac5f26ab9bbf7b1c2fd64334/txu1-13.03.5.tar.gz" } ], "13.03.7": [ { "comment_text": "", "digests": { "md5": "d61ae1502af2aa69ca1d7b1490e46a13", "sha256": "1eba49844e841f7a7d95ce286c0c99d90be8456ac469ea41e580c9ce1aa7faa1" }, "downloads": -1, "filename": "txu1-13.03.7.tar.gz", "has_sig": true, "md5_digest": "d61ae1502af2aa69ca1d7b1490e46a13", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12128, "upload_time": "2013-03-31T17:14:23", "url": "https://files.pythonhosted.org/packages/9b/cf/4e93328a36fdd7ccbe70ee62550f9cc635450f5d3f0bef835405c21bf83f/txu1-13.03.7.tar.gz" } ], "13.04.3": [ { "comment_text": "", "digests": { "md5": "12066c489b571aae54c973dc1241d613", "sha256": "73203c1b17fe0a46c5de1c0d3811d80ff87534e3288860bcac62f152203e5e78" }, "downloads": -1, "filename": "txu1-13.04.3.tar.gz", "has_sig": true, "md5_digest": "12066c489b571aae54c973dc1241d613", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12442, "upload_time": "2013-04-01T17:53:55", "url": "https://files.pythonhosted.org/packages/41/76/bffab8b406c10bbb7c24a21185e16b3405eb2a6941e743fffd89337067a8/txu1-13.04.3.tar.gz" } ], "13.04.4": [ { "comment_text": "", "digests": { "md5": "0dd21736c45cea933271c42677c7ac8e", "sha256": "39d544a2dad07ef8a47e094ecf55f875f330cd13b90cd9996415d18a6e888f9a" }, "downloads": -1, "filename": "txu1-13.04.4.tar.gz", "has_sig": true, "md5_digest": "0dd21736c45cea933271c42677c7ac8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13873, "upload_time": "2013-04-02T08:39:22", "url": "https://files.pythonhosted.org/packages/3f/92/7916868f129c7f15485b4e2ca1dd7fac16cb77d7d8a2f004ffd715d4104f/txu1-13.04.4.tar.gz" } ], "13.04.5": [ { "comment_text": "", "digests": { "md5": "893dc62e7087fac4e222c07504d21154", "sha256": "b0d918d7248237fa865787e1330e5cf9752197d3ee73b787fb5631c4e4c0519f" }, "downloads": -1, "filename": "txu1-13.04.5.tar.gz", "has_sig": true, "md5_digest": "893dc62e7087fac4e222c07504d21154", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13980, "upload_time": "2013-04-15T14:21:03", "url": "https://files.pythonhosted.org/packages/35/c2/9b380cf8ac03fe087483c1b12fcbb217d89fe81f18ad948c412692a973fd/txu1-13.04.5.tar.gz" } ], "13.04.6": [ { "comment_text": "", "digests": { "md5": "14a353f3923054640cb27b7e4999a35a", "sha256": "56f016152bebc8a1bd3953be1324681aff188b06dd0f9ee7edf265a16cbbff9c" }, "downloads": -1, "filename": "txu1-13.04.6.tar.gz", "has_sig": true, "md5_digest": "14a353f3923054640cb27b7e4999a35a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14000, "upload_time": "2013-04-17T18:44:27", "url": "https://files.pythonhosted.org/packages/c0/02/5328a7b7070e5b8cb1db1ef72d040d7929ca3aa806ac479745d7ec85b969/txu1-13.04.6.tar.gz" } ], "13.06.0": [ { "comment_text": "", "digests": { "md5": "b57169fad95e706b02de46e76edbd7e5", "sha256": "918f839073c5084b8a7857e09994508497dd1bb083f26987d8762b520efdca41" }, "downloads": -1, "filename": "txu1-13.06.0.tar.gz", "has_sig": true, "md5_digest": "b57169fad95e706b02de46e76edbd7e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14039, "upload_time": "2013-06-13T21:46:42", "url": "https://files.pythonhosted.org/packages/de/75/9c02d52a22898981783121565811511f6ae6bc45d2206ff23f9ef5023536/txu1-13.06.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b57169fad95e706b02de46e76edbd7e5", "sha256": "918f839073c5084b8a7857e09994508497dd1bb083f26987d8762b520efdca41" }, "downloads": -1, "filename": "txu1-13.06.0.tar.gz", "has_sig": true, "md5_digest": "b57169fad95e706b02de46e76edbd7e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14039, "upload_time": "2013-06-13T21:46:42", "url": "https://files.pythonhosted.org/packages/de/75/9c02d52a22898981783121565811511f6ae6bc45d2206ff23f9ef5023536/txu1-13.06.0.tar.gz" } ] }