{ "info": { "author": "Dave Simons", "author_email": "simonsdave@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "tor-async-couchdb\n=================\n\n|Maintained| |MIT license| |Python 2.7| |Requirements Status| |Build\nStatus| |Coverage Status|\n\n``tor-async-couchdb`` is an opinionated\n`Tornado `__\n`async `__\nclient for `CouchDB `__.\n``tor-async-couchdb`` is intended to operate as part of a service's\napplication tier and interact with the service's data tier implemented\nusing `CouchDB `__.\n\n``tor-async-couchdb`` documentation isn't as strong as it could be.\nsample services are best way to gain an understanding of how to use\n``tor-async-couchdb``.\n\n``tor-async-couchdb`` was originally created for use with\n`CouchDB `__. ``tor-async-couchdb`` has also\nbeen used with `Cloudant DBaaS `__ and\n`Cloudant Local `__.\n\n``tor-async-couchdb`` was created as a way to capture a very opinionated\nset of best practices and learnings after operating and scaling a number\nof services that used CouchDB and Tornado. The bullets below summarize\nthe opinions.\n\n- services should embrace eventual consistency\n- thoughts on data models:\n\n - every document should have a versioned type property (ex\n *type=v9.99*)\n - documents are chunky aka retrieval of a single document should\n typically be all that's necessary to implement a RESTful service's\n endpoint ala standard NoSQL data model thinking\n - assume conflicts happen as part of regular operation\n - sensitive data at rest is an information security concern that\n must be addressed\n\n - each property should be evaluated against a data and\n information classification policy\n - `this `__\n is a good example of data classification policy\n - if a property is deemed sensitive it should ideally be hashed\n using `bcrypt `__ if\n possible and otherwise\n `SHA3-512 `__\n - if a sensitive proprerty can't be hashed it should be encrypted\n using `Keyczar `__\n\n- direct tampering of data in the database is undesirable and therefore\n tamper resistance is both valued and a necessity\n- to prevent unncessary fragmentation, CouchDB, not the service tier,\n should generate document IDs\n- document retrieval should be done through views against document\n properties not document IDs\n- one design document per view\n- horizontally scaling CouchDB should be done using infrastructure\n (CouchDB 2.0 or Cloudant) not application level sharding\n\nUsing\n=====\n\nInstall ``tor-async-couchdb``.\n\n.. code:: bash\n\n >pip install tor_async_couchdb\n\nConfigure ``tor-async-couchdb`` in your service's mainline. Typically\nthe configuration options are expected to come from a configuration file\nand/or the service's command line.\n\n.. code:: python\n\n from tor_async_couchdb import async_model_actions\n\n async_model_actions.database = \"http://127.0.0.1:5984/database\"\n async_model_actions.tampering_signer = None\n async_model_actions.username = None\n async_model_actions.password = None\n async_model_actions.validate_cert = True\n\n.. |Maintained| image:: https://img.shields.io/maintenance/yes/2017.svg\n.. |MIT license| image:: http://img.shields.io/badge/license-MIT-brightgreen.svg\n :target: http://opensource.org/licenses/MIT\n.. |Python 2.7| image:: https://img.shields.io/badge/python-2.7-FFC100.svg?style=flat\n.. |Requirements Status| image:: https://requires.io/github/simonsdave/tor-async-couchdb/requirements.svg?branch=master\n :target: https://requires.io/github/simonsdave/tor-async-couchdb/requirements/?branch=master\n.. |Build Status| image:: https://travis-ci.org/simonsdave/tor-async-couchdb.svg\n :target: https://travis-ci.org/simonsdave/tor-async-couchdb\n.. |Coverage Status| image:: https://coveralls.io/repos/simonsdave/tor-async-couchdb/badge.svg\n :target: https://coveralls.io/r/simonsdave/tor-async-couchdb", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/simonsdave/tor-async-couchdb/tarball/v0.50.1", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/simonsdave/tor-async-couchdb", "keywords": "tornado,couchdb", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "tor_async_couchdb", "package_url": "https://pypi.org/project/tor_async_couchdb/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/tor_async_couchdb/", "project_urls": { "Download": "https://github.com/simonsdave/tor-async-couchdb/tarball/v0.50.1", "Homepage": "https://github.com/simonsdave/tor-async-couchdb" }, "release_url": "https://pypi.org/project/tor_async_couchdb/0.50.1/", "requires_dist": null, "requires_python": null, "summary": "Tornado Async Client for CouchDB", "version": "0.50.1" }, "last_serial": 2637400, "releases": { "0.50.0": [ { "comment_text": "", "digests": { "md5": "07c7fdb760cdf4b99db4e93f39ca8ce4", "sha256": "5ba84b4e386f56aa4ae62f4debe7494ee9402b99b5378d8b7e31979020b0b484" }, "downloads": -1, "filename": "tor_async_couchdb-0.50.0.tar.gz", "has_sig": false, "md5_digest": "07c7fdb760cdf4b99db4e93f39ca8ce4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17294, "upload_time": "2017-01-09T03:14:13", "url": "https://files.pythonhosted.org/packages/95/4b/00f7ac20f37f7679909e89faeb11e889bcbd1569e1d5620cfb0d43f5dba0/tor_async_couchdb-0.50.0.tar.gz" } ], "0.50.1": [ { "comment_text": "", "digests": { "md5": "9172025b4a7e5838760254f5666a4b2e", "sha256": "fdfb93e1ac0f88154e79cf0795d665bbad556aebe5d3d0c821e2e0a1035568da" }, "downloads": -1, "filename": "tor_async_couchdb-0.50.1.tar.gz", "has_sig": false, "md5_digest": "9172025b4a7e5838760254f5666a4b2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14533, "upload_time": "2017-02-12T23:11:49", "url": "https://files.pythonhosted.org/packages/6b/ed/70def7616bdbddc77945e14b5b2b2b5e9fd40a9efe2ab88557859835f3fd/tor_async_couchdb-0.50.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9172025b4a7e5838760254f5666a4b2e", "sha256": "fdfb93e1ac0f88154e79cf0795d665bbad556aebe5d3d0c821e2e0a1035568da" }, "downloads": -1, "filename": "tor_async_couchdb-0.50.1.tar.gz", "has_sig": false, "md5_digest": "9172025b4a7e5838760254f5666a4b2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14533, "upload_time": "2017-02-12T23:11:49", "url": "https://files.pythonhosted.org/packages/6b/ed/70def7616bdbddc77945e14b5b2b2b5e9fd40a9efe2ab88557859835f3fd/tor_async_couchdb-0.50.1.tar.gz" } ] }