Skip to content

Commit adcd762

Browse files
authored
Fix for AttributeError in if statement (#213)
Split test cases out for ``t.TYPE_CHECKING`` and ``typing.TYPE_CHECKING`` to avoid false positive linter errors. Closes #212
1 parent 5307647 commit adcd762

File tree

10 files changed

+461
-101
lines changed

10 files changed

+461
-101
lines changed

flake8_import_order/__init__.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -143,16 +143,15 @@ def visit_ImportFrom(self, node): # noqa: N802
143143
self.imports.append(classified_import)
144144

145145
def _type_checking_import(self, node):
146-
return (
147-
isinstance(node.parent, ast.If)
148-
and isinstance(node.parent.test, ast.Name)
149-
and (
150-
node.parent.test.id == "TYPE_CHECKING"
151-
or (
152-
node.parent.test.value.id in {"t", "typing"}
153-
and getattr(node.parent.test, "attr", "")
154-
== "TYPE_CHECKING"
155-
)
146+
return isinstance(node.parent, ast.If) and (
147+
(
148+
isinstance(node.parent.test, ast.Name)
149+
and node.parent.test.id == "TYPE_CHECKING"
150+
)
151+
or (
152+
isinstance(node.parent.test, ast.Attribute)
153+
and node.parent.test.value.id in {"t", "typing"}
154+
and getattr(node.parent.test, "attr", "") == "TYPE_CHECKING"
156155
)
157156
)
158157

tests/test_cases/complete_appnexus.py

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -66,23 +66,3 @@
6666
from .. import B
6767
from ..A import A
6868
from ..B import B
69-
70-
if t.TYPE_CHECKING:
71-
import ast
72-
73-
import X
74-
75-
from localpackage import A, b
76-
77-
import flake8_import_order
78-
from ..B import B
79-
80-
if typing.TYPE_CHECKING:
81-
import ast
82-
83-
import X
84-
85-
from localpackage import A, b
86-
87-
import flake8_import_order
88-
from ..B import B
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# appnexus
2+
3+
import ast
4+
from functools import *
5+
import os
6+
from os import path
7+
import sys
8+
9+
import X
10+
from X import *
11+
from X import A
12+
from X import B, b, C, d
13+
import Y
14+
from Y import *
15+
from Y import A
16+
from Y import B, C, D
17+
from Y import e
18+
import Z
19+
from Z import A
20+
from Z.A import A
21+
from Z.A.B import A
22+
23+
from localpackage import A, b
24+
25+
import flake8_import_order
26+
from flake8_import_order import *
27+
from . import A
28+
from . import B
29+
from .A import A
30+
from .B import B
31+
from .. import A
32+
from .. import B
33+
from ..A import A
34+
from ..B import B
35+
36+
if typing.TYPE_CHECKING:
37+
import ast
38+
from functools import *
39+
import os
40+
from os import path
41+
import sys
42+
43+
import X
44+
from X import *
45+
from X import A
46+
from X import B, b, C, d
47+
import Y
48+
from Y import *
49+
from Y import A
50+
from Y import B, C, D
51+
from Y import e
52+
import Z
53+
from Z import A
54+
from Z.A import A
55+
from Z.A.B import A
56+
57+
from localpackage import A, b
58+
59+
import flake8_import_order
60+
from flake8_import_order import *
61+
from . import A
62+
from . import B
63+
from .A import A
64+
from .B import B
65+
from .. import A
66+
from .. import B
67+
from ..A import A
68+
from ..B import B
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# appnexus
2+
3+
import ast
4+
from functools import *
5+
import os
6+
from os import path
7+
import sys
8+
9+
import X
10+
from X import *
11+
from X import A
12+
from X import B, b, C, d
13+
import Y
14+
from Y import *
15+
from Y import A
16+
from Y import B, C, D
17+
from Y import e
18+
import Z
19+
from Z import A
20+
from Z.A import A
21+
from Z.A.B import A
22+
23+
from localpackage import A, b
24+
25+
import flake8_import_order
26+
from flake8_import_order import *
27+
from . import A
28+
from . import B
29+
from .A import A
30+
from .B import B
31+
from .. import A
32+
from .. import B
33+
from ..A import A
34+
from ..B import B
35+
36+
if t.TYPE_CHECKING:
37+
import ast
38+
from functools import *
39+
import os
40+
from os import path
41+
import sys
42+
43+
import X
44+
from X import *
45+
from X import A
46+
from X import B, b, C, d
47+
import Y
48+
from Y import *
49+
from Y import A
50+
from Y import B, C, D
51+
from Y import e
52+
import Z
53+
from Z import A
54+
from Z.A import A
55+
from Z.A.B import A
56+
57+
from localpackage import A, b
58+
59+
import flake8_import_order
60+
from flake8_import_order import *
61+
from . import A
62+
from . import B
63+
from .A import A
64+
from .B import B
65+
from .. import A
66+
from .. import B
67+
from ..A import A
68+
from ..B import B

tests/test_cases/complete_cryptography.py

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -82,23 +82,3 @@
8282
from .. import B
8383
from ..A import A
8484
from ..B import B
85-
86-
if t.TYPE_CHECKING:
87-
import ast
88-
89-
import X
90-
91-
from localpackage import A, b
92-
93-
import flake8_import_order
94-
from ..B import B
95-
96-
if typing.TYPE_CHECKING:
97-
import ast
98-
99-
import X
100-
101-
from localpackage import A, b
102-
103-
import flake8_import_order
104-
from ..B import B
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# cryptography
2+
3+
import ast
4+
import os
5+
import sys
6+
from functools import *
7+
from os import path
8+
9+
import X
10+
from X import *
11+
from X import A
12+
from X import B, C, D
13+
14+
import Y
15+
from Y import *
16+
from Y import A
17+
from Y import B, C, D
18+
19+
import Z
20+
from Z import A
21+
from Z.A import A
22+
from Z.A.B import A
23+
24+
import localpackage
25+
26+
import flake8_import_order
27+
from flake8_import_order import *
28+
from flake8_import_order import A
29+
from flake8_import_order import B
30+
31+
import tests
32+
from tests import A
33+
from tests import B
34+
35+
from . import A
36+
from . import B
37+
from .A import A
38+
from .B import B
39+
from .. import A
40+
from .. import B
41+
from ..A import A
42+
from ..B import B
43+
44+
if typing.TYPE_CHECKING:
45+
import ast
46+
import os
47+
import sys
48+
from functools import *
49+
from os import path
50+
51+
import X
52+
from X import *
53+
from X import A
54+
from X import B, C, D
55+
56+
import Y
57+
from Y import *
58+
from Y import A
59+
from Y import B, C, D
60+
61+
import Z
62+
from Z import A
63+
from Z.A import A
64+
from Z.A.B import A
65+
66+
import localpackage
67+
68+
import flake8_import_order
69+
from flake8_import_order import *
70+
from flake8_import_order import A
71+
from flake8_import_order import B
72+
73+
import tests
74+
from tests import A
75+
from tests import B
76+
77+
from . import A
78+
from . import B
79+
from .A import A
80+
from .B import B
81+
from .. import A
82+
from .. import B
83+
from ..A import A
84+
from ..B import B
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# cryptography
2+
3+
import ast
4+
import os
5+
import sys
6+
from functools import *
7+
from os import path
8+
9+
import X
10+
from X import *
11+
from X import A
12+
from X import B, C, D
13+
14+
import Y
15+
from Y import *
16+
from Y import A
17+
from Y import B, C, D
18+
19+
import Z
20+
from Z import A
21+
from Z.A import A
22+
from Z.A.B import A
23+
24+
import localpackage
25+
26+
import flake8_import_order
27+
from flake8_import_order import *
28+
from flake8_import_order import A
29+
from flake8_import_order import B
30+
31+
import tests
32+
from tests import A
33+
from tests import B
34+
35+
from . import A
36+
from . import B
37+
from .A import A
38+
from .B import B
39+
from .. import A
40+
from .. import B
41+
from ..A import A
42+
from ..B import B
43+
44+
if t.TYPE_CHECKING:
45+
import ast
46+
import os
47+
import sys
48+
from functools import *
49+
from os import path
50+
51+
import X
52+
from X import *
53+
from X import A
54+
from X import B, C, D
55+
56+
import Y
57+
from Y import *
58+
from Y import A
59+
from Y import B, C, D
60+
61+
import Z
62+
from Z import A
63+
from Z.A import A
64+
from Z.A.B import A
65+
66+
import localpackage
67+
68+
import flake8_import_order
69+
from flake8_import_order import *
70+
from flake8_import_order import A
71+
from flake8_import_order import B
72+
73+
import tests
74+
from tests import A
75+
from tests import B
76+
77+
from . import A
78+
from . import B
79+
from .A import A
80+
from .B import B
81+
from .. import A
82+
from .. import B
83+
from ..A import A
84+
from ..B import B

0 commit comments

Comments
 (0)