{
"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"
}
]
}