{ "info": { "author": "Russell Keith-Magee", "author_email": "russell.keith-magee@zapier.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: Django", "Framework :: Django :: 1.8", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development", "Topic :: Utilities" ], "description": "Django Birdcage\n===============\n\n.. image:: https://img.shields.io/pypi/pyversions/django-birdcage.svg\n :target: https://pypi.python.org/pypi/django-birdcage\n\n.. image:: https://img.shields.io/pypi/v/django-birdcage.svg\n :target: https://pypi.python.org/pypi/django-birdcage\n\n.. image:: https://img.shields.io/pypi/status/django-birdcage.svg\n :target: https://pypi.python.org/pypi/django-birdcage\n\n.. image:: https://img.shields.io/pypi/l/django-birdcage.svg\n :target: https://github.com/pybee/django-birdcage/blob/master/LICENSE\n\n.. image:: https://travis-ci.org/freakboy3742/django-birdcage.svg?branch=master\n :target: https://travis-ci.org/freakboy3742/django-birdcage\n\nWhen deploying large websites, operations teams will sometimes deploy new code across a subset of the entire collection of webservers. This approach is called a \"Canary\" deployment. Most users will continue to be served using the old code; only those users hitting a \"Canary\" machine will see the new code.\n\nLarge websites will often use a Canary when the perceived risk of an upgrade is high. For example, upgrading the Django version from 1.8 LTS to 1.11 LTS on a complex site will generally be considered a risky upgrade; a Canary will be used to test that the upgrade is working as expected before switching all webservers over to the upgraded codebase.\n\nUnfortunately, while Django has good *backwards* compatibility guarantees, Canary deployments require *forwards* compatibility as well. This is beacuse a user may have one request served on the new codebase, but subsequent updates served from the old codebase. If information (such as security tokens) aren't both backwards *and* forwards compatible between releases, some users will see errors as the move back and forth between old and new codebases.\n\nBirdcage is a project consisting of tools to help you manage Canary upgrades, by provided *forwards* compatible shims for known problems in Django.\n\nWhat does Birdcage address?\n---------------------------\n\nDjango 1.10: Salted CSRF tokens\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nDjango 1.10 `introduced a change to CSRF handling `__ to protect against `BREACH `__ attacks. Django 1.10+ can interpret Django < 1.10 CSRF tokens; however, if a user is issued a Django 1.10+ CSRF token, it will be rejected as invalid by Django 1.8.\n\nTo address this problem, Birdcage provides a version of Django 1.8's CsrfViewMiddleware that can interpret Django 1.10's CSRF tokens.\n\n* In the settings for your Django 1.8 codebase, replace ``django.middleware.csrf.CsrfViewMiddleware`` in your ``MIDDLEWARE`` setting with ``birdcage.v1_11.csrf.CsrfViewMiddleware``.\n\n* In your Django 1.10+ codebase, continue to use the Django CsrfViewMiddleware.\n\nWhy is it called Birdcage?\n--------------------------\n\nWell you have to put your canaries *somewhere* to keep them safe... :-)\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/zapier/django-birdcage", "keywords": "birdcage,Django,compatibility", "license": "New BSD", "maintainer": "", "maintainer_email": "", "name": "django-birdcage", "package_url": "https://pypi.org/project/django-birdcage/", "platform": "", "project_url": "https://pypi.org/project/django-birdcage/", "project_urls": { "Homepage": "http://github.com/zapier/django-birdcage" }, "release_url": "https://pypi.org/project/django-birdcage/1.0.0/", "requires_dist": null, "requires_python": "", "summary": "Utilities for maintaining forwards compatibility with Django releases.", "version": "1.0.0" }, "last_serial": 3202811, "releases": { "0.8.0": [ { "comment_text": "", "digests": { "md5": "35216c6a47e0c0703cb3ec9f8ed29cfc", "sha256": "cc9b00f4b90e0def695f233c3b430e230a7e0d03f3d0ee64eed719668866d951" }, "downloads": -1, "filename": "django_birdcage-0.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "35216c6a47e0c0703cb3ec9f8ed29cfc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7757, "upload_time": "2017-09-22T05:46:18", "url": "https://files.pythonhosted.org/packages/56/7f/3a66bb9303e8f2e1e9767a8499e3326c8382a8cd42d1637a2101217a747e/django_birdcage-0.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5cbad6fd4fd9bc4878b3ee55b2d49738", "sha256": "c5a461ca759c3e3a6e1ce865a85053fae3d91a391f74d066dd14ac897f9bcb88" }, "downloads": -1, "filename": "django-birdcage-0.8.0.tar.gz", "has_sig": false, "md5_digest": "5cbad6fd4fd9bc4878b3ee55b2d49738", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6596, "upload_time": "2017-09-22T05:46:20", "url": "https://files.pythonhosted.org/packages/90/33/bc4a49ce10b9d5a37128a20b17e5d388b148528265d0152d955a703d7530/django-birdcage-0.8.0.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "0bb033b27411dd1daa21b2af4b2c2072", "sha256": "78a492fdf5164ae0227706243a245b398b41a4fb1ad390adca3c15fcfc36830d" }, "downloads": -1, "filename": "django_birdcage-0.8.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0bb033b27411dd1daa21b2af4b2c2072", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7764, "upload_time": "2017-09-22T05:55:24", "url": "https://files.pythonhosted.org/packages/05/03/919c4fa14f4994f4c93953bb8c09b44a8dc52bfbb762b2c32bd246a24a45/django_birdcage-0.8.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1416ddaf1a7ef1d88a8b4f3014bd9e95", "sha256": "565533a154a325fad90c248080c316a3747bfec11cadb858e5486d2ffa8bd585" }, "downloads": -1, "filename": "django-birdcage-0.8.1.tar.gz", "has_sig": false, "md5_digest": "1416ddaf1a7ef1d88a8b4f3014bd9e95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6604, "upload_time": "2017-09-22T05:55:25", "url": "https://files.pythonhosted.org/packages/cd/bc/8cabb1c36a28e58740ed2615bd46123641f53d08e967c98991deb1295d52/django-birdcage-0.8.1.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "1b7cd52bddb2440a737681722bdc6e3f", "sha256": "fe4a50d54bb67013d64154653da069d1b7f17906e2f17a2f820cf32cace2f99e" }, "downloads": -1, "filename": "django_birdcage-0.9.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1b7cd52bddb2440a737681722bdc6e3f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11834, "upload_time": "2017-09-25T01:03:23", "url": "https://files.pythonhosted.org/packages/6d/5d/a8a2f878912f154621e92a805313816a970f85f743b71be09d4b071d3177/django_birdcage-0.9.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b1bab07d87e3172e2c45d11cb4957cf1", "sha256": "544b1c54fe9c6b65ed59a005e3ed5c70e585ad12be76f8df4be0878e0ce51e6d" }, "downloads": -1, "filename": "django-birdcage-0.9.0.tar.gz", "has_sig": false, "md5_digest": "b1bab07d87e3172e2c45d11cb4957cf1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10178, "upload_time": "2017-09-25T01:03:24", "url": "https://files.pythonhosted.org/packages/86/2a/625502c3433ac796e8f3cab6fab949ba49823c0411066ded12bc1f7fdfb7/django-birdcage-0.9.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "d5deb68a5d2375320cc2c705d7ed5646", "sha256": "a8352df78df0c58d8ee9ce453abb02e18cfc630045fb6fe8b16fa436aeab94c7" }, "downloads": -1, "filename": "django_birdcage-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d5deb68a5d2375320cc2c705d7ed5646", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11831, "upload_time": "2017-09-26T03:18:29", "url": "https://files.pythonhosted.org/packages/11/e1/449eafcb72ca77c8b671beead1fbd904a7cc616ed6d094dcb7b8beed8314/django_birdcage-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b5ebf1dc24ebf6f551f2896d3c2199ca", "sha256": "b0c60fae6092f99134b7e66f1ce4619ff3ffa74a79baf5b59f6ab54fc92f7dec" }, "downloads": -1, "filename": "django-birdcage-1.0.0.tar.gz", "has_sig": false, "md5_digest": "b5ebf1dc24ebf6f551f2896d3c2199ca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10189, "upload_time": "2017-09-26T03:18:33", "url": "https://files.pythonhosted.org/packages/3c/a8/7d7c806cadd112fdaffb9ca046278d2a0694c7d41396c8e182598ff6403f/django-birdcage-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d5deb68a5d2375320cc2c705d7ed5646", "sha256": "a8352df78df0c58d8ee9ce453abb02e18cfc630045fb6fe8b16fa436aeab94c7" }, "downloads": -1, "filename": "django_birdcage-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d5deb68a5d2375320cc2c705d7ed5646", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11831, "upload_time": "2017-09-26T03:18:29", "url": "https://files.pythonhosted.org/packages/11/e1/449eafcb72ca77c8b671beead1fbd904a7cc616ed6d094dcb7b8beed8314/django_birdcage-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b5ebf1dc24ebf6f551f2896d3c2199ca", "sha256": "b0c60fae6092f99134b7e66f1ce4619ff3ffa74a79baf5b59f6ab54fc92f7dec" }, "downloads": -1, "filename": "django-birdcage-1.0.0.tar.gz", "has_sig": false, "md5_digest": "b5ebf1dc24ebf6f551f2896d3c2199ca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10189, "upload_time": "2017-09-26T03:18:33", "url": "https://files.pythonhosted.org/packages/3c/a8/7d7c806cadd112fdaffb9ca046278d2a0694c7d41396c8e182598ff6403f/django-birdcage-1.0.0.tar.gz" } ] }