File: auth_user.py

package info (click to toggle)
pylint-django 2.6.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 248 kB
  • sloc: python: 1,429; sh: 14; makefile: 7
file content (36 lines) | stat: -rw-r--r-- 1,330 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from pylint import checkers

from pylint_django.__pkginfo__ import BASE_ID
from pylint_django.compat import check_messages


class AuthUserChecker(checkers.BaseChecker):
    name = "auth-user-checker"

    msgs = {
        f"E{BASE_ID}41": (
            "Hard-coded 'auth.User'",
            "hard-coded-auth-user",
            "Don't hard-code the auth.User model. Use settings.AUTH_USER_MODEL instead!",
        ),
        f"E{BASE_ID}42": (
            "User model imported from django.contrib.auth.models",
            "imported-auth-user",
            "Don't import django.contrib.auth.models.User model. Use django.contrib.auth.get_user_model() instead!",
        ),
    }

    @check_messages("hard-coded-auth-user")
    def visit_const(self, node):
        # for now we don't check if the parent is a ForeignKey field
        # because the user model should not be hard-coded anywhere
        if node.value == "auth.User":
            self.add_message("hard-coded-auth-user", node=node)

    @check_messages("imported-auth-user")
    def visit_importfrom(self, node):
        if node.modname == "django.contrib.auth.models":
            for imported_names in node.names:
                if imported_names[0] in ["*", "User"]:
                    self.add_message("imported-auth-user", node=node)
                    break