{
"info": {
"author": "Chris Streeter",
"author_email": "pypi@chrisstreeter.com",
"bugtrack_url": null,
"classifiers": [
"Framework :: Django",
"Intended Audience :: Developers",
"Intended Audience :: System Administrators",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 2.7",
"Topic :: Software Development"
],
"description": "About\n-----\n\nA way to globally disable writes to your database. This works by\ninserting a cursor wrapper between Django's ``CursorWrapper`` and the\ndatabase connection's cursor wrapper.\n\nInstallation\n------------\n\nThe library is hosted on\n`PyPi `_, so you can\ngrab it there with::\n\n pip install django-db-readonly\n\nThen add ``readonly`` to your ``INSTALLED_APPS``.::\n\n INSTALLED_APPS = (\n # ...\n 'readonly',\n # ...\n )\n\nUsage\n-----\n\nYou need to add this line to your ``settings.py`` to make the database read-only:\n\n::\n\n # Set to False to allow writes\n SITE_READ_ONLY = True\n\nWhen you do this, any write action to your databases will generate an\nexception. You should catch this exception and deal with it somehow. Or\nlet Django display an `error 500\npage `_.\nThe exception you will want to catch is\n``readonly.exceptions.DatabaseWriteDenied`` which inherits from\n``django.db.utils.DatabaseError``.\n\nThere is also a middleware class that will handle the exceptions and\nattempt to handle them as explained below. To enable the middleware, add the following line to your\n``settings.py``:\n\n::\n\n MIDDLEWARE_CLASSES = (\n # ...\n 'readonly.middleware.DatabaseReadOnlyMiddleware',\n # ...\n )\n\nThis will then catch ``DatabaseWriteDenied`` exceptions. If the request is a POST request, we\nwill redirect the user to the same URL, but as a GET request. If the\nrequest is not a POST (ie. a GET), we will just display a\n``HttpResponse`` with text telling the user the site is in read-only\nmode.\n\nIn addition, the middleware class can add an error-type message using\nthe ``django.contrib.messages`` module. Add:\n\n::\n\n # Enable\n DB_READ_ONLY_MIDDLEWARE_MESSAGE = True\n\nto your ``settings.py`` and then on POST requests that generate a\n``DatabaseWriteDenied`` exception, we will add an error message\ninforming the user that the site is in read-only mode.\n\nFor additional messaging, there is a context processor that adds\n``SITE_READ_ONLY`` into the context. Add the following line in your\n``settings.py``:\n\n::\n\n TEMPLATE_CONTEXT_PROCESSORS = (\n # ...\n 'readonly.context_processors.readonly',\n # ...\n )\n\nAnd use it as you would any boolean in the template, e.g.\n``{% if SITE_READ_ONLY %} We're down for maintenance. {% endif %}``\n\nTesting\n-------\n\nThere aren't any tests included, yet. Run it at your own risk.\n\nCaveats\n-------\n\nThis will work with `Django Debug\nToolbar `_. In fact,\nI was inspired by `DDT's sql\npanel `_\nwhen writing this app.\n\nHowever, in order for both DDT *and* django-db-readonly to work, you\nneed to make sure that you have ``readonly`` before ``debug_toolbar`` in\nyour ``INSTALLED_APPS``. Otherwise, you are responsible for debugging\nwhat is going on. Of course, I'm not sure why you'd be running DDT in\nproduction and running django-db-readonly in development, but whatever,\nI'm not you.\n\nMore generally, if you have any other apps that modifies either\n``django.db.backends.util.CursorWrapper`` or\n``django.db.backends.util.CursorDebugWrapper``, you need to make sure\nthat ``readonly`` is placed *before* of those apps in\n``INSTALLED_APPS``.\n\nThe Nitty Gritty\n----------------\n\nHow does this do what it does? Well, django-db-readonly sits between\nDjango's own cursor wrapper at ``django.db.backends.util.CursorWrapper``\nand the database specific cursor at\n``django.db.backends.*.base.*CursorWrapper``. It overrides two specific\nmethods: ``execute`` and ``executemany``. If the site is in read-only\nmode, then the SQL is examined to see if it contains any write actions\n(defined in ``readonly.ReadOnlyCursorWrapper.SQL_WRITE_BLACKLIST``). If\na write is detected, an exception is raised.\n\nLicense\n-------\n\nUses the `MIT `_ license.\n",
"description_content_type": "",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "http://github.com/streeter/django-db-readonly",
"keywords": "",
"license": "MIT",
"maintainer": "",
"maintainer_email": "",
"name": "django-db-readonly",
"package_url": "https://pypi.org/project/django-db-readonly/",
"platform": "",
"project_url": "https://pypi.org/project/django-db-readonly/",
"project_urls": {
"Homepage": "http://github.com/streeter/django-db-readonly"
},
"release_url": "https://pypi.org/project/django-db-readonly/0.6.0/",
"requires_dist": null,
"requires_python": "",
"summary": "Add a global database read-only setting.",
"version": "0.6.0"
},
"last_serial": 4956284,
"releases": {
"0.1.0": [
{
"comment_text": "",
"digests": {
"md5": "0804981b3f809514d38f398c53f84933",
"sha256": "838a6c9ad1d47582c68bc31b6664ca33bf5e5cbb027d4af17301331daf2ee7db"
},
"downloads": -1,
"filename": "django-db-readonly-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "0804981b3f809514d38f398c53f84933",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 4872,
"upload_time": "2011-04-28T04:07:10",
"url": "https://files.pythonhosted.org/packages/2f/53/b506e97a5a39af61b8c88d38b502947434cbde60ded8948e0fc2ff400c5a/django-db-readonly-0.1.0.tar.gz"
}
],
"0.1.1": [
{
"comment_text": "",
"digests": {
"md5": "ec97c0d0d2e447e075631ee766a57eae",
"sha256": "b17f039a2a491ccdddaac300b5d384a034c85ca83428999a151f854dd598bc02"
},
"downloads": -1,
"filename": "django-db-readonly-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "ec97c0d0d2e447e075631ee766a57eae",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 4884,
"upload_time": "2011-04-29T01:44:46",
"url": "https://files.pythonhosted.org/packages/dd/e9/33b60be4204122245aa4a3aa44ca6141d7a5e5cf813a7b202b9542d9eed5/django-db-readonly-0.1.1.tar.gz"
}
],
"0.2.0": [
{
"comment_text": "",
"digests": {
"md5": "0a4f2e86a507bed337fd1f7331e52f5e",
"sha256": "8a2e4755e3d3ecdf7a222961096c54d1e2310cbf6faa6ae17d42c3a85c41479f"
},
"downloads": -1,
"filename": "django-db-readonly-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "0a4f2e86a507bed337fd1f7331e52f5e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5686,
"upload_time": "2011-05-20T22:30:28",
"url": "https://files.pythonhosted.org/packages/ae/c2/050370e3c0b0fd4948a47f6c013d51074be83d84626a1d17f4100b905c76/django-db-readonly-0.2.0.tar.gz"
}
],
"0.3.0": [
{
"comment_text": "",
"digests": {
"md5": "8d3a7a461bd4579be5ef32ccd363a42e",
"sha256": "d1348a4de783bafa19cab721c81d9d3fdea6045d1621333baa93a443b558301e"
},
"downloads": -1,
"filename": "django-db-readonly-0.3.0.tar.gz",
"has_sig": false,
"md5_digest": "8d3a7a461bd4579be5ef32ccd363a42e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5427,
"upload_time": "2012-12-05T05:21:46",
"url": "https://files.pythonhosted.org/packages/73/b6/74cdef83fbfba40b79e2285531a1b0c9430b09e27bdfd170cb8c4128104c/django-db-readonly-0.3.0.tar.gz"
}
],
"0.3.1": [
{
"comment_text": "",
"digests": {
"md5": "e706ddd216e9c9c3f66390870853c25e",
"sha256": "9ea633bdae96fd0a7ef92cd24d3aa9258aed2e64d55943863442285ad2e312cf"
},
"downloads": -1,
"filename": "django-db-readonly-0.3.1.tar.gz",
"has_sig": false,
"md5_digest": "e706ddd216e9c9c3f66390870853c25e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5486,
"upload_time": "2013-01-16T17:12:35",
"url": "https://files.pythonhosted.org/packages/d0/b8/13bb0a2ede550e8cabbf371a5913d1858d6055c1819b3cde732bf70a0cbc/django-db-readonly-0.3.1.tar.gz"
}
],
"0.3.2": [
{
"comment_text": "",
"digests": {
"md5": "059457a6bbc18e29d837e25aafad35c9",
"sha256": "0ce56b384c1246a9ed1b106eb2d5808945a13a10c92ab2ef17789d6b3b13bf20"
},
"downloads": -1,
"filename": "django-db-readonly-0.3.2.tar.gz",
"has_sig": false,
"md5_digest": "059457a6bbc18e29d837e25aafad35c9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5832,
"upload_time": "2014-04-22T00:16:46",
"url": "https://files.pythonhosted.org/packages/3c/a6/9c9416cb2c503223d850f22382b2c0261150172ad341350fdfdfcc1388f9/django-db-readonly-0.3.2.tar.gz"
}
],
"0.3.3": [
{
"comment_text": "",
"digests": {
"md5": "792925568cdc06cca4a4b53818367659",
"sha256": "cc7e1e7a1bae35e3b7751998858ea059a2e171e4ea501fa22fa70085e097b886"
},
"downloads": -1,
"filename": "django_db_readonly-0.3.3-py2-none-any.whl",
"has_sig": false,
"md5_digest": "792925568cdc06cca4a4b53818367659",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 8796,
"upload_time": "2015-03-02T18:14:51",
"url": "https://files.pythonhosted.org/packages/a7/42/078500a137b9c7f20c72492ea4d23fff29f7541adfd807e1996a12c5fab3/django_db_readonly-0.3.3-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "f22d2f14be6fc173c18319b03e394eef",
"sha256": "db834b199151e08c31bb67acb672bf3d79eea0897df4807a22897243fee4b366"
},
"downloads": -1,
"filename": "django-db-readonly-0.3.3.tar.gz",
"has_sig": false,
"md5_digest": "f22d2f14be6fc173c18319b03e394eef",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5970,
"upload_time": "2015-03-02T18:14:43",
"url": "https://files.pythonhosted.org/packages/3b/1b/a6925e4856b3b3d1d981784a3baa8739ce3e98e55653dd2a07caa53a9fc6/django-db-readonly-0.3.3.tar.gz"
}
],
"0.4": [
{
"comment_text": "",
"digests": {
"md5": "076021fe490913f31d2e7e4b30f23750",
"sha256": "e064519a014d6dcadb24b0f118c9aab02656a5688f59424dcd97d1589347ae0d"
},
"downloads": -1,
"filename": "django_db_readonly-0.4-py2-none-any.whl",
"has_sig": false,
"md5_digest": "076021fe490913f31d2e7e4b30f23750",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 8889,
"upload_time": "2015-10-14T17:39:26",
"url": "https://files.pythonhosted.org/packages/4d/e3/58fb532429cfbc01b96c1cf7a0e3c6a33c21be1389b39acc1091b905b3e3/django_db_readonly-0.4-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "34c8bd0c4a76302be736416047ecab10",
"sha256": "0fd8bdac89e20555869228c6045f14b6f7934fe9e5294cbe78743b53ddfe6dad"
},
"downloads": -1,
"filename": "django-db-readonly-0.4.tar.gz",
"has_sig": false,
"md5_digest": "34c8bd0c4a76302be736416047ecab10",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 6077,
"upload_time": "2015-10-14T17:39:22",
"url": "https://files.pythonhosted.org/packages/bb/d2/ef17efa1b762ac3162ddab6bcb30505eb76b978a3d7ff6731785213f15f3/django-db-readonly-0.4.tar.gz"
}
],
"0.4.1": [
{
"comment_text": "",
"digests": {
"md5": "ac2159c1822b5d0ef7a22149681450d6",
"sha256": "163bb9f592f0a1b9762b8a3762fee7b3792f287974974b8603e892205fecaa9b"
},
"downloads": -1,
"filename": "django_db_readonly-0.4.1-py2-none-any.whl",
"has_sig": false,
"md5_digest": "ac2159c1822b5d0ef7a22149681450d6",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 8929,
"upload_time": "2015-12-03T04:45:16",
"url": "https://files.pythonhosted.org/packages/86/31/554e0c9f8fd026dbc0cc794bc21db33ed40c417bd88b7ac728a8cae8d725/django_db_readonly-0.4.1-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "174b1de020e62d3b98c3ad1ade3f67e2",
"sha256": "2b8adf9e075ffb692d73b9fef680b9cc073dcf5a4ce03a85d99e85d85fc7c4fa"
},
"downloads": -1,
"filename": "django-db-readonly-0.4.1.tar.gz",
"has_sig": false,
"md5_digest": "174b1de020e62d3b98c3ad1ade3f67e2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 6099,
"upload_time": "2015-12-03T04:45:11",
"url": "https://files.pythonhosted.org/packages/64/16/6626313d22561e66547b75eefbd25b22e03870b7ea038bb4761ef16b544c/django-db-readonly-0.4.1.tar.gz"
}
],
"0.4.2": [
{
"comment_text": "",
"digests": {
"md5": "276d19444ff6f8d457dce506df64f312",
"sha256": "7166f0e7aee101e478619e3a93536c1dca6425d4dbfec99925490240ee3a8ddb"
},
"downloads": -1,
"filename": "django_db_readonly-0.4.2-py2-none-any.whl",
"has_sig": false,
"md5_digest": "276d19444ff6f8d457dce506df64f312",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 8943,
"upload_time": "2016-12-18T20:58:28",
"url": "https://files.pythonhosted.org/packages/be/5a/60beb423877436a0956e67f71d3a6c62cabeed8b7ade23f8e541650b04cb/django_db_readonly-0.4.2-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "1a387954f4f8431a83425f465a0f8f08",
"sha256": "7365fe61f819b958a78ae3b4e14f268fe3ed56f8387ee48b0a0e6835d297319b"
},
"downloads": -1,
"filename": "django-db-readonly-0.4.2.tar.gz",
"has_sig": false,
"md5_digest": "1a387954f4f8431a83425f465a0f8f08",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 6122,
"upload_time": "2016-12-18T20:58:26",
"url": "https://files.pythonhosted.org/packages/a6/9c/b96f0837608f33112a334d7eb40d4fd8329c2ee7f3fc8a753d452c2551d2/django-db-readonly-0.4.2.tar.gz"
}
],
"0.5.0": [
{
"comment_text": "",
"digests": {
"md5": "4cd12be758b6e8abb0bafae563a67b11",
"sha256": "586798ceb9885246524b653b2b55c570857615a697241edd134668740eea9ac3"
},
"downloads": -1,
"filename": "django_db_readonly-0.5.0-py2-none-any.whl",
"has_sig": false,
"md5_digest": "4cd12be758b6e8abb0bafae563a67b11",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 9042,
"upload_time": "2017-10-13T15:18:11",
"url": "https://files.pythonhosted.org/packages/18/2a/edda47ea1b0a75cbf0190ff4d525afbf46eb5eaf8f4ba737640d6469cfba/django_db_readonly-0.5.0-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "cfefd5f7cc13f12cadfed7efa69b4821",
"sha256": "b022d56fc80149d8d577127ad79a46f9acc370dbaf9ca16f182b3a47c7fca31f"
},
"downloads": -1,
"filename": "django-db-readonly-0.5.0.tar.gz",
"has_sig": false,
"md5_digest": "cfefd5f7cc13f12cadfed7efa69b4821",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 6184,
"upload_time": "2017-10-13T15:18:06",
"url": "https://files.pythonhosted.org/packages/ea/9e/fecaf4feb360b4182f0152b756ee7d42964c2e32e07eff33e12016021ad0/django-db-readonly-0.5.0.tar.gz"
}
],
"0.6.0": [
{
"comment_text": "",
"digests": {
"md5": "9eb51fa664e08397f15255a612c63f9c",
"sha256": "1e21209d09969ec51438c488974251e148c22823e35dd8aeb757806b47147e3c"
},
"downloads": -1,
"filename": "django_db_readonly-0.6.0-py2-none-any.whl",
"has_sig": false,
"md5_digest": "9eb51fa664e08397f15255a612c63f9c",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 7533,
"upload_time": "2019-03-18T23:30:40",
"url": "https://files.pythonhosted.org/packages/3f/71/2e7a82918667aa4c7b8748d7fd9bb24db03c9540119c5741d0c09afa33a3/django_db_readonly-0.6.0-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "bd1ca7857aeaec139aa7ba47f1e4f219",
"sha256": "db057a5f29f5aee089c3e27f2b8a2227cc23aee436eda727a179c313aa913aec"
},
"downloads": -1,
"filename": "django-db-readonly-0.6.0.tar.gz",
"has_sig": false,
"md5_digest": "bd1ca7857aeaec139aa7ba47f1e4f219",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 6276,
"upload_time": "2019-03-18T23:30:39",
"url": "https://files.pythonhosted.org/packages/61/50/4abf1c843203244dd4ebdba0a895d20fc7e370e7c5268dc38c981408d374/django-db-readonly-0.6.0.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "9eb51fa664e08397f15255a612c63f9c",
"sha256": "1e21209d09969ec51438c488974251e148c22823e35dd8aeb757806b47147e3c"
},
"downloads": -1,
"filename": "django_db_readonly-0.6.0-py2-none-any.whl",
"has_sig": false,
"md5_digest": "9eb51fa664e08397f15255a612c63f9c",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 7533,
"upload_time": "2019-03-18T23:30:40",
"url": "https://files.pythonhosted.org/packages/3f/71/2e7a82918667aa4c7b8748d7fd9bb24db03c9540119c5741d0c09afa33a3/django_db_readonly-0.6.0-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "bd1ca7857aeaec139aa7ba47f1e4f219",
"sha256": "db057a5f29f5aee089c3e27f2b8a2227cc23aee436eda727a179c313aa913aec"
},
"downloads": -1,
"filename": "django-db-readonly-0.6.0.tar.gz",
"has_sig": false,
"md5_digest": "bd1ca7857aeaec139aa7ba47f1e4f219",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 6276,
"upload_time": "2019-03-18T23:30:39",
"url": "https://files.pythonhosted.org/packages/61/50/4abf1c843203244dd4ebdba0a895d20fc7e370e7c5268dc38c981408d374/django-db-readonly-0.6.0.tar.gz"
}
]
}