Show More
@@ -164,7 +164,7 class CircularImport(Exception): | |||||
164 |
|
164 | |||
165 |
|
165 | |||
166 | def cyclekey(names): |
|
166 | def cyclekey(names): | |
167 |
return tuple(sorted( |
|
167 | return tuple(sorted((names))) | |
168 |
|
168 | |||
169 | def check_one_mod(mod, imports, path=None, ignore=None): |
|
169 | def check_one_mod(mod, imports, path=None, ignore=None): | |
170 | if path is None: |
|
170 | if path is None: | |
@@ -177,7 +177,7 def check_one_mod(mod, imports, path=Non | |||||
177 | i = mod.rsplit('.', 1)[0] + '.' + i |
|
177 | i = mod.rsplit('.', 1)[0] + '.' + i | |
178 | if i in path: |
|
178 | if i in path: | |
179 | firstspot = path.index(i) |
|
179 | firstspot = path.index(i) | |
180 |
cycle = path[firstspot:] |
|
180 | cycle = path[firstspot:] | |
181 | if cyclekey(cycle) not in ignore: |
|
181 | if cyclekey(cycle) not in ignore: | |
182 | raise CircularImport(cycle) |
|
182 | raise CircularImport(cycle) | |
183 | continue |
|
183 | continue | |
@@ -186,12 +186,12 def check_one_mod(mod, imports, path=Non | |||||
186 | def rotatecycle(cycle): |
|
186 | def rotatecycle(cycle): | |
187 | """arrange a cycle so that the lexicographically first module listed first |
|
187 | """arrange a cycle so that the lexicographically first module listed first | |
188 |
|
188 | |||
189 |
>>> rotatecycle(['foo', 'bar' |
|
189 | >>> rotatecycle(['foo', 'bar']) | |
190 | ['bar', 'foo', 'bar'] |
|
190 | ['bar', 'foo', 'bar'] | |
191 | """ |
|
191 | """ | |
192 | lowest = min(cycle) |
|
192 | lowest = min(cycle) | |
193 | idx = cycle.index(lowest) |
|
193 | idx = cycle.index(lowest) | |
194 |
return cycle[idx: |
|
194 | return cycle[idx:] + cycle[:idx] + [lowest] | |
195 |
|
195 | |||
196 | def find_cycles(imports): |
|
196 | def find_cycles(imports): | |
197 | """Find cycles in an already-loaded import graph. |
|
197 | """Find cycles in an already-loaded import graph. |
General Comments 0
You need to be logged in to leave comments.
Login now