pylint-django
is a Pylint plugin for improving code analysis when analysing code using Django. It is also used by the Prospector tool.
To install:
pip install pylint-django
WARNING: pylint-django
will not install Django
by default because this causes more trouble than good, see discussion. If you wish to automatically install the latest version of Django
then:
pip install pylint-django[with_django]
otherwise sort out your testing environment and please DO NOT report issues about missing Django!
Ensure pylint-django
is installed and on your path and then execute:
pylint --load-plugins pylint_django [..other options..] <path_to_your_sources>
If you have prospector
installed, then pylint-django
will already be installed as a dependency, and will be activated automatically if Django is detected:
prospector [..other options..]
- Prevents warnings about Django-generated attributes such as
Model.objects
orViews.request
. - Prevents warnings when using
ForeignKey
attributes ("Instance of ForeignKey has no <x> member"). - Fixes pylint's knowledge of the types of Model and Form field attributes
- Validates
Model.__unicode__
methods. Meta
informational classes on forms and models do not generate errors.
pylint_django.checkers.db_performance
looks for migrations which add new model fields and these fields have a default value. According to Django docs this may have performance penalties especially on large tables. The prefered way is to add a new DB column with null=True
because it will be created instantly and then possibly populate the table with the desired default values.
Only the last migration from a sub-directory will be examined!
This plugin is disabled by default! To enable it:
pylint --load-plugins pylint_django --load-plugins pylint_django.checkers.db_performance
Please feel free to add your name to the CONTRIBUTORS.rst
file if you want to be credited when pull requests get merged. You can also add to the CHANGELOG.rst
file if you wish, although we'll also do that when merging.
The structure of the test package follows that from pylint itself.
It is fairly simple: create a module starting with func_
followed by a test name, and insert into it some code. The tests will run pylint against these modules. If the idea is that no messages now occur, then that is fine, just check to see if it works by running scripts/test.sh
.
Ideally, add some pylint error suppression messages to the file to prevent spurious warnings, since these are all tiny little modules not designed to do anything so there's no need to be perfect.
It is possible to make tests with expected error output, for example, if adding a new message or simply accepting that pylint is supposed to warn. A test_file_name.txt
file contains a list of expected error messages in the format error-type:line number:class name or empty:1st line of detailed error text
.
pylint-django
is available under the GPLv2 license.