nested class Meta support

This commit is contained in:
Maxim Kurnikov
2018-11-30 14:00:11 +03:00
parent 00f72f97d7
commit 60b1c48ade
13 changed files with 433 additions and 87 deletions

View File

@@ -1,6 +1,6 @@
from typing import List, Optional
from typing import List, Optional, AbstractSet, MutableSet, Set
from mypy.build import BuildManager, Graph, State
from mypy.build import BuildManager, Graph, State, PRI_ALL
from mypy.modulefinder import BuildSource
@@ -12,6 +12,7 @@ from mypy import build
old_load_graph = build.load_graph
OldState = build.State
old_sorted_components = build.sorted_components
def load_graph_to_add_settings_file_as_a_source_seed(settings_module: str):
@@ -50,3 +51,40 @@ def restore_original_dependencies_handling():
from mypy import build
build.State = OldState
def _extract_dependencies(graph: Graph, state_id: str, visited_modules: Set[str]) -> Set[str]:
visited_modules.add(state_id)
dependencies = set(graph[state_id].dependencies)
for new_dep_id in dependencies.copy():
if new_dep_id not in visited_modules:
dependencies.update(_extract_dependencies(graph, new_dep_id, visited_modules))
return dependencies
def extract_module_dependencies(graph: Graph, state_id: str) -> Set[str]:
visited_modules = set()
return _extract_dependencies(graph, state_id, visited_modules=visited_modules)
def process_settings_before_dependants(settings_module: str):
def patched_sorted_components(graph: Graph,
vertices: Optional[AbstractSet[str]] = None,
pri_max: int = PRI_ALL) -> List[AbstractSet[str]]:
sccs = old_sorted_components(graph,
vertices=vertices,
pri_max=pri_max)
for i, scc in enumerate(sccs.copy()):
if 'django.conf' in scc:
django_conf_deps = set(extract_module_dependencies(graph, 'django.conf')).union({'django.conf'})
old_scc_modified = scc.difference(django_conf_deps)
new_scc = scc.difference(old_scc_modified)
if not old_scc_modified:
# already processed
break
sccs[i] = frozenset(old_scc_modified)
sccs.insert(i, frozenset(new_scc))
break
return sccs
build.sorted_components = patched_sorted_components