diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c16ab8..99a6144 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Fixed +- False positive for `DUO107` when `xml.etree.ElementTree.{Element,SubElement}` used ([#28](https://github.com/dlint-py/dlint/issues/28)) ## [0.10.3] - 2020-03-09 ### Fixed diff --git a/dlint/linters/bad_xml_use.py b/dlint/linters/bad_xml_use.py index d97ae23..1adf4ae 100644 --- a/dlint/linters/bad_xml_use.py +++ b/dlint/linters/bad_xml_use.py @@ -32,4 +32,6 @@ def illegal_modules(self): def whitelisted_modules(self): return [ 'xml.sax.saxutils', + 'xml.etree.ElementTree.Element', + 'xml.etree.ElementTree.SubElement', ] diff --git a/tests/test_bad_xml_use.py b/tests/test_bad_xml_use.py index 8e9c581..250ce62 100644 --- a/tests/test_bad_xml_use.py +++ b/tests/test_bad_xml_use.py @@ -63,6 +63,51 @@ def test_saxutils_import_usage(self): assert result == expected + def test_element_import_usage(self): + python_node = self.get_ast_node( + """ + import xml.etree.ElementTree.Element + import xml.etree.ElementTree.SubElement + from xml.etree.ElementTree import Element + from xml.etree.ElementTree import SubElement + """ + ) + + linter = dlint.linters.BadXMLUseLinter() + linter.visit(python_node) + + result = linter.get_results() + expected = [] + + assert result == expected + + def test_element_parse_import_usage(self): + python_node = self.get_ast_node( + """ + import xml.etree.ElementTree.parse + from xml.etree.ElementTree import parse + """ + ) + + linter = dlint.linters.BadXMLUseLinter() + linter.visit(python_node) + + result = linter.get_results() + expected = [ + dlint.linters.base.Flake8Result( + lineno=2, + col_offset=0, + message=dlint.linters.BadXMLUseLinter._error_tmpl + ), + dlint.linters.base.Flake8Result( + lineno=3, + col_offset=0, + message=dlint.linters.BadXMLUseLinter._error_tmpl + ), + ] + + assert result == expected + def test_defused_lxml_usage(self): python_node = self.get_ast_node( """