Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python.announce > #2392

Announcing django-compat-patcher 0.2

Path csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail
From Pascal Chambon <chambon.pascal@gmail.com>
Newsgroups comp.lang.python.announce
Subject Announcing django-compat-patcher 0.2
Date Wed, 1 Feb 2017 20:15:30 +0100
Lines 42
Approved python-announce-list@python.org
Message-ID <mailman.249.1486043198.2473.python-announce-list@python.org> (permalink)
References <589233D2.80804@gmail.com>
Mime-Version 1.0
Content-Type text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding 8bit
X-Trace news.uni-berlin.de C4HF4W0NO2hJuVynkwoFfgMzOIvEDml+8jSvc6filqqA==
Return-Path <chambon.pascal@gmail.com>
X-Original-To python-announce-list@python.org
Delivered-To python-announce-list@mail.python.org
X-Spam-Status OK 0.000
X-Spam-Evidence '*H*': 1.00; '*S*': 0.00; 'url:pypi': 0.03; 'broken': 0.03; 'url:github': 0.05; 'versions,': 0.05; 'deadlines': 0.07; 'deprecated': 0.07; 'extends': 0.07; 'framework.': 0.07; 'semantic': 0.07; '2to3': 0.09; '8bit%:26': 0.09; 'backwards': 0.09; 'django,': 0.09; 'doesn\xe2\x80\x99t': 0.09; 'make,': 0.09; 'patches': 0.09; 'django': 0.11; '<>.': 0.13; 'importing': 0.15; '(eg.': 0.16; '0.2': 0.16; 'callables': 0.16; 'conflicting': 0.16; 'deprecation': 0.16; 'dotted': 0.16; 'ecosystem': 0.16; 'released.': 0.16; 'reusable': 0.16; 'subject:django': 0.16; 'contribute': 0.16; 'app': 0.20; 'library': 0.20; 'changes': 0.20; 'versions': 0.22; 'referring': 0.22; 'external': 0.23; 'module': 0.23; 'header:User-Agent:1': 0.26; 'ones,': 0.27; 'behaviour': 0.29; 'can\xe2\x80\x99t': 0.29; 'closer': 0.29; 'preserve': 0.29; 'workaround': 0.29; 'code': 0.30; 'core': 0.30; 'case,': 0.31; 'developing': 0.31; 'url:python': 0.31; 'allows': 0.32; 'received:google.com': 0.32; 'object,': 0.33; 'suddenly': 0.33; 'expect': 0.34; 'instead': 0.35; 'message-id:@gmail.com': 0.35; 'integrate': 0.35; 'replaced': 0.35; 'rather': 0.35; 'sometimes': 0.35; 'url:org': 0.36; 'being': 0.36; 'project': 0.36; 'should': 0.36; 'framework': 0.36; 'well.': 0.37; 'support,': 0.37; 'data': 0.38; 'subject:-': 0.39; 'to:addr:python.org': 0.39; 'proto:https': 0.40; 'received:192': 0.40; 'received:io': 0.40; 'received:psf.io': 0.40; 'target': 0.60; 'your': 0.60; 'applying': 0.60; '8bit%:46': 0.63; 'opportunity,': 0.66; 'policy': 0.67; '8bit%:21': 0.67; 'to:addr:python-announce-list': 0.71; 'advertise': 0.79; 'manages': 0.84; 'subject:Announcing': 0.84; 'troubles': 0.84; 'demand.': 0.91; '***': 0.95
DKIM-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:from:subject:message-id:date:user-agent:mime-version; bh=S7WhUOdimAfe47Q5HenQP1mE2Mepw4CfUlScTu7mFMM=; b=L7M4vxJGeliXarZYZiSM0AVm8tXPXHAehN8eb8k7Y6lrfuaHvXX0axa2+MTcqlGIT1 2+s9xv03f+hODSBAThIsAtivinnc17KUdn/NDTZZ1aWgdYtB6HmnG/6ldFDLNPreDoqc r6hRnr+eyky9etJgJbMMOjAROqPHKQN7ELzhp3DJqfmNxC8aDmvUv15wLHbFlfEKpD+S xZjdhblI+zz/KQMKOtH/LHJKpg0ILBwVUBOVDXX2kF0PaCSfoo2Y6ZJecuWkDCGVlgO+ pSEF7WNOZhBTmtIaFvsjY89Sw7uN9bjoiJSq5L1zi32D1PZ8/0TR0wdWQ1V1rz5645Na pdng==
X-Google-DKIM-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version; bh=S7WhUOdimAfe47Q5HenQP1mE2Mepw4CfUlScTu7mFMM=; b=XY3SEUi3YWVy4wqJFkNdHts/DvA6ZsFpFnh1xEHyT5/HSAJ13ti1ZpTuQcEqL9hPFp 9UmdNQkpbtD/5/1jRClOIwbS6ib8PRVt343wQDr9fSQoIZydjoTBSBQTy7QBIox4pm6w CbPqWiZWjBF4yjo2Pvf2EPmLdffX+1iFTykEC0IpyKYx2PQeUz26Itq/WoXjF5Pb0x0R pvhUMYNiHAYRos2qgQr9Gfz48nFE5/L3/7cOreaxD9wLbo+c50r4FwQ058rFHV853cTl ENchATuW+Yb3Z9WbMKheEJUskbRvtNZW0+n/Rph7OB8Yb7vPWhOIGZ8QnS4jtppTAcKu x3tQ==
X-Gm-Message-State AIkVDXJExn/X6wgJvwToOYPNtiMk8schlQ0eGKcca7HvZk07uLDIa0tRNEp+Miwu4PTvBw==
X-Received by 10.223.133.98 with SMTP id 89mr4025651wrh.200.1485976532638; Wed, 01 Feb 2017 11:15:32 -0800 (PST)
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0
X-Mailman-Approved-At Thu, 02 Feb 2017 08:46:37 -0500
X-Content-Filtered-By Mailman/MimeDel 2.1.23
X-BeenThere python-announce-list@python.org
X-Mailman-Version 2.1.23
Precedence list
List-Id Announcement-only list for the Python programming language <python-announce-list.python.org>
List-Unsubscribe <https://mail.python.org/mailman/options/python-announce-list>, <mailto:python-announce-list-request@python.org?subject=unsubscribe>
List-Archive <http://mail.python.org/pipermail/python-announce-list/>
List-Post <mailto:python-announce-list@python.org>
List-Help <mailto:python-announce-list-request@python.org?subject=help>
List-Subscribe <https://mail.python.org/mailman/listinfo/python-announce-list>, <mailto:python-announce-list-request@python.org?subject=subscribe>
X-Mailman-Original-Message-ID <589233D2.80804@gmail.com>
Xref csiph.com comp.lang.python.announce:2392

Show key headers only | View raw


*** django-compat-patcher 0.2 has been released. ***

DCP is a “magic” package which adds backwards/forwards compatibility 
patches to Django, so that your app ecosystem doesn’t get broken by 
trivial changes made to the core of the framework.

It injects compatibility shims like function/attribute aliases, restores 
data structures which were replaced by stdlib ones, extends the 
behaviour of callables (eg. referring to a view by object, by name, or 
by dotted path), and can even preserve deprecated module as “import 
aliases” (ex. keep importing from “django.contrib.comments” instead of 
the now external “django_comments”).

This allows to you upgrade your dependencies one at a time, to 
fork/patch them when you have a proper opportunity, and most importantly 
to not get stuck, when deadlines are tight and your dependencies 
suddenly have conflicting requirements. DCP somehow relaxes the 
deprecation policy of Django, so that it comes closer to semantic 
versioning.

Technically, DCP manages a set of “fixers”, small utilities which 
advertise the change that they make, the versions of Django that they 
support, and which on monkey-patch the Django framework on demand. By 
applying these fixers in a proper order (sometimes before, sometimes 
after django.setup()), DCP can workaround multiple breaking changes 
which target the same part of the code (eg. a tag library being added 
and then removed).

Beware, DCP is aimed at project maintainers. If you are developing a 
reusable Django application, you can’t expect all your users to 
integrate DCP as well. In this case, to support a wide range of Django 
versions, you should rather use a toolkit like Django-compat 
<https://github.com/arteria/django-compat>. You may think of DCP as a 
“runtime 2to3 for Django’, wherease Django-Compat is rather a “six 
module for Django”.

Feel free to contribute new fixers, for backwards or forwards 
compatibility, depending on the compatibility troubles you encounter on 
your projects

https://pypi.python.org/pypi/django-compat-patcher
https://github.com/pakal/django-compat-patcher

Back to comp.lang.python.announce | Previous | Next | Find similar | Unroll thread


Thread

Announcing django-compat-patcher 0.2 Pascal Chambon <chambon.pascal@gmail.com> - 2017-02-01 20:15 +0100

csiph-web