有没有办法检查django版本的功能弃用?

时间:2014-04-22 11:27:25

标签: python django deprecation-warning

由于某些功能因新版本的Django而被弃用,有没有办法在github上检查现有项目代码。

一个工具可以做到这一点。有没有办法通过测试用例来检测它。

是否可以针对python版本执行相同的操作。

我猜一种方法可能是使用tox运行特定版本的django / python,然后检查错误。

我只是在寻找更优雅或更直接的东西,比如说 “注意此功能已被弃用” ,这可以通过强类型完成像Java这样的语言。

如果想要构建这样一个工具,如果可能的话,那可能是什么起点。

2 个答案:

答案 0 :(得分:2)

我认为这必须在你的项目的单元测试中。

如果您的测试运行的代码将在Django的未来版本中弃用,您将获得warnings。如果您已经跳转到已弃用该功能的Django版本,那么您当然会获得例外和测试失败。

您可以tell the Python interpreter向异常发出警告,这会导致测试失败。

说明here将相同的技巧应用于流行的nosetests测试框架。

如果您已经知道(来自Django docs)您正在编写的某些代码需要根据Django版本进行更改,那么它就会运行(例如,您正在分发可重用的Django应用程序)我会建议使用try ... except

feature detection表单

例如,我想在条件上使用Django的new transaction.atomic feature> = 1.6:。

正如您所料,我随后使用help of Tox针对不同版本的Django运行测试。

答案 1 :(得分:2)

这就是我如何运行我的一个项目来对抗Django 1.6,1.7和1.8以及弃用警告:

[tox]
envlist = {py27,py34}-{django16,django17,django18}

[testenv]
basepython =
           py27: python2.7
           py34: python3.4

deps =
     django16: Django>=1.6,<1.7
     django17: Django>=1.7,<1.8
     django18: Django>=1.8,<1.9

commands =
         python -Wmodule ./manage.py test

-Wmodule参数会导致Python在模块第一次出现时输出每个弃用警告,这对我来说已经足够了。我能够处理我使用from django.core.cache import get_cache的实例,它将在Django 1.9中消失。

如果-Wmodule输出太多,您可能希望更具选择性。 Python的文档给出了lowdown on how to use this argument。我故意没有使用-Werror因为这不会使单个测试失败但会使我的测试套件无法执行任何测试,因为套件使用已弃用的功能。