auth_user.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. from pylint import checkers, interfaces
  2. from pylint.checkers import utils
  3. from pylint_django.__pkginfo__ import BASE_ID
  4. class AuthUserChecker(checkers.BaseChecker):
  5. __implements__ = (interfaces.IAstroidChecker,)
  6. name = "auth-user-checker"
  7. msgs = {
  8. f"E{BASE_ID}41": (
  9. "Hard-coded 'auth.User'",
  10. "hard-coded-auth-user",
  11. "Don't hard-code the auth.User model. Use settings.AUTH_USER_MODEL instead!",
  12. ),
  13. f"E{BASE_ID}42": (
  14. "User model imported from django.contrib.auth.models",
  15. "imported-auth-user",
  16. "Don't import django.contrib.auth.models.User model. Use django.contrib.auth.get_user_model() instead!",
  17. ),
  18. }
  19. @utils.check_messages("hard-coded-auth-user")
  20. def visit_const(self, node):
  21. # for now we don't check if the parent is a ForeignKey field
  22. # because the user model should not be hard-coded anywhere
  23. if node.value == "auth.User":
  24. self.add_message("hard-coded-auth-user", node=node)
  25. @utils.check_messages("imported-auth-user")
  26. def visit_importfrom(self, node):
  27. if node.modname == "django.contrib.auth.models":
  28. for imported_names in node.names:
  29. if imported_names[0] in ["*", "User"]:
  30. self.add_message("imported-auth-user", node=node)
  31. break