def apply_augmentations(linter): """Apply suppression rules.""" # W0104 - pointless-statement # manifest file have a valid pointless-statement dict suppress_message(linter, BasicChecker.visit_discard, 'W0104', is_manifest_file)
def register(linter): sys.path.insert(0, '.') old_out = sys.stdout old_err = sys.stderr sys.stdout = open(os.devnull, 'w') sys.stderr = open(os.devnull, 'w') fixture_collector = FixtureCollector() pytest.main(['--fixtures'], plugins=[fixture_collector]) sys.stdout = old_out sys.stderr = old_err def attr_in_fixtures_list(node, fixtures=fixture_collector.fixtures): """ Checks that node is get or post method of the View class and it has valid arguments. """ """Checks that node is get or post method of the View class.""" funcs = [k for k, v in node.items() if k in fixtures] if funcs: return True return False suppress_message(linter, VariablesChecker.visit_functiondef, 'W0621', attr_in_fixtures_list)
def apply_augmentations(linter): """Apply suppression rules.""" # W0104 - pointless-statement # manifest file have a valid pointless-statement dict discard = hasattr(BasicChecker, 'visit_discard') and \ BasicChecker.visit_discard or BasicChecker.visit_expr suppress_message(linter, discard, 'W0104', is_manifest_file)
def register(linter: "PyLinter"): # noqa try: from pylint_plugin_utils import suppress_message except ImportError: print("Cannot suppress message. 'pylint_plugin_utils' not installed.") return print("Registered custom plugin. Some checks will be disabled for tests.") for msg, checks in SUPPRESS_CHECKS.items(): for checker_method in checks: suppress_message(linter, checker_method, msg, is_node_in_tests)
def register(linter): """Required method to auto register this checker.""" linter.register_checker(NewDbFieldWithDefaultChecker(linter)) linter.register_checker(MissingBackwardsMigrationChecker(linter)) if not compat.LOAD_CONFIGURATION_SUPPORTED: load_configuration(linter) # apply augmentations for migration checkers # Unused arguments for migrations suppress_message(linter, checkers.variables.VariablesChecker.leave_functiondef, 'unused-argument', is_in_migrations)
def suppress_fields_messages(linter): suppress_message(linter, IterableChecker.visit_for, 'not-an-iterable', _is_complex_field_for) suppress_message(linter, TypeChecker.visit_compare, 'unsupported-membership-test', _is_complex_field_compare) suppress_message(linter, TypeChecker.visit_subscript, 'unsupported-assignment-operation', _is_complex_field_subscript) suppress_message(linter, TypeChecker.visit_subscript, 'unsupported-delete-operation', _is_complex_field_subscript)
def suppress_qs_decorator_messages(linter): suppress_message(linter, TypeChecker.visit_call, 'unexpected-keyword-arg', _is_call2custom_manager) suppress_message(linter, TypeChecker.visit_call, 'no-value-for-parameter', _is_call2custom_manager) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', _is_custom_manager_attribute)
def suppress_doc_messages(linter): suppress_message(linter, TypeChecker.visit_attribute, 'no-member', _is_document_field) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', node_is_default_qs) suppress_message(linter, TypeChecker.visit_call, 'not-callable', _is_doc_call)
def apply_augmentations(linter): """Apply suppression rules.""" # W0104 - pointless-statement # manifest file have a valid pointless-statement dict discard = hasattr(BasicChecker, 'visit_discard') and \ BasicChecker.visit_discard or BasicChecker.visit_expr suppress_message(linter, discard, 'W0104', is_manifest_file) # W0402 - deprecated-module valid openerp.osv.expression discard = ImportsChecker.visit_import suppress_message(linter, discard, 'W0402', is_valid_openerp_osv_deprecated) discard = hasattr(ImportsChecker, 'visit_from') and \ ImportsChecker.visit_from or ImportsChecker.visit_importfrom suppress_message(linter, discard, 'W0402', is_valid_openerp_osv_deprecated) # E0401 - import-error # if the package is openerp then should be ignored because # is a runtime valid import discard = ImportsChecker.visit_import suppress_message(linter, discard, 'E0401', is_openerp_import) discard = hasattr(ImportsChecker, 'visit_from') and \ ImportsChecker.visit_from or ImportsChecker.visit_importfrom suppress_message(linter, discard, 'E0401', is_openerp_import)
def apply_augmentations(linter): """Apply suppression rules.""" # W0104 - pointless-statement # manifest file have a valid pointless-statement dict discard = hasattr(BasicChecker, 'visit_discard') and \ BasicChecker.visit_discard or BasicChecker.visit_expr suppress_message(linter, discard, 'W0104', is_manifest_file) # W0402 - deprecated-module valid openerp.osv.expression discard = ImportsChecker.visit_import suppress_message(linter, discard, 'W0402', is_valid_openerp_osv_deprecated) discard = hasattr(ImportsChecker, 'visit_from') and \ ImportsChecker.visit_from or ImportsChecker.visit_importfrom suppress_message(linter, discard, 'W0402', is_valid_openerp_osv_deprecated)
def apply_augmentations(linter): """Apply augmentation and suppression rules.""" augment_visit(linter, _visit_attribute(TypeChecker), foreign_key_sets) augment_visit(linter, _visit_attribute(TypeChecker), foreign_key_ids) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_model_field_display_method) # supress errors when accessing magical class attributes suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_manager_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_admin_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_model_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_field_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_charfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_datefield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_decimalfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_filefield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_imagefield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_ipfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_slugfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_foreignkeyfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_manytomanyfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_onetoonefield_attribute) for parents, attrs in VIEW_ATTRS: suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', generic_is_view_attribute(parents, attrs)) # formviews have too many ancestors, there's nothing the user of the library can do about that suppress_message(linter, _visit_class(MisdesignChecker), 'R0901', is_class('django.views.generic.edit.FormView')) # model forms have no __init__ method anywhere in their bases suppress_message(linter, _visit_class(ClassChecker), 'W0232', is_class('django.forms.models.ModelForm')) # forms implement __getitem__ but not __len__, thus raising a "Badly implemented container" warning which # we will suppress. suppress_message(linter, _leave_class(MisdesignChecker), 'R0924', is_class('django.forms.forms.Form')) suppress_message(linter, _leave_class(MisdesignChecker), 'R0924', is_class('django.forms.models.ModelForm')) # Meta suppress_message(linter, _visit_class(DocStringChecker), 'missing-docstring', is_model_meta_subclass) suppress_message(linter, _visit_class(NewStyleConflictChecker), 'old-style-class', is_model_meta_subclass) suppress_message(linter, _visit_class(ClassChecker), 'no-init', is_model_meta_subclass) suppress_message(linter, _leave_class(MisdesignChecker), 'too-few-public-methods', is_model_meta_subclass) # Media suppress_message(linter, _visit_assignname(NameChecker), 'C0103', is_model_media_valid_attributes) suppress_message(linter, _visit_class(DocStringChecker), 'missing-docstring', is_model_media_subclass) suppress_message(linter, _visit_class(NewStyleConflictChecker), 'old-style-class', is_model_media_subclass) suppress_message(linter, _visit_class(ClassChecker), 'no-init', is_model_media_subclass) suppress_message(linter, _leave_class(MisdesignChecker), 'too-few-public-methods', is_model_media_subclass) # Too few public methods started appearing for Views and Models as part of Pylint>=1.4 / astroid>=1.3.3 # Not sure why, suspect this is a failure to get the parent classes somewhere # For now, just suppress it on models and views suppress_message(linter, _leave_class(MisdesignChecker), 'too-few-public-methods', is_class('.Model')) suppress_message(linter, _leave_class(MisdesignChecker), 'too-few-public-methods', is_class('.View')) # Admin # Too many public methods (40+/20) # TODO: Count public methods of django.contrib.admin.options.ModelAdmin and increase # MisdesignChecker.config.max_public_methods to this value to count only user' methods. #nb_public_methods = 0 #for method in node.methods(): # if not method.name.startswith('_'): # nb_public_methods += 1 suppress_message(linter, _leave_class(MisdesignChecker), 'R0904', is_model_admin_subclass) # Tests suppress_message(linter, _leave_class(MisdesignChecker), 'R0904', is_model_test_case_subclass) # View # Method could be a function (get, post) suppress_message(linter, _leave_function(ClassChecker), 'R0201', is_model_view_subclass_method_shouldnt_be_function) # Unused argument 'request' (get, post) suppress_message(linter, _leave_function(VariablesChecker), 'W0613', is_model_view_subclass_unused_argument) # django-mptt suppress_message(linter, _visit_class(DocStringChecker), 'missing-docstring', is_model_mpttmeta_subclass) suppress_message(linter, _visit_class(NewStyleConflictChecker), 'old-style-class', is_model_mpttmeta_subclass) suppress_message(linter, _visit_class(ClassChecker), 'W0232', is_model_mpttmeta_subclass) suppress_message(linter, _leave_class(MisdesignChecker), 'too-few-public-methods', is_model_mpttmeta_subclass) # ForeignKey and OneToOneField VariablesChecker.leave_module = wrap(VariablesChecker.leave_module, ignore_import_warnings_for_related_fields)
def apply_augmentations(linter): """Apply augmentation and suppression rules.""" augment_visit(linter, TypeChecker.visit_getattr, foreign_key_sets) augment_visit(linter, TypeChecker.visit_getattr, related_field_attributes) suppress_message(linter, TypeChecker.visit_getattr, 'E1101', is_model_field_display_method) # formviews have too many ancestors, there's nothing the user of the library can do about that suppress_message(linter, MisdesignChecker.visit_class, 'R0901', is_class('django.views.generic.edit.FormView')) # model forms have no __init__ method anywhere in their bases suppress_message(linter, ClassChecker.visit_class, 'W0232', is_class('django.forms.models.ModelForm')) # forms implement __getitem__ but not __len__, thus raising a "Badly implemented container" warning which # we will suppress. suppress_message(linter, MisdesignChecker.leave_class, 'R0924', is_class('django.forms.forms.Form')) suppress_message(linter, MisdesignChecker.leave_class, 'R0924', is_class('django.forms.models.ModelForm')) # Meta suppress_message(linter, DocStringChecker.visit_class, 'C0111', is_model_meta_subclass) suppress_message(linter, NewStyleConflictChecker.visit_class, 'C1001', is_model_meta_subclass) suppress_message(linter, ClassChecker.visit_class, 'W0232', is_model_meta_subclass) suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_model_meta_subclass) # Media suppress_message(linter, NameChecker.visit_assname, 'C0103', is_model_media_valid_attributes) suppress_message(linter, DocStringChecker.visit_class, 'C0111', is_model_media_subclass) suppress_message(linter, NewStyleConflictChecker.visit_class, 'C1001', is_model_media_subclass) suppress_message(linter, ClassChecker.visit_class, 'W0232', is_model_media_subclass) suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_model_media_subclass) # Admin # Too many public methods (40+/20) # TODO: Count public methods of django.contrib.admin.options.ModelAdmin and increase MisdesignChecker.config.max_public_methods to this value to count only user' methods. #nb_public_methods = 0 #for method in node.methods(): # if not method.name.startswith('_'): # nb_public_methods += 1 suppress_message(linter, MisdesignChecker.leave_class, 'R0904', is_model_admin_subclass) # Tests suppress_message(linter, MisdesignChecker.leave_class, 'R0904', is_model_test_case_subclass) # View suppress_message(linter, ClassChecker.leave_function, 'R0201', is_model_view_subclass_method_shouldnt_be_function) # Method could be a function (get, post) suppress_message(linter, VariablesChecker.leave_function, 'W0613', is_model_view_subclass_unused_argument) # Unused argument 'request' (get, post) # django-mptt suppress_message(linter, DocStringChecker.visit_class, 'C0111', is_model_mpttmeta_subclass) suppress_message(linter, NewStyleConflictChecker.visit_class, 'C1001', is_model_mpttmeta_subclass) suppress_message(linter, ClassChecker.visit_class, 'W0232', is_model_mpttmeta_subclass) suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_model_mpttmeta_subclass)
def apply_augmentations(linter): augment_visit(linter, TypeChecker.visit_getattr, foreign_key_sets) augment_visit(linter, TypeChecker.visit_getattr, related_field_attributes) suppress_message(linter, TypeChecker.visit_getattr, 'E1101', is_model_field_display_method) # formviews have too many ancestors, there's nothing the user of the library can do about that suppress_message(linter, MisdesignChecker.visit_class, 'R0901', is_class('django.views.generic.edit.FormView')) # model forms have no __init__ method anywhere in their bases suppress_message(linter, ClassChecker.visit_class, 'W0232', is_class('django.forms.models.ModelForm')) # forms implement __getitem__ but not __len__, thus raising a "Badly implemented container" warning which # we will suppress. suppress_message(linter, MisdesignChecker.leave_class, 'R0924', is_class('django.forms.forms.Form')) suppress_message(linter, MisdesignChecker.leave_class, 'R0924', is_class('django.forms.models.ModelForm')) suppress_message(linter, NewStyleConflictChecker.visit_class, 'C1001', is_model_meta_subclass) suppress_message(linter, ClassChecker.visit_class, 'W0232', is_model_meta_subclass) suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_model_meta_subclass)
def apply_augmentations(linter): """Apply augmentation and suppression rules.""" augment_visit(linter, TypeChecker.visit_getattr, foreign_key_sets) suppress_message(linter, TypeChecker.visit_getattr, 'E1101', is_model_field_display_method) # formviews have too many ancestors, there's nothing the user of the library can do about that suppress_message(linter, MisdesignChecker.visit_class, 'R0901', is_class('django.views.generic.edit.FormView')) # model forms have no __init__ method anywhere in their bases suppress_message(linter, ClassChecker.visit_class, 'W0232', is_class('django.forms.models.ModelForm')) # forms implement __getitem__ but not __len__, thus raising a "Badly implemented container" warning which # we will suppress. suppress_message(linter, MisdesignChecker.leave_class, 'R0924', is_class('django.forms.forms.Form')) suppress_message(linter, MisdesignChecker.leave_class, 'R0924', is_class('django.forms.models.ModelForm')) # Meta suppress_message(linter, DocStringChecker.visit_class, 'C0111', is_model_meta_subclass) suppress_message(linter, NewStyleConflictChecker.visit_class, 'C1001', is_model_meta_subclass) suppress_message(linter, ClassChecker.visit_class, 'W0232', is_model_meta_subclass) suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_model_meta_subclass) # Media suppress_message(linter, NameChecker.visit_assname, 'C0103', is_model_media_valid_attributes) suppress_message(linter, DocStringChecker.visit_class, 'C0111', is_model_media_subclass) suppress_message(linter, NewStyleConflictChecker.visit_class, 'C1001', is_model_media_subclass) suppress_message(linter, ClassChecker.visit_class, 'W0232', is_model_media_subclass) suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_model_media_subclass) # Too few public methods started appearing for Views and Models as part of Pylint>=1.4 / astroid>=1.3.3 # Not sure why, suspect this is a failure to get the parent classes somewhere # For now, just suppress it on models and views suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_class('django.db.models.base.Model')) # TODO: why does this not work with the fqn of 'View'? Must be something to do with the overriding and transforms suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_class('.View')) # Admin # Too many public methods (40+/20) # TODO: Count public methods of django.contrib.admin.options.ModelAdmin and increase # MisdesignChecker.config.max_public_methods to this value to count only user' methods. #nb_public_methods = 0 #for method in node.methods(): # if not method.name.startswith('_'): # nb_public_methods += 1 suppress_message(linter, MisdesignChecker.leave_class, 'R0904', is_model_admin_subclass) # Tests suppress_message(linter, MisdesignChecker.leave_class, 'R0904', is_model_test_case_subclass) # View # Method could be a function (get, post) suppress_message(linter, ClassChecker.leave_function, 'R0201', is_model_view_subclass_method_shouldnt_be_function) # Unused argument 'request' (get, post) suppress_message(linter, VariablesChecker.leave_function, 'W0613', is_model_view_subclass_unused_argument) # django-mptt suppress_message(linter, DocStringChecker.visit_class, 'C0111', is_model_mpttmeta_subclass) suppress_message(linter, NewStyleConflictChecker.visit_class, 'C1001', is_model_mpttmeta_subclass) suppress_message(linter, ClassChecker.visit_class, 'W0232', is_model_mpttmeta_subclass) suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_model_mpttmeta_subclass) # ForeignKey and OneToOneField VariablesChecker.leave_module = wrap(VariablesChecker.leave_module, ignore_import_warnings_for_related_fields)
def apply_augmentations(linter): """Apply augmentation and suppression rules.""" augment_visit(linter, _visit_attribute(TypeChecker), foreign_key_sets) augment_visit(linter, _visit_attribute(TypeChecker), foreign_key_ids) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_model_field_display_method) # supress errors when accessing magical class attributes suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_manager_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_admin_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_model_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_field_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_charfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_datefield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_decimalfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_filefield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_imagefield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_ipfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_slugfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_foreignkeyfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_manytomanyfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', is_onetoonefield_attribute) for parents, attrs in VIEW_ATTRS: suppress_message(linter, _visit_attribute(TypeChecker), 'E1101', generic_is_view_attribute(parents, attrs)) # formviews have too many ancestors, there's nothing the user of the library can do about that suppress_message(linter, _visit_class(MisdesignChecker), 'R0901', is_class('django.views.generic.edit.FormView')) # model forms have no __init__ method anywhere in their bases suppress_message(linter, _visit_class(ClassChecker), 'W0232', is_class('django.forms.models.ModelForm')) # forms implement __getitem__ but not __len__, thus raising a "Badly implemented container" warning which # we will suppress. suppress_message(linter, _leave_class(MisdesignChecker), 'R0924', is_class('django.forms.forms.Form')) suppress_message(linter, _leave_class(MisdesignChecker), 'R0924', is_class('django.forms.models.ModelForm')) # Meta suppress_message(linter, _visit_class(DocStringChecker), 'missing-docstring', is_model_meta_subclass) suppress_message(linter, _visit_class(NewStyleConflictChecker), 'old-style-class', is_model_meta_subclass) suppress_message(linter, _visit_class(ClassChecker), 'no-init', is_model_meta_subclass) suppress_message(linter, _leave_class(MisdesignChecker), 'too-few-public-methods', is_model_meta_subclass) suppress_message(linter, _visit_attribute(ClassChecker), 'protected-access', allow_meta_protected_access) # Media suppress_message(linter, _visit_assignname(NameChecker), 'C0103', is_model_media_valid_attributes) suppress_message(linter, _visit_class(DocStringChecker), 'missing-docstring', is_model_media_subclass) suppress_message(linter, _visit_class(NewStyleConflictChecker), 'old-style-class', is_model_media_subclass) suppress_message(linter, _visit_class(ClassChecker), 'no-init', is_model_media_subclass) suppress_message(linter, _leave_class(MisdesignChecker), 'too-few-public-methods', is_model_media_subclass) # Too few public methods started appearing for Views and Models as part of Pylint>=1.4 / astroid>=1.3.3 # Not sure why, suspect this is a failure to get the parent classes somewhere # For now, just suppress it on models and views suppress_message(linter, _leave_class(MisdesignChecker), 'too-few-public-methods', is_class('.Model')) suppress_message(linter, _leave_class(MisdesignChecker), 'too-few-public-methods', is_class('.View')) # Admin # Too many public methods (40+/20) # TODO: Count public methods of django.contrib.admin.options.ModelAdmin and increase # MisdesignChecker.config.max_public_methods to this value to count only user' methods. #nb_public_methods = 0 #for method in node.methods(): # if not method.name.startswith('_'): # nb_public_methods += 1 suppress_message(linter, _leave_class(MisdesignChecker), 'R0904', is_model_admin_subclass) # Tests suppress_message(linter, _leave_class(MisdesignChecker), 'R0904', is_model_test_case_subclass) # View # Method could be a function (get, post) suppress_message(linter, _leave_function(ClassChecker), 'R0201', is_model_view_subclass_method_shouldnt_be_function) # Unused argument 'request' (get, post) suppress_message(linter, _leave_function(VariablesChecker), 'W0613', is_model_view_subclass_unused_argument) # django-mptt suppress_message(linter, _visit_class(DocStringChecker), 'missing-docstring', is_model_mpttmeta_subclass) suppress_message(linter, _visit_class(NewStyleConflictChecker), 'old-style-class', is_model_mpttmeta_subclass) suppress_message(linter, _visit_class(ClassChecker), 'W0232', is_model_mpttmeta_subclass) suppress_message(linter, _leave_class(MisdesignChecker), 'too-few-public-methods', is_model_mpttmeta_subclass) # ForeignKey and OneToOneField # Must update this in a thread safe way to support the parallel option on pylint (-j) current_leave_module = VariablesChecker.leave_module if current_leave_module.__name__ == 'leave_module': # current_leave_module is not wrapped # Two threads may hit the next assignment concurrently, but the result is the same VariablesChecker.leave_module = wrap(current_leave_module, ignore_import_warnings_for_related_fields)
def apply_augmentations(linter): """Apply augmentation and suppression rules.""" augment_visit(linter, TypeChecker.visit_attribute, foreign_key_sets) augment_visit(linter, TypeChecker.visit_attribute, foreign_key_ids) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_model_field_display_method) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_style_attribute) suppress_message(linter, NameChecker.visit_assignname, 'invalid-name', is_urls_module_valid_constant) # supress errors when accessing magical class attributes suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_manager_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_admin_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_model_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_field_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_charfield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_datefield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_decimalfield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_filefield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_imagefield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_ipfield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_slugfield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_foreignkeyfield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_manytomanyfield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_onetoonefield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_form_attribute) for parents, attrs in VIEW_ATTRS: suppress_message(linter, TypeChecker.visit_attribute, 'no-member', generic_is_view_attribute(parents, attrs)) # formviews have too many ancestors, there's nothing the user of the library can do about that suppress_message(linter, MisdesignChecker.visit_classdef, 'too-many-ancestors', is_class('django.views.generic.edit.FormView')) # model forms have no __init__ method anywhere in their bases suppress_message(linter, ClassChecker.visit_classdef, 'W0232', is_class('django.forms.models.ModelForm')) # Meta suppress_message(linter, DocStringChecker.visit_classdef, 'missing-docstring', is_model_meta_subclass) pylint_newstyle_classdef_compat(linter, 'old-style-class', is_model_meta_subclass) suppress_message(linter, ClassChecker.visit_classdef, 'no-init', is_model_meta_subclass) suppress_message(linter, MisdesignChecker.leave_classdef, 'too-few-public-methods', is_model_meta_subclass) suppress_message(linter, ClassChecker.visit_attribute, 'protected-access', allow_meta_protected_access) # Media suppress_message(linter, NameChecker.visit_assignname, 'C0103', is_model_media_valid_attributes) suppress_message(linter, DocStringChecker.visit_classdef, 'missing-docstring', is_model_media_subclass) pylint_newstyle_classdef_compat(linter, 'old-style-class', is_model_media_subclass) suppress_message(linter, ClassChecker.visit_classdef, 'no-init', is_model_media_subclass) suppress_message(linter, MisdesignChecker.leave_classdef, 'too-few-public-methods', is_model_media_subclass) # Admin # Too many public methods (40+/20) # TODO: Count public methods of django.contrib.admin.options.ModelAdmin and increase # MisdesignChecker.config.max_public_methods to this value to count only user' methods. # nb_public_methods = 0 # for method in node.methods(): # if not method.name.startswith('_'): # nb_public_methods += 1 suppress_message(linter, MisdesignChecker.leave_classdef, 'R0904', is_model_admin_subclass) # Tests suppress_message(linter, MisdesignChecker.leave_classdef, 'R0904', is_model_test_case_subclass) # View # Method could be a function (get, post) suppress_message(linter, ClassChecker.leave_functiondef, 'no-self-use', is_model_view_subclass_method_shouldnt_be_function) # Unused argument 'request' (get, post) suppress_message(linter, VariablesChecker.leave_functiondef, 'unused-argument', is_model_view_subclass_unused_argument) suppress_message(linter, VariablesChecker.leave_functiondef, 'unused-argument', is_argument_named_request) # django-mptt suppress_message(linter, DocStringChecker.visit_classdef, 'missing-docstring', is_model_mpttmeta_subclass) pylint_newstyle_classdef_compat(linter, 'old-style-class', is_model_mpttmeta_subclass) suppress_message(linter, ClassChecker.visit_classdef, 'W0232', is_model_mpttmeta_subclass) suppress_message(linter, MisdesignChecker.leave_classdef, 'too-few-public-methods', is_model_mpttmeta_subclass) # factory_boy's DjangoModelFactory suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_model_factory) suppress_message(linter, ClassChecker.visit_functiondef, 'no-self-argument', is_factory_post_generation_method) # ForeignKey and OneToOneField # Must update this in a thread safe way to support the parallel option on pylint (-j) current_leave_module = VariablesChecker.leave_module if current_leave_module.__name__ == 'leave_module': # current_leave_module is not wrapped # Two threads may hit the next assignment concurrently, but the result is the same VariablesChecker.leave_module = wrap( current_leave_module, ignore_import_warnings_for_related_fields) # VariablesChecker.leave_module is now wrapped # else VariablesChecker.leave_module is already wrapped # wsgi.py suppress_message(linter, NameChecker.visit_assignname, 'invalid-name', is_wsgi_application)
def apply_augmentations(linter): """Apply augmentation and suppression rules.""" augment_visit(linter, TypeChecker.visit_getattr, foreign_key_sets) augment_visit(linter, TypeChecker.visit_getattr, related_field_attributes) suppress_message(linter, TypeChecker.visit_getattr, 'E1101', is_model_field_display_method) # formviews have too many ancestors, there's nothing the user of the library can do about that suppress_message(linter, MisdesignChecker.visit_class, 'R0901', is_class('django.views.generic.edit.FormView')) # model forms have no __init__ method anywhere in their bases suppress_message(linter, ClassChecker.visit_class, 'W0232', is_class('django.forms.models.ModelForm')) # forms implement __getitem__ but not __len__, thus raising a "Badly implemented container" warning which # we will suppress. suppress_message(linter, MisdesignChecker.leave_class, 'R0924', is_class('django.forms.forms.Form')) suppress_message(linter, MisdesignChecker.leave_class, 'R0924', is_class('django.forms.models.ModelForm')) # Meta suppress_message(linter, DocStringChecker.visit_class, 'C0111', is_model_meta_subclass) suppress_message(linter, NewStyleConflictChecker.visit_class, 'C1001', is_model_meta_subclass) suppress_message(linter, ClassChecker.visit_class, 'W0232', is_model_meta_subclass) suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_model_meta_subclass) # Media suppress_message(linter, NameChecker.visit_assname, 'C0103', is_model_media_valid_attributes) suppress_message(linter, DocStringChecker.visit_class, 'C0111', is_model_media_subclass) suppress_message(linter, NewStyleConflictChecker.visit_class, 'C1001', is_model_media_subclass) suppress_message(linter, ClassChecker.visit_class, 'W0232', is_model_media_subclass) suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_model_media_subclass) # Admin # Too many public methods (40+/20) # TODO: Count public methods of django.contrib.admin.options.ModelAdmin and increase MisdesignChecker.config.max_public_methods to this value to count only user' methods. #nb_public_methods = 0 #for method in node.methods(): # if not method.name.startswith('_'): # nb_public_methods += 1 suppress_message(linter, MisdesignChecker.leave_class, 'R0904', is_model_admin_subclass) # Tests suppress_message(linter, MisdesignChecker.leave_class, 'R0904', is_model_test_case_subclass) # View suppress_message(linter, ClassChecker.leave_function, 'R0201', is_model_view_subclass_method_shouldnt_be_function ) # Method could be a function (get, post) suppress_message(linter, VariablesChecker.leave_function, 'W0613', is_model_view_subclass_unused_argument ) # Unused argument 'request' (get, post) # django-mptt suppress_message(linter, DocStringChecker.visit_class, 'C0111', is_model_mpttmeta_subclass) suppress_message(linter, NewStyleConflictChecker.visit_class, 'C1001', is_model_mpttmeta_subclass) suppress_message(linter, ClassChecker.visit_class, 'W0232', is_model_mpttmeta_subclass) suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_model_mpttmeta_subclass)
def apply_augmentations(linter): """Apply suppression rules.""" # W0104 - pointless-statement # manifest file have a valid pointless-statement dict discard = hasattr(BasicChecker, 'visit_discard') and \ BasicChecker.visit_discard or BasicChecker.visit_expr suppress_message(linter, discard, 'W0104', is_manifest_file) # W0402 - deprecated-module valid openerp.osv.expression discard = ImportsChecker.visit_import suppress_message(linter, discard, 'W0402', is_valid_openerp_osv_deprecated) discard = hasattr(ImportsChecker, 'visit_from') and \ ImportsChecker.visit_from or ImportsChecker.visit_importfrom suppress_message(linter, discard, 'W0402', is_valid_openerp_osv_deprecated) # C0103 - invalid-name and W0613 - unused-argument for migrations/ suppress_message(linter, NameChecker.visit_module, 'C0103', is_migration_path) suppress_message(linter, NameChecker.visit_functiondef, 'C0103', is_migration_path) suppress_message(linter, VariablesChecker.leave_functiondef, 'W0613', is_migration_path)
def suppress_fields_attrs_messages(linter): suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_field_method) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', _is_embedded_doc_attr)
def apply_augmentations(linter): """Apply augmentation and suppression rules.""" augment_visit(linter, _visit_attribute(TypeChecker), foreign_key_sets) augment_visit(linter, _visit_attribute(TypeChecker), foreign_key_ids) suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_model_field_display_method) suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_style_attribute) # supress errors when accessing magical class attributes suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_manager_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_admin_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_model_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_field_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_charfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_datefield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_decimalfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_filefield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_imagefield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_ipfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_slugfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_foreignkeyfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_manytomanyfield_attribute) suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_onetoonefield_attribute) for parents, attrs in VIEW_ATTRS: suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', generic_is_view_attribute(parents, attrs)) # formviews have too many ancestors, there's nothing the user of the library can do about that suppress_message(linter, _visit_class(MisdesignChecker), 'too-many-ancestors', is_class('django.views.generic.edit.FormView')) # model forms have no __init__ method anywhere in their bases suppress_message(linter, _visit_class(ClassChecker), 'W0232', is_class('django.forms.models.ModelForm')) # forms implement __getitem__ but not __len__, thus raising a "Badly implemented container" warning which # we will suppress. NOTE: removed from pylint, https://github.com/PyCQA/pylint/issues/112 # keeping here in case it gets re-implemented # suppress_message(linter, _leave_class(MisdesignChecker), 'R0924', is_class('django.forms.forms.Form')) # suppress_message(linter, _leave_class(MisdesignChecker), 'R0924', is_class('django.forms.models.ModelForm')) # Meta suppress_message(linter, _visit_class(DocStringChecker), 'missing-docstring', is_model_meta_subclass) suppress_message(linter, _visit_class(NewStyleConflictChecker), 'old-style-class', is_model_meta_subclass) suppress_message(linter, _visit_class(ClassChecker), 'no-init', is_model_meta_subclass) suppress_message(linter, _leave_class(MisdesignChecker), 'too-few-public-methods', is_model_meta_subclass) suppress_message(linter, _visit_attribute(ClassChecker), 'protected-access', allow_meta_protected_access) # Media suppress_message(linter, _visit_assignname(NameChecker), 'C0103', is_model_media_valid_attributes) suppress_message(linter, _visit_class(DocStringChecker), 'missing-docstring', is_model_media_subclass) suppress_message(linter, _visit_class(NewStyleConflictChecker), 'old-style-class', is_model_media_subclass) suppress_message(linter, _visit_class(ClassChecker), 'no-init', is_model_media_subclass) suppress_message(linter, _leave_class(MisdesignChecker), 'too-few-public-methods', is_model_media_subclass) # Admin # Too many public methods (40+/20) # TODO: Count public methods of django.contrib.admin.options.ModelAdmin and increase # MisdesignChecker.config.max_public_methods to this value to count only user' methods. # nb_public_methods = 0 # for method in node.methods(): # if not method.name.startswith('_'): # nb_public_methods += 1 suppress_message(linter, _leave_class(MisdesignChecker), 'R0904', is_model_admin_subclass) # Tests suppress_message(linter, _leave_class(MisdesignChecker), 'R0904', is_model_test_case_subclass) # View # Method could be a function (get, post) suppress_message(linter, _leave_function(ClassChecker), 'R0201', is_model_view_subclass_method_shouldnt_be_function) # Unused argument 'request' (get, post) suppress_message(linter, _leave_function(VariablesChecker), 'W0613', is_model_view_subclass_unused_argument) # django-mptt suppress_message(linter, _visit_class(DocStringChecker), 'missing-docstring', is_model_mpttmeta_subclass) suppress_message(linter, _visit_class(NewStyleConflictChecker), 'old-style-class', is_model_mpttmeta_subclass) suppress_message(linter, _visit_class(ClassChecker), 'W0232', is_model_mpttmeta_subclass) suppress_message(linter, _leave_class(MisdesignChecker), 'too-few-public-methods', is_model_mpttmeta_subclass) # factory_boy's DjangoModelFactory suppress_message(linter, _visit_class(DocStringChecker), 'missing-docstring', is_model_factory_meta_subclass) suppress_message(linter, _visit_class(NewStyleConflictChecker), 'old-style-class', is_model_factory_meta_subclass) suppress_message(linter, _visit_class(ClassChecker), 'W0232', is_model_factory_meta_subclass) suppress_message(linter, _leave_class(MisdesignChecker), 'too-few-public-methods', is_model_factory_meta_subclass) suppress_message(linter, _visit_attribute(TypeChecker), 'no-member', is_model_factory) # ForeignKey and OneToOneField # Must update this in a thread safe way to support the parallel option on pylint (-j) current_leave_module = VariablesChecker.leave_module if current_leave_module.__name__ == 'leave_module': # current_leave_module is not wrapped # Two threads may hit the next assignment concurrently, but the result is the same VariablesChecker.leave_module = wrap( current_leave_module, ignore_import_warnings_for_related_fields) # VariablesChecker.leave_module is now wrapped # else VariablesChecker.leave_module is already wrapped # supress not-an-iterable for model_utils.managers. See #117 suppress_message(linter, IterableChecker._check_iterable, 'not-an-iterable', is_model_manager) # wsgi.py suppress_message(linter, _visit_assignname(NameChecker), 'invalid-name', is_wsgi_application)
def pylint_newstyle_classdef_compat(linter, warning_name, augment): if not hasattr(NewStyleConflictChecker, 'visit_classdef'): return suppress_message(linter, getattr(NewStyleConflictChecker, 'visit_classdef'), warning_name, augment)
def apply_augmentations(linter): """Apply augmentation and suppression rules.""" augment_visit(linter, TypeChecker.visit_attribute, foreign_key_sets) augment_visit(linter, TypeChecker.visit_attribute, foreign_key_ids) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_model_field_display_method) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_style_attribute) suppress_message(linter, NameChecker.visit_assignname, 'invalid-name', is_urls_module_valid_constant) # supress errors when accessing magical class attributes suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_manager_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_admin_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_model_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_field_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_charfield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_datefield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_decimalfield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_filefield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_imagefield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_ipfield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_slugfield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_foreignkeyfield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_manytomanyfield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_onetoonefield_attribute) suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_form_attribute) for parents, attrs in VIEW_ATTRS: suppress_message(linter, TypeChecker.visit_attribute, 'no-member', generic_is_view_attribute(parents, attrs)) # formviews have too many ancestors, there's nothing the user of the library can do about that suppress_message(linter, MisdesignChecker.visit_classdef, 'too-many-ancestors', is_class('django.views.generic.edit.FormView')) # class-based generic views just have a longer inheritance chain suppress_message(linter, MisdesignChecker.visit_classdef, 'too-many-ancestors', is_class('django.views.generic.detail.BaseDetailView')) suppress_message(linter, MisdesignChecker.visit_classdef, 'too-many-ancestors', is_class('django.views.generic.edit.ProcessFormView')) # model forms have no __init__ method anywhere in their bases suppress_message(linter, ClassChecker.visit_classdef, 'W0232', is_class('django.forms.models.ModelForm')) # Meta suppress_message(linter, DocStringChecker.visit_classdef, 'missing-docstring', is_model_meta_subclass) pylint_newstyle_classdef_compat(linter, 'old-style-class', is_model_meta_subclass) suppress_message(linter, ClassChecker.visit_classdef, 'no-init', is_model_meta_subclass) suppress_message(linter, MisdesignChecker.leave_classdef, 'too-few-public-methods', is_model_meta_subclass) suppress_message(linter, ClassChecker.visit_attribute, 'protected-access', allow_meta_protected_access) # Media suppress_message(linter, NameChecker.visit_assignname, 'C0103', is_model_media_valid_attributes) suppress_message(linter, DocStringChecker.visit_classdef, 'missing-docstring', is_model_media_subclass) pylint_newstyle_classdef_compat(linter, 'old-style-class', is_model_media_subclass) suppress_message(linter, ClassChecker.visit_classdef, 'no-init', is_model_media_subclass) suppress_message(linter, MisdesignChecker.leave_classdef, 'too-few-public-methods', is_model_media_subclass) # Admin # Too many public methods (40+/20) # TODO: Count public methods of django.contrib.admin.options.ModelAdmin and increase # MisdesignChecker.config.max_public_methods to this value to count only user' methods. # nb_public_methods = 0 # for method in node.methods(): # if not method.name.startswith('_'): # nb_public_methods += 1 suppress_message(linter, MisdesignChecker.leave_classdef, 'R0904', is_model_admin_subclass) # Tests suppress_message(linter, MisdesignChecker.leave_classdef, 'R0904', is_model_test_case_subclass) # View # Method could be a function (get, post) suppress_message(linter, ClassChecker.leave_functiondef, 'no-self-use', is_model_view_subclass_method_shouldnt_be_function) # django-mptt suppress_message(linter, DocStringChecker.visit_classdef, 'missing-docstring', is_model_mpttmeta_subclass) pylint_newstyle_classdef_compat(linter, 'old-style-class', is_model_mpttmeta_subclass) suppress_message(linter, ClassChecker.visit_classdef, 'W0232', is_model_mpttmeta_subclass) suppress_message(linter, MisdesignChecker.leave_classdef, 'too-few-public-methods', is_model_mpttmeta_subclass) # factory_boy's DjangoModelFactory suppress_message(linter, TypeChecker.visit_attribute, 'no-member', is_model_factory) suppress_message(linter, ClassChecker.visit_functiondef, 'no-self-argument', is_factory_post_generation_method) # wsgi.py suppress_message(linter, NameChecker.visit_assignname, 'invalid-name', is_wsgi_application) apply_wrapped_augmentations()
def apply_augmentations(linter): """Apply augmentation and suppression rules.""" augment_visit(linter, TypeChecker.visit_getattr, foreign_key_sets) suppress_message(linter, TypeChecker.visit_getattr, 'E1101', is_model_field_display_method) # formviews have too many ancestors, there's nothing the user of the library can do about that suppress_message(linter, MisdesignChecker.visit_class, 'R0901', is_class('django.views.generic.edit.FormView')) # model forms have no __init__ method anywhere in their bases suppress_message(linter, ClassChecker.visit_class, 'W0232', is_class('django.forms.models.ModelForm')) # forms implement __getitem__ but not __len__, thus raising a "Badly implemented container" warning which # we will suppress. suppress_message(linter, MisdesignChecker.leave_class, 'R0924', is_class('django.forms.forms.Form')) suppress_message(linter, MisdesignChecker.leave_class, 'R0924', is_class('django.forms.models.ModelForm')) # Meta suppress_message(linter, DocStringChecker.visit_class, 'C0111', is_model_meta_subclass) suppress_message(linter, NewStyleConflictChecker.visit_class, 'C1001', is_model_meta_subclass) suppress_message(linter, ClassChecker.visit_class, 'W0232', is_model_meta_subclass) suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_model_meta_subclass) # Media suppress_message(linter, NameChecker.visit_assname, 'C0103', is_model_media_valid_attributes) suppress_message(linter, DocStringChecker.visit_class, 'C0111', is_model_media_subclass) suppress_message(linter, NewStyleConflictChecker.visit_class, 'C1001', is_model_media_subclass) suppress_message(linter, ClassChecker.visit_class, 'W0232', is_model_media_subclass) suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_model_media_subclass) # Too few public methods started appearing for Views and Models as part of Pylint>=1.4 / astroid>=1.3.3 # Not sure why, suspect this is a failure to get the parent classes somewhere # For now, just suppress it on models and views suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_class('django.db.models.base.Model')) # TODO: why does this not work with the fqn of 'View'? Must be something to do with the overriding and transforms suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_class('.View')) # Admin # Too many public methods (40+/20) # TODO: Count public methods of django.contrib.admin.options.ModelAdmin and increase # MisdesignChecker.config.max_public_methods to this value to count only user' methods. #nb_public_methods = 0 #for method in node.methods(): # if not method.name.startswith('_'): # nb_public_methods += 1 suppress_message(linter, MisdesignChecker.leave_class, 'R0904', is_model_admin_subclass) # Tests suppress_message(linter, MisdesignChecker.leave_class, 'R0904', is_model_test_case_subclass) # View # Method could be a function (get, post) suppress_message(linter, ClassChecker.leave_function, 'R0201', is_model_view_subclass_method_shouldnt_be_function) # Unused argument 'request' (get, post) suppress_message(linter, VariablesChecker.leave_function, 'W0613', is_model_view_subclass_unused_argument) # django-mptt suppress_message(linter, DocStringChecker.visit_class, 'C0111', is_model_mpttmeta_subclass) suppress_message(linter, NewStyleConflictChecker.visit_class, 'C1001', is_model_mpttmeta_subclass) suppress_message(linter, ClassChecker.visit_class, 'W0232', is_model_mpttmeta_subclass) suppress_message(linter, MisdesignChecker.leave_class, 'R0903', is_model_mpttmeta_subclass) # ForeignKey and OneToOneField VariablesChecker.leave_module = wrap( VariablesChecker.leave_module, ignore_import_warnings_for_related_fields)
def apply_augmentations(linter): suppress_message(linter, BasicErrorChecker.visit_function, 'E0102', is_load_function)