pylint-django


Namepylint-django JSON
Version 2.5.4 PyPI version JSON
download
home_pagehttps://github.com/PyCQA/pylint-django
SummaryA Pylint plugin to help Pylint understand the Django web framework
upload_time2023-10-22 03:28:58
maintainer
docs_urlNone
authorCarl Crowder
requires_python>=3.7,<4.0
license
keywords pylint django plugin
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage
            pylint-django
=============

.. image:: https://github.com/PyCQA/pylint-django/actions/workflows/build.yml/badge.svg
    :target: https://github.com/PyCQA/pylint-django/actions/workflows/build.yml

.. image:: https://coveralls.io/repos/github/PyCQA/pylint-django/badge.svg?branch=master
     :target: https://coveralls.io/github/PyCQA/pylint-django?branch=master

.. image:: https://img.shields.io/pypi/v/pylint-django.svg
    :target: https://pypi.python.org/pypi/pylint-django


About
-----

``pylint-django`` is a `Pylint <http://pylint.org>`__ plugin for improving code
analysis when analysing code using Django. It is also used by the
`Prospector <https://github.com/landscapeio/prospector>`__ tool.


Installation
------------

To install::

    pip install pylint-django


**WARNING:** ``pylint-django`` will not install ``Django`` by default because
this causes more trouble than good,
`see discussion <https://github.com/PyCQA/pylint-django/pull/132>`__. 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!


Usage
-----


Ensure ``pylint-django`` is installed and on your path. In order to access some
of the internal Django features to improve pylint inspections, you should also
provide a Django settings module appropriate to your project. This can be done
either with an environment variable::

    DJANGO_SETTINGS_MODULE=your.app.settings pylint --load-plugins pylint_django [..other options..] <path_to_your_sources>

Alternatively, this can be passed in as a commandline flag::

    pylint --load-plugins pylint_django --django-settings-module=your.app.settings [..other options..] <path_to_your_sources>

If you do not configure Django, default settings will be used but this will not include, for
example, which applications to include in `INSTALLED_APPS` and so the linting and type inference
will be less accurate. It is recommended to specify a settings module.

Prospector
----------

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..]


Features
--------

* Prevents warnings about Django-generated attributes such as
  ``Model.objects`` or ``Views.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.
* Flags dangerous use of the exclude attribute in ModelForm.Meta.
* Uses Django's internal machinery to try and resolve models referenced as
  strings in ForeignKey fields. That relies on ``django.setup()`` which needs
  the appropriate project settings defined!


Additional plugins
------------------

``pylint_django.checkers.migrations`` looks for migrations which:

- add new model fields and these fields have a default value. According to
  `Django docs <https://docs.djangoproject.com/en/2.0/topics/migrations/#postgresql>`_
  this may have performance penalties especially on large tables. The preferred 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;
- are ``migrations.RunPython()`` without a reverse callable - these will result in
  non reversible data migrations;


This plugin is disabled by default! To enable it::

    pylint --load-plugins pylint_django --load-plugins pylint_django.checkers.migrations


Contributing
------------

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.


Tests
-----

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``.

Any command line argument passed to ``scripts/test.sh`` will be passed to the internal invocation of ``pytest``.
For example if you want to debug the tests you can execute ``scripts/test.sh --capture=no``.
A specific test case can be run by filtering based on the file name of the test case ``./scripts/test.sh -k 'func_noerror_views'``.

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:confidence or empty``.


License
-------

``pylint-django`` is available under the GPLv2 license.


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/PyCQA/pylint-django",
    "name": "pylint-django",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.7,<4.0",
    "maintainer_email": "",
    "keywords": "pylint,django,plugin",
    "author": "Carl Crowder",
    "author_email": "git@carlcrowder.com",
    "download_url": "https://files.pythonhosted.org/packages/43/1d/237b80717278c23a1178b209d5f7a3023653c706c2ef6aee0c8876238ded/pylint_django-2.5.4.tar.gz",
    "platform": null,
    "description": "pylint-django\n=============\n\n.. image:: https://github.com/PyCQA/pylint-django/actions/workflows/build.yml/badge.svg\n    :target: https://github.com/PyCQA/pylint-django/actions/workflows/build.yml\n\n.. image:: https://coveralls.io/repos/github/PyCQA/pylint-django/badge.svg?branch=master\n     :target: https://coveralls.io/github/PyCQA/pylint-django?branch=master\n\n.. image:: https://img.shields.io/pypi/v/pylint-django.svg\n    :target: https://pypi.python.org/pypi/pylint-django\n\n\nAbout\n-----\n\n``pylint-django`` is a `Pylint <http://pylint.org>`__ plugin for improving code\nanalysis when analysing code using Django. It is also used by the\n`Prospector <https://github.com/landscapeio/prospector>`__ tool.\n\n\nInstallation\n------------\n\nTo install::\n\n    pip install pylint-django\n\n\n**WARNING:** ``pylint-django`` will not install ``Django`` by default because\nthis causes more trouble than good,\n`see discussion <https://github.com/PyCQA/pylint-django/pull/132>`__. If you wish\nto automatically install the latest version of ``Django`` then::\n\n    pip install pylint-django[with-django]\n\notherwise sort out your testing environment and please **DO NOT** report issues\nabout missing Django!\n\n\nUsage\n-----\n\n\nEnsure ``pylint-django`` is installed and on your path. In order to access some\nof the internal Django features to improve pylint inspections, you should also\nprovide a Django settings module appropriate to your project. This can be done\neither with an environment variable::\n\n    DJANGO_SETTINGS_MODULE=your.app.settings pylint --load-plugins pylint_django [..other options..] <path_to_your_sources>\n\nAlternatively, this can be passed in as a commandline flag::\n\n    pylint --load-plugins pylint_django --django-settings-module=your.app.settings [..other options..] <path_to_your_sources>\n\nIf you do not configure Django, default settings will be used but this will not include, for\nexample, which applications to include in `INSTALLED_APPS` and so the linting and type inference\nwill be less accurate. It is recommended to specify a settings module.\n\nProspector\n----------\n\nIf you have ``prospector`` installed, then ``pylint-django`` will already be\ninstalled as a dependency, and will be activated automatically if Django is\ndetected::\n\n    prospector [..other options..]\n\n\nFeatures\n--------\n\n* Prevents warnings about Django-generated attributes such as\n  ``Model.objects`` or ``Views.request``.\n* Prevents warnings when using ``ForeignKey`` attributes (\"Instance of\n  ForeignKey has no <x> member\").\n* Fixes pylint's knowledge of the types of Model and Form field attributes\n* Validates ``Model.__unicode__`` methods.\n* ``Meta`` informational classes on forms and models do not generate errors.\n* Flags dangerous use of the exclude attribute in ModelForm.Meta.\n* Uses Django's internal machinery to try and resolve models referenced as\n  strings in ForeignKey fields. That relies on ``django.setup()`` which needs\n  the appropriate project settings defined!\n\n\nAdditional plugins\n------------------\n\n``pylint_django.checkers.migrations`` looks for migrations which:\n\n- add new model fields and these fields have a default value. According to\n  `Django docs <https://docs.djangoproject.com/en/2.0/topics/migrations/#postgresql>`_\n  this may have performance penalties especially on large tables. The preferred way\n  is to add a new DB column with ``null=True`` because it will be created instantly\n  and then possibly populate the table with the desired default values.\n  Only the last migration from a sub-directory will be examined;\n- are ``migrations.RunPython()`` without a reverse callable - these will result in\n  non reversible data migrations;\n\n\nThis plugin is disabled by default! To enable it::\n\n    pylint --load-plugins pylint_django --load-plugins pylint_django.checkers.migrations\n\n\nContributing\n------------\n\nPlease feel free to add your name to the ``CONTRIBUTORS.rst`` file if you want to\nbe credited when pull requests get merged. You can also add to the\n``CHANGELOG.rst`` file if you wish, although we'll also do that when merging.\n\n\nTests\n-----\n\nThe structure of the test package follows that from pylint itself.\n\nIt is fairly simple: create a module starting with ``func_`` followed by\na test name, and insert into it some code. The tests will run pylint\nagainst these modules. If the idea is that no messages now occur, then\nthat is fine, just check to see if it works by running ``scripts/test.sh``.\n\nAny command line argument passed to ``scripts/test.sh`` will be passed to the internal invocation of ``pytest``.\nFor example if you want to debug the tests you can execute ``scripts/test.sh --capture=no``.\nA specific test case can be run by filtering based on the file name of the test case ``./scripts/test.sh -k 'func_noerror_views'``.\n\nIdeally, add some pylint error suppression messages to the file to prevent\nspurious warnings, since these are all tiny little modules not designed to\ndo anything so there's no need to be perfect.\n\nIt is possible to make tests with expected error output, for example, if\nadding a new message or simply accepting that pylint is supposed to warn.\nA ``test_file_name.txt`` file contains a list of expected error messages in the\nformat\n``error-type:line number:class name or empty:1st line of detailed error text:confidence or empty``.\n\n\nLicense\n-------\n\n``pylint-django`` is available under the GPLv2 license.\n\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "A Pylint plugin to help Pylint understand the Django web framework",
    "version": "2.5.4",
    "project_urls": {
        "Homepage": "https://github.com/PyCQA/pylint-django",
        "Repository": "https://github.com/PyCQA/pylint-django"
    },
    "split_keywords": [
        "pylint",
        "django",
        "plugin"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "68fca44c78a3025053f9fee5be19dca016a4a943cab67912086add103aefa801",
                "md5": "731f2c4e113527e243c72385da90301d",
                "sha256": "08bedfd7ccc4c47afa09cbfee6f4b5074437178d8e51fd891e2232c0d3a5b140"
            },
            "downloads": -1,
            "filename": "pylint_django-2.5.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "731f2c4e113527e243c72385da90301d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7,<4.0",
            "size": 53301,
            "upload_time": "2023-10-22T03:28:55",
            "upload_time_iso_8601": "2023-10-22T03:28:55.497125Z",
            "url": "https://files.pythonhosted.org/packages/68/fc/a44c78a3025053f9fee5be19dca016a4a943cab67912086add103aefa801/pylint_django-2.5.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "431d237b80717278c23a1178b209d5f7a3023653c706c2ef6aee0c8876238ded",
                "md5": "bd31d0652b7ea5a4499da5c3bdc719c7",
                "sha256": "d167b1437342543727925a98c0dee9c8de8e8e1f8cb8caf868018febd2c4e2b7"
            },
            "downloads": -1,
            "filename": "pylint_django-2.5.4.tar.gz",
            "has_sig": false,
            "md5_digest": "bd31d0652b7ea5a4499da5c3bdc719c7",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7,<4.0",
            "size": 38144,
            "upload_time": "2023-10-22T03:28:58",
            "upload_time_iso_8601": "2023-10-22T03:28:58.272501Z",
            "url": "https://files.pythonhosted.org/packages/43/1d/237b80717278c23a1178b209d5f7a3023653c706c2ef6aee0c8876238ded/pylint_django-2.5.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-10-22 03:28:58",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "PyCQA",
    "github_project": "pylint-django",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "tox": true,
    "lcname": "pylint-django"
}
        
Elapsed time: 0.13142s