Make DependencySolver not static only
This commit is contained in:
parent
97a94947fe
commit
94cc25c791
1 changed files with 21 additions and 12 deletions
|
@ -153,19 +153,28 @@ class DepedencySolver():
|
||||||
Post-order depth-first search (ish). Does not check for circular dependencies or other errors.
|
Post-order depth-first search (ish). Does not check for circular dependencies or other errors.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@staticmethod
|
def __init__(
|
||||||
def solve(initial_dependants: List[Dependant]) -> List[Dependant]:
|
self,
|
||||||
|
initial_dependants: List[Dependant],
|
||||||
|
) -> None:
|
||||||
|
"""
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
:param initial_dependants: the initial dependant instances, in order
|
||||||
|
"""
|
||||||
|
self._initial_deps = initial_dependants
|
||||||
|
|
||||||
|
def solve(self) -> List[Dependant]:
|
||||||
"""
|
"""
|
||||||
Solve.
|
Solve.
|
||||||
|
|
||||||
:param initial_dependants: the initial dependant instances, in order
|
|
||||||
:return: the solved list, including at least the initial dependants, in order
|
:return: the solved list, including at least the initial dependants, in order
|
||||||
"""
|
"""
|
||||||
visited: Set[Type[Dependant]] = set()
|
visited: Set[Type[Dependant]] = set()
|
||||||
solution: List[Dependant] = []
|
solution: List[Dependant] = []
|
||||||
initial_map = {type(dep_instance): dep_instance for dep_instance in initial_dependants}
|
initial_map = {type(dep_instance): dep_instance for dep_instance in self._initial_deps}
|
||||||
for dep_instance in initial_dependants:
|
for dep_instance in self._initial_deps:
|
||||||
DepedencySolver._solve_instance(
|
self.__solve_instance(
|
||||||
dep_instance,
|
dep_instance,
|
||||||
visited,
|
visited,
|
||||||
initial_map,
|
initial_map,
|
||||||
|
@ -173,8 +182,8 @@ class DepedencySolver():
|
||||||
)
|
)
|
||||||
return solution
|
return solution
|
||||||
|
|
||||||
@staticmethod
|
def __solve_instance(
|
||||||
def _solve_instance(
|
self,
|
||||||
dep_instance: Dependant,
|
dep_instance: Dependant,
|
||||||
visited: Set[Type[Dependant]],
|
visited: Set[Type[Dependant]],
|
||||||
initial_map: Dict[Type[Dependant], Dependant],
|
initial_map: Dict[Type[Dependant], Dependant],
|
||||||
|
@ -182,7 +191,7 @@ class DepedencySolver():
|
||||||
) -> None:
|
) -> None:
|
||||||
if type(dep_instance) not in visited:
|
if type(dep_instance) not in visited:
|
||||||
for dependency_type in type(dep_instance).dependencies():
|
for dependency_type in type(dep_instance).dependencies():
|
||||||
DepedencySolver._solve_type(
|
DepedencySolver.__solve_type(
|
||||||
dependency_type,
|
dependency_type,
|
||||||
visited,
|
visited,
|
||||||
initial_map,
|
initial_map,
|
||||||
|
@ -192,7 +201,7 @@ class DepedencySolver():
|
||||||
visited.add(type(dep_instance))
|
visited.add(type(dep_instance))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _solve_type(
|
def __solve_type(
|
||||||
dep_type: Type[Dependant],
|
dep_type: Type[Dependant],
|
||||||
visited: Set[Type[Dependant]],
|
visited: Set[Type[Dependant]],
|
||||||
initial_map: Dict[Type[Dependant], Dependant],
|
initial_map: Dict[Type[Dependant], Dependant],
|
||||||
|
@ -200,7 +209,7 @@ class DepedencySolver():
|
||||||
) -> None:
|
) -> None:
|
||||||
if dep_type not in visited:
|
if dep_type not in visited:
|
||||||
for dependency_type in dep_type.dependencies():
|
for dependency_type in dep_type.dependencies():
|
||||||
DepedencySolver._solve_type(
|
DepedencySolver.__solve_type(
|
||||||
dependency_type,
|
dependency_type,
|
||||||
visited,
|
visited,
|
||||||
initial_map,
|
initial_map,
|
||||||
|
@ -252,7 +261,7 @@ class Processor():
|
||||||
:param handlers: the list of primary `EventHandler`s
|
:param handlers: the list of primary `EventHandler`s
|
||||||
"""
|
"""
|
||||||
# TODO pass on **kwargs
|
# TODO pass on **kwargs
|
||||||
return DepedencySolver.solve(handlers)
|
return DepedencySolver(handlers).solve()
|
||||||
|
|
||||||
def _get_handler_maps(self) -> HandlerMultimap:
|
def _get_handler_maps(self) -> HandlerMultimap:
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue