We dropped support for Python 3.7, 3.8, and for pylint below 3.0.
- Added Django aliases for ranges to support psycopg 2 and 3 (#421)
- Support for Python 3.12 datetime (#427)
- Fixed location of installed LICENSE file (#431)
- Fixed ForeignKeyStringChecker referencing linter config incorrectly (#430)
- CI now tests against Django 5.1
Not released for lack of a release pipeline at the time the tag was created.
This version drops support for Python 3.6
- Fixed compatibility issue with datetime classes and python 3.12 (#425)
- Fixed compatibility issue between pylint 2.12 and 2.13 to construct ScopeConsumer tuples correctly depending on version (#358)
- pylint version is now pinned to <3 to give breathing space to update pylint-django before the major update lands
- Fixed crash with assigning a class to a variable, and referencing the variable when subclassing (#349)
- CI now tests against Django 4.0
- Fixed pickling for augment_visit (#276)
- Fixed compatibility with astroid 2.9.1 (#343)
- Removed false positive error of missing member in TextChoices tuples #298 (see pulls #330 and #345)
- Moved from Travis CI to GitHub Actions (#366 and #340)
- Added pre-commit configuration and began enforcing black/isort code formatting
- Multiple test fixes (including #338) - newer versions of pylint expect a different format for the expected messages txt files.
- Bumped dependency for pylint-django-utils to get multi-threaded pylint support
- Start testing with Django 3.2 on Python 3.9 (Michael K.)
- Teach pylint-django about all HTTP methods from the View class, not only
get
andpost
(Nicolás Quiroz) - Typo fixes for #314 (John Sandall)
- Ignore
unused-argument
for*args
,**kwards
in view method signatures
- Moved Faker dependencies to test-only #304
- Relaxed Faker package versioning requirement for
Faker
(Robin Chow)
- Allowed configuration of the Django settings module to be used via a commandline argument #286
- If Django settings are not specified via a commandline argument or environment variable, an error is issued but defaults are loaded from Django, removing the fatal error behaviour. #277 and #243
- Fixed tests to work with pylint>2.6
- Fixed
AttributeError: 'Subscript' object has no attribute 'name'
error. Closes #284 (@uy-rrodriguez) - Pin Faker version to Prevent Asteroid Crash (James Pulec)
- Remove Python 3.5 Support (EOL since Sept 2020 and Faker requires 3.6 anyway) (James Pulec)
- Fixed reverse manager
update_or_create
calls (James Pulec)
- Improvement in error message for
missing-backwards-migration-callable
(Bryan Mutai) - Start testing with Django 3.1 on Python 3.8
- Better error message when Django is not configured. Closes #277
- Rely on Django to resolve string references in ForeignKey fields. Refs #243 (Alejandro Angulo)
- Suppress
unused-argument
for functions in migration modules. Fix #267 - New checker for hard-coded
auth.User
. Fix #244
- New checker to warn about missing backwards data migrations (Bryan Mutai)
- Rename
pylint_django.checkers.db_performance
topylint_django.checkers.migrations
- Add URL to project Changelog for PyPI (Ville Skyttä)
- Fix failing test suite b/c of missing CSV dialect. Fix #268 (Alejandro Angulo)
- Do not report error for
gettext_lazy
(Antonin MOREL)
- Add support for Django 3.0 and Python 3.8 (Wayne Lambert)
- Support ASGI. Fix #258 (Sander Maijers)
- Suppress
too-many-ancestors
for class-based generic views - Add
handler400
,handler403
,handler404
to good_names. Fix #248
- Fix too broad suppression of
unused-argument
warnings for functions and methods where the first argument is namedrequest
. Now issues warnings for the rest of the arguments if they are unused. Fix #249 (Pascal Urban) - Pass arguments of
scripts/test.sh
totest_func/pytest
to ease development (Pascal Urban) - Document behavior when ForeignKey fields are referenced as strings. Fix #241
- Use
functools.wrap
to preserveleave_module
info (Mohit Solanki)
- Suppress
no-member
forManyToManyField
. Fix #192 and #237 (Pierre Chiquet) - Fix
UnboundLocalError
withForeignKey(to=)
. Fix #232 (Sardorbek Imomaliev)
- Fix
UnboundLocalError: local variable 'key_cls' referenced before assignment
for cases when models is a python package, theto
argument is a string that is used in this patternapp.Model
and also there is some otherbool
const likenull=True
right afterto
. (Sardorbek Imomaliev) - Don't crash if ForeignKey field doesn't have keyword arguments Fix #230
- Support recursive (self) ForeignKey relations. Fix #208 (Daniil Kharkov)
- Fixed
AstroidImportError
forDecimalField
. Fix #221 (Daniil Kharkov) - Add
load_configuration()
inpylint_django/__init__.py
. Fix #222 #222 - Support ForeignKey relations with
to
keyword. Fix #223 (Daniil Kharkov)
- Updating dependency version of pylint-plugin-utils as pylint 2.3 release was not compatible #220
- Improvements to tox.ini: #217 and #216 (@aerostitch)
- Add support for new load_configuration hook of pylint #214 (@matusvalo)
- 'urlpatterns' no longer reported as an invalid constant name
Bumping the version number because there's been a mix-up between GitHub tags and the versions pushed to PyPI for 2.0.3 and 2.0.4.
Please use 2.0.5 which includes the changes mentioned below!
- Avoid traceback with concurrent execution. Fix #197
- Suppress
no-member
errors forLazyFunction
in factories - Suppress
no-member
errors forRelatedManager
fields - Clean up compatibility code: PR #207
- Fixing compatibility between ranges of astroid (2.0.4 -> 2.1) and pylint (2.1.1 -> 2.2). #201 and #202
- Suppress false-positive no-self-argument in factory.post_generation. Fix #190 (Federico Bond)
- Enable testing with Django 2.1
- Add test for Model.objects.get_or_create(). Close #156
- Add test for objects.exclude(). Close #177
- Fix Instance of 'Model' has no 'id' member (no-member), fix Class 'UserCreationForm' has no 'declared_fields' member. Close #184
- Fix for Instance of 'ManyToManyField' has no 'add' member. Close #163
- Add test & fix for unused arguments on class based views
- Requires pylint >= 2.0 which doesn't support Python 2 anymore!
- Add modelform-uses-unicode check to flag dangerous use of the exclude attribute in ModelForm.Meta (Federico Bond).
- Enable test case for
urlpatterns
variable which was previously disabled - Disable
unused-argument
message for therequest
argument passed to view functions. Fix #155 - Add transformations for
model_utils
managers instead of special-casing them. Fix #160
New
JsonResponseChecker
that looks for common anti-patterns with http responses returning JSON. This includes:HttpResponse(json.dumps(data)) HttpResponse(data, content_type='application/json') JsonResponse(data, content_type=...)
- Remove the compatibility layer for older astroid versions
- Make flake8 happy. Fix #102
- Fix: compatibility with Python < 3.6 caused by
ModuleNotFoundError
not available on older versions of Python (Juan Rial) - Show README and CHANGELOG on PyPI. Fix #122
- Fix explicit unicode check with
python_2_unicode_compatible
base models (Federico Bond) - Suppress
not-an-iterable
message for 'objects'. Fix #117 - Teach pylint_django that
objects.all()
is subscriptable. Fix #144 - Suppress
invalid-name
forwsgi.application
. Fix #77 - Add test for
WSGIRequest.context
. Closes #78 - Register transforms for
FileField
. Fix #60 - New checker
pylint_django.checkers.db_performance
. Enables checking of migrations and reports when there's anAddField
operation with a default value which may slow down applying migrations on large tables. This may also lead to production tables being locked while migrations are being applied. Fix #118 - Suppress
no-member
forfactory.SubFactory
objects. Useful when model factories usefactory.SubFactory()
for foreign key relations.
- Add an optional dependency on Django
- Fix the
DjangoInstalledChecker
so it can actually warn when Django isn't available - Fix #136 by adding automated build and sanity test scripts
- Fix #133 and #134 by including package data when building wheel and tar.gz packages for PyPI (Joseph Herlant)
- Fix #129 -
Move tests under
site-packages/pylint_django
(Mr. Senko) - Fix #96 - List Django as a dependency (Mr. Senko)
- Fix #123 - Update links after the move to pylint-dev (Mr. Senko)
- Add test for Meta class from django_tables2 (Mr. Senko)
- Fix flake8 complaints (Peter Bittner)
- Add missing .txt and .rc test files to MANIFEST.in (Joseph Herlant)
- Fix #120 - TypeError: 'NamesConsumer' object does not support indexing (Simone Basso)
- Fix #110 and #35 - resolve ForeignKey models specified as strings instead of class names (Mr. Senko)
- This is the last version to support Python 2. Issues a deprecation warning!
- #109, adding 'urlpatterns', 'register', 'app_name' to good names. Obsoletes #111, fixes #108 (Vinay Pai)
- Add 'handler500' to good names (Mr. Senko)
- #103: Support factory_boy's DjangoModelFactory Meta class (Konstantinos Koukopoulos)
- #100: Fix E1101:Instance of 'proxy' has no 'format' member' when using .format() on a ugettext_lazy translation. Fixes #80 (canarduck)
- #99: Add tests and transforms for DurationField, fixes #95 (James M. Allen)
- #92: Add json field to WSGIRequest proxy (sjk4sc)
- #84: Add support for django.contrib.postgres.fields and UUIDField (Villiers Strauss)
- Stop testing with older Django versions. Currently testing with Django 1.11.x and 2.0
- Stop testing on Python 2, no functional changes in the source code though
- Update tests and require latest version of pylint (>=1.8), fixes #53, #97
- #81 Fix
'duplicate-except' false negative for except blocks which catch the
DoesNotExist
exception.
- #88 Fixed builds with Django 1.10 (thanks to federicobond)
- #91 Fixed race condition when running with pylint parallel execution mode (thanks to jeremycarroll)
- #64 "Meta is old style class" now suppressed on BaseSerializer too (thanks to unklphil)
- #70 Updating to handle newer pylint/astroid versions (thanks to iXce)
- #76 Better handling of mongoengine querysetmanager
- #73 #72 Make package zip safe to help fix some path problems
- #68 Suppressed invalid constant warning for "app_name" in urls.py
- #67 Fix view.args and view.kwargs
- #66 accessing _meta no longer causes a protected-access warning as this is a public API as of Django 1.8
- #65 Add support of mongoengine module.
- #59 Silence old-style-class for widget Meta
- #52 - Fixed stupid mistake when using versioninfo
- #51 - Fixed compatibility with pylint 1.5 / astroid 1.4.1
- #43 - Foreign
key ID access (
somefk_id
) does not raise an 'attribute not found' warning - #31 - Support for custom model managers (thanks smirolo)
- #48 - Added support for django-restframework (thanks mbertolacci)
- Pylint 1.4 dropped support for Python 2.6, therefore a constraint is added that pylint-django will only work with Python2.6 if pylint<=1.3 is installed
- #40 - pylint 1.4 warned about View and Model classes not having enough public methods; this is suppressed
- #37 - fixed an infinite loop when using astroid 1.3.3+
- #36 - no
longer warning about lack of
__unicode__
method on abstract model classes - PR #34 - prevent
warning about use of
super()
on ModelManager classes
- PR #27 - better
ForeignKey
transforms, which now work when of the formothermodule.ModelClass
. This also fixes a problem where an inferred type would be_Yes
and pylint would fail - PR #28 - better
knowledge of
ManyToManyField
classes
- Improved resilience to inference failure when Django types cannot be inferred (which can happen if Django is not on the system path
- Issue #25
Fixing cases where a module defines
get
as a method
- Fixed a problem where type inference could get into an infinite loop
- Removed usage of a Django object, as importing it caused Django to try to configure itself and thus throw an ImproperlyConfigured exception.
- Issue #7 Improved handling of Django model fields
- Issue #10 No warning about missing unicode if the Django python3/2 compatibility tools are used
- Issue #11 Improved handling of Django form fields
- Issue #12 Improved handling of Django ImageField and FileField objects
- Issue #14 Models which do not define unicode but whose parents do now have a new error (W5103) instead of incorrectly warning about no unicode being present.
- Issue #21
ForeignKey
andOneToOneField
fields on models are replaced with instance of the type they refer to in the AST, which allows pylint to generate correct warnings about attributes they may or may not have.
- Python3 is now supported
__unicode__
warning on models does not appear in Python3