{ "info": { "author": "Pascal Chambon & others", "author_email": "pythoniks@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: Unix", "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", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": ".. image:: https://travis-ci.com/pakal/compat-patcher-core.svg?branch=master\n :target: https://travis-ci.com/pakal/compat-patcher-core\n\n\n*Long term API compatibility for fast-moving projects*\n\n\nWelcome to **Compat Patcher Core**, a mini-framework to build **Compatibility Patchers**. These companion applications\nallow your favorite software (a framework, a library...) to keep long term API stability towards its ecosystem\n(plugins, bridges to other applications...), while still keeping the main codebase clean, and getting new features at\na good pace.\n\nCompatibility Patchers inject backward/forward compatibility shims (like class/function/attribute aliases, restore\nfeatures which were dropped/externalized because \"not used enough\" or \"outside the scope of the library\", and tweak\nthe signatures and behaviour of callables (eg. for arguments which disappeared, or which became mandatory). It can\neven setup lazy \"import aliases\", so that code can import a moved module both from its old and new location.\n\nThese shims allows you to upgrade your dependencies one at a time, when their maintainer finally had some time for a\ncode update, or when missing features and bugfixes justify a fork. Most importantly, they allow you to not get stuck,\nwhen deadlines are tight, and crucial dependencies have conflicting expectations regarding the software version.\n\nNote that compatibility Patchers are not supposed to undo changes related to security (default access permissions,\nmarkup escaping, cookie parameters...), because of the risks involved. Also, changes that only impact project-level\ncode (eg. new mandatory *settings*) should not get patched, since it's easier and cleaner for to simply update project\ncode.\n\nTechnically, Compatibility Patchers are packages which manage a set of **fixers**, tiny utilities (often less than 10\nlines of code) which advertise the change that they make, the software versions that they support, and which patch the\ntarget code on demand. By applying these fixers in a proper order (sometimes before, sometimes after the\ninitialization of the patched software itself), Compatibility Patchers can easily \"time travel\", and work around multiple\nbreaking changes which target the same part of the code (e.g. a content handler being added and then removed).\n\nCompat Patcher Core holds the core logice of that system, via easily extendable classes: a registry system,\nmonkey-patching utilities, and a generic runner to be called at the very start of your application. It also contains\na cookiecutter recipe to setup your own Compatibility Patcher in a few minutes, with test scaffolding and packaging\nmetadata ready for launch.\n\nDocumentation is available on `Read The Docs `_\n\nSources are available on `Github `_\n\n\nWhich applications currently benefit from this system?\n\n- The Django Web Framework via `Django-Compat-Patcher `_", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/pakal/compat-patcher", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "compat-patcher-core", "package_url": "https://pypi.org/project/compat-patcher-core/", "platform": "any", "project_url": "https://pypi.org/project/compat-patcher-core/", "project_urls": { "Homepage": "https://github.com/pakal/compat-patcher" }, "release_url": "https://pypi.org/project/compat-patcher-core/1.0/", "requires_dist": null, "requires_python": "", "summary": "A patcher system to allow easy and lasting API compatibility.", "version": "1.0" }, "last_serial": 5463352, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "c4b221fb3a0f38dab2dd3be0349c76bb", "sha256": "88cf7a6b385cc7f853930ed25e44106bb672f13b4bbc9a80f0efa5dc9f5e816f" }, "downloads": -1, "filename": "compat-patcher-core-1.0.tar.gz", "has_sig": false, "md5_digest": "c4b221fb3a0f38dab2dd3be0349c76bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42550, "upload_time": "2019-06-28T20:49:52", "url": "https://files.pythonhosted.org/packages/ba/ee/0610b5cce8b11e665b834dd8e08a53873af20b6d07970000468ff72b4047/compat-patcher-core-1.0.tar.gz" } ], "1.0a2": [ { "comment_text": "", "digests": { "md5": "f2e86b979fa90bee83e291a388c6e875", "sha256": "1df0caaa493b373b891e7d8fb0de8da1f386d4590086056e325a966aec388809" }, "downloads": -1, "filename": "compat-patcher-core-1.0a2.tar.gz", "has_sig": false, "md5_digest": "f2e86b979fa90bee83e291a388c6e875", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22180, "upload_time": "2019-06-18T18:49:54", "url": "https://files.pythonhosted.org/packages/ff/45/000cbda620e6b32079656e408d6d8d7f8dfc4cfface01a1cf7d7a11802d3/compat-patcher-core-1.0a2.tar.gz" } ], "1.0a3": [ { "comment_text": "", "digests": { "md5": "dab0996a6f00d59ce1ba2d423a19f2e9", "sha256": "cb6a4997147b3d434d8089a53cb3d1312c73202a99355b48b157a698ceab3ad2" }, "downloads": -1, "filename": "compat-patcher-core-1.0a3.tar.gz", "has_sig": false, "md5_digest": "dab0996a6f00d59ce1ba2d423a19f2e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31476, "upload_time": "2019-06-20T21:18:25", "url": "https://files.pythonhosted.org/packages/e6/d8/e2ae923a82d2276d3aaae56b725ca21a2e4c813076198250ca5f23d59bb1/compat-patcher-core-1.0a3.tar.gz" } ], "1.0a4": [ { "comment_text": "", "digests": { "md5": "490175dda7ad1a06ab98e300ac63c48a", "sha256": "c0f9bd79e9b3f87c1fc629dae7d4dedfd7564a90ccb3effe989259bc8eb2e915" }, "downloads": -1, "filename": "compat-patcher-core-1.0a4.tar.gz", "has_sig": false, "md5_digest": "490175dda7ad1a06ab98e300ac63c48a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42538, "upload_time": "2019-06-22T19:52:05", "url": "https://files.pythonhosted.org/packages/04/d2/2416be9a8ba7eae6038d5cec1dc48887cfb366038fa3462ea92e50c4ff7e/compat-patcher-core-1.0a4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c4b221fb3a0f38dab2dd3be0349c76bb", "sha256": "88cf7a6b385cc7f853930ed25e44106bb672f13b4bbc9a80f0efa5dc9f5e816f" }, "downloads": -1, "filename": "compat-patcher-core-1.0.tar.gz", "has_sig": false, "md5_digest": "c4b221fb3a0f38dab2dd3be0349c76bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42550, "upload_time": "2019-06-28T20:49:52", "url": "https://files.pythonhosted.org/packages/ba/ee/0610b5cce8b11e665b834dd8e08a53873af20b6d07970000468ff72b4047/compat-patcher-core-1.0.tar.gz" } ] }