pylint: updates related to deprecations

pylint 3.0 has deprectated a few functions:
- check_messages: Use utils.only_required_for_messages
- The config attribute of BaseChecker has been deprecated. You can
use checker.linter.config to access the global configuration object
instead of a checker-specific object
- Everything related to the __implements__ construct was removed.
- Checker should only inherit BaseChecker or any of the other checker
types from pylint.checkers.

Signed-off-by: Florence Blanc-Renaud <flo@redhat.com>
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
This commit is contained in:
Florence Blanc-Renaud 2023-11-29 05:56:38 +01:00
parent 8981ede1a2
commit 020af153db
2 changed files with 13 additions and 11 deletions

View File

@ -10,5 +10,5 @@ ipaserver == @VERSION@
ipatests == @VERSION@
# keep pylint version in sync with current Fedora release
# F37 has 2.15.5
pylint ~= 2.15.5
# F39 has 3.0.25
pylint ~= 3.0.2

View File

@ -10,10 +10,9 @@ import sys
import textwrap
from astroid import MANAGER, register_module_extender
from astroid import scoped_nodes
from astroid.nodes import scoped_nodes
from pylint.checkers import BaseChecker
from pylint.checkers.utils import check_messages
from pylint.interfaces import IAstroidChecker
from pylint.checkers.utils import only_required_for_messages
from astroid.builder import AstroidBuilder
@ -33,14 +32,18 @@ def fake_class(name_or_class_obj, members=()):
if isinstance(name_or_class_obj, scoped_nodes.ClassDef):
cl = name_or_class_obj
else:
cl = scoped_nodes.ClassDef(name_or_class_obj, None)
cl = scoped_nodes.ClassDef(
name=name_or_class_obj, lineno=None, col_offset=None, parent=None,
end_lineno=None, end_col_offset=None)
for m in members:
if isinstance(m, str):
if m in cl.locals:
_warning_already_exists(cl, m)
else:
cl.locals[m] = [scoped_nodes.ClassDef(m, None)]
cl.locals[m] = [scoped_nodes.ClassDef(
name=m, lineno=None, col_offset=None, parent=None,
end_lineno=None, end_col_offset=None)]
elif isinstance(m, dict):
for key, val in m.items():
assert isinstance(key, str), "key must be string"
@ -250,7 +253,6 @@ register_module_extender(MANAGER, 'ipalib.request', ipalib_request_transform)
class IPAChecker(BaseChecker):
__implements__ = IAstroidChecker
name = 'ipa'
msgs = {
@ -278,7 +280,7 @@ class IPAChecker(BaseChecker):
self._dir = os.path.abspath(os.path.dirname(__file__))
self._forbidden_imports = {self._dir: []}
for forbidden_import in self.config.forbidden_imports:
for forbidden_import in self.linter.config.forbidden_imports:
forbidden_import = forbidden_import.split(':')
path = os.path.join(self._dir, forbidden_import[0])
path = os.path.abspath(path)
@ -320,12 +322,12 @@ class IPAChecker(BaseChecker):
self.add_message('ipa-forbidden-import',
args=(name, module, relpath), node=node)
@check_messages('ipa-forbidden-import')
@only_required_for_messages('ipa-forbidden-import')
def visit_import(self, node):
names = [n[0] for n in node.names]
self._check_forbidden_imports(node, names)
@check_messages('ipa-forbidden-import')
@only_required_for_messages('ipa-forbidden-import')
def visit_importfrom(self, node):
names = ['{}.{}'.format(node.modname, n[0]) for n in node.names]
self._check_forbidden_imports(node, names)