Skip to main content

A patcher system to allow easy and lasting API compatibility

Project description

https://travis-ci.com/pakal/compat-patcher-core.svg?branch=master

Long term API compatibility for fast-moving projects

Welcome to Compat Patcher Core, a mini-framework to build Compatibility Patchers. These companion applications allow your favorite software (a framework, a library…) to keep long term API stability towards its ecosystem (plugins, bridges to other applications…), while still keeping the main codebase clean, and getting new features at a good pace.

Compatibility Patchers inject backward/forward compatibility shims (like class/function/attribute aliases), restore features which were dropped/externalized because “not used enough” or “outside the scope of the library”, and tweak the signatures and behaviour of callables (eg. for arguments which disappeared, or which became mandatory). It can even setup lazy “import aliases”, so that code can import a moved module both from its old and new location.

These shims allows you to upgrade your dependencies one at a time, when their maintainer finally had some time for a code update, or when missing features and bugfixes justify a fork. Most importantly, they allow you to not get stuck, when deadlines are tight, and crucial dependencies have conflicting expectations regarding the software version.

Note that compatibility Patchers are not supposed to undo changes related to security (default access permissions, markup escaping, cookie parameters…), because of the risks involved. Also, changes that only impact project-level code (eg. new mandatory settings) should not get patched, since it’s easier and cleaner for to simply update project code.

Technically, Compatibility Patchers are packages which manage a set of fixers, tiny utilities (often less than 10 lines of code) which advertise the change that they make, the software versions that they support, and which patch the target code on demand. By applying these fixers in a proper order (sometimes before, sometimes after the initialization of the patched software itself), Compatibility Patchers can easily “time travel”, and work around multiple breaking changes which target the same part of the code (e.g. a content handler being added and then removed).

Compat Patcher Core holds the core logice of that system, via easily extendable classes: a registry system, monkey-patching utilities, and a generic runner to be called at the very start of your application. It also contains a cookiecutter recipe to setup your own Compatibility Patcher in a few minutes, with test scaffolding and packaging metadata ready for launch.

Documentation is available on Read The Docs

Sources are available on Github

Which applications currently benefit from this system?

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

compat-patcher-core-2.2.tar.gz (18.5 kB view details)

Uploaded Source

File details

Details for the file compat-patcher-core-2.2.tar.gz.

File metadata

  • Download URL: compat-patcher-core-2.2.tar.gz
  • Upload date:
  • Size: 18.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.2

File hashes

Hashes for compat-patcher-core-2.2.tar.gz
Algorithm Hash digest
SHA256 3e5e5b40a13382981c7d536869706d152db6fdb048e4fabd1c3b748228996fba
MD5 30acd6479ac2ef59bd83eb6ceed73dfa
BLAKE2b-256 af939c30c95004b48af066bbe725eb44ff516b573dc1bb8392a71660cd88c12f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page