69 module = astNode.module |
69 module = astNode.module |
70 self.moduleName = "" if module is None else module |
70 self.moduleName = "" if module is None else module |
71 self.nodeType = NodeTypeEnum.IMPORT_FROM |
71 self.nodeType = NodeTypeEnum.IMPORT_FROM |
72 |
72 |
73 names = [n.name for n in astNode.names] |
73 names = [n.name for n in astNode.names] |
74 expectedNames = checker.sorted(names, key=checker.moduleKey) |
74 expectedNames = checker.sorted( |
|
75 names, |
|
76 key=lambda k: checker.moduleKey(k, subImports=True), |
|
77 ) |
75 if names != expectedNames: |
78 if names != expectedNames: |
76 self.error = (self.node, "I202", ", ".join(expectedNames)) |
79 self.error = (self.node, "I202", ", ".join(expectedNames)) |
77 level = astNode.level |
80 level = astNode.level |
78 |
81 |
79 self.asImport = any(n.asname for n in astNode.names) |
82 self.asImport = any(n.asname for n in astNode.names) |
93 group = GroupEnum.APPLICATION |
96 group = GroupEnum.APPLICATION |
94 break |
97 break |
95 |
98 |
96 if group == GroupEnum.STDLIB: |
99 if group == GroupEnum.STDLIB: |
97 self.sorter = ( |
100 self.sorter = ( |
98 (group, -self.nodeType, self.moduleName) |
101 (group, -self.nodeType, checker.moduleKey(self.moduleName)) |
99 if sortFromFirst |
102 if sortFromFirst |
100 else (group, self.nodeType, self.moduleName) |
103 else (group, self.nodeType, checker.moduleKey(self.moduleName)) |
101 ) |
104 ) |
102 else: |
105 else: |
103 m = self.moduleName |
106 m = self.moduleName |
104 dotIndex = m.find(".") |
107 dotIndex = m.find(".") |
105 topName = m if dotIndex == -1 else m[:dotIndex] |
108 topName = "." * level + m if dotIndex == -1 else m[:dotIndex] |
106 |
109 |
107 if sortIgnoringStyle: |
110 if sortIgnoringStyle: |
108 self.sorter = ( |
111 self.sorter = ( |
109 group, |
112 group, |
110 level, |
113 level, |