Skip to content

Commit

Permalink
Revert "Support classes being in any arrangement"
Browse files Browse the repository at this point in the history
This reverts commit f07f1cf.
  • Loading branch information
BenTalese committed Jul 12, 2023
1 parent f07f1cf commit ca9fa7c
Showing 1 changed file with 13 additions and 51 deletions.
64 changes: 13 additions & 51 deletions src/clapy/engine.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import asyncio
import importlib
import inspect
import os
from typing import Dict, List, Optional, Type

from .common import DIR_EXCLUSIONS, FILE_EXCLUSIONS, Common
from .exceptions import PipeConfigurationError
from .generics import TInputPort, TOutputPort
from .pipeline import IPipe, InputPort, PipeConfiguration, PipeConfigurationOption
from .pipeline import IPipe, PipeConfiguration, PipeConfigurationOption
from .services import IPipelineFactory, IServiceProvider, IUseCaseInvoker


Expand Down Expand Up @@ -117,7 +115,6 @@ def construct_usecase_registry(
directory_exclusion_patterns: Optional[List[str]] = [],
file_exclusion_patterns: Optional[List[str]] = []) -> Dict[str, List[str]]:
'''
TODO: DOC CHANGE
Summary
-------
Scans the provided project location, or entire project if no location provided, for use
Expand All @@ -141,61 +138,26 @@ def construct_usecase_registry(
_UsecaseRegistry = {}

for _Location in usecase_locations:
_Classes = Engine._get_all_classes(_Location, directory_exclusion_patterns, file_exclusion_patterns)
for _Root, _Directories, _Files in os.walk(_Location):

_InputPortClasses = []
_PipeClasses = []
Common.apply_exclusion_filter(_Directories, directory_exclusion_patterns + DIR_EXCLUSIONS)
Common.apply_exclusion_filter(_Files, file_exclusion_patterns + FILE_EXCLUSIONS)

for _Class in _Classes:
if issubclass(_Class, InputPort) and _Class != InputPort and _Class not in _InputPortClasses:
_InputPortClasses.append(_Class)
_DirectoryNamespace = _Root.replace('/', '.').lstrip(".")
_Pipes = []

if issubclass(_Class, IPipe) and _Class not in _PipeClasses:
_PipeClasses.append(_Class)
for _File in _Files:
_Namespace = _DirectoryNamespace + "." + _File[:-3]
_Class = Common.import_class_by_namespace(_Namespace)

for _Pipe in _PipeClasses:
_ExecuteAsyncMethod = next((_Function for _Name, _Function
in inspect.getmembers(_Pipe, inspect.isfunction)
if _Name == IPipe.execute_async.__name__), None)
if issubclass(_Class, IPipe):
_Pipes.append(_Namespace)

_InputPortParam = next((_Param for _Param
in inspect.signature(_ExecuteAsyncMethod).parameters.values()
if _Param.annotation != inspect.Parameter.empty
and _Param.annotation in _InputPortClasses), None)

if _InputPortParam:
_UsecaseKey = inspect.getsourcefile(next(_Class for _Class
in _InputPortClasses
if type(_Class) == type(_InputPortParam.annotation)))
if _UsecaseKey:
_UsecaseRegistry.setdefault(_UsecaseKey, []).append(_Pipe)
else:
raise ModuleNotFoundError(f"Could not get the source file of {_Pipe}.")
if _Pipes:
_UsecaseRegistry[_DirectoryNamespace] = _Pipes

return _UsecaseRegistry

@staticmethod
def _get_all_classes(location, directory_exclusion_patterns, file_exclusion_patterns):
'''
TODO: DOC
'''
_Classes = []

for _Root, _Directories, _Files in os.walk(location):

Common.apply_exclusion_filter(_Directories, directory_exclusion_patterns + DIR_EXCLUSIONS)
Common.apply_exclusion_filter(_Files, file_exclusion_patterns + FILE_EXCLUSIONS)

_DirectoryNamespace = _Root.replace('/', '.').lstrip(".")

for _File in _Files:
_Namespace = _DirectoryNamespace + "." + _File[:-3]
_Module = importlib.import_module(_Namespace, package=None)
for _Name, _Class in inspect.getmembers(_Module, inspect.isclass):
_Classes.append(_Class)

return _Classes

@staticmethod
def _insert_pipe(
new_pipe: IPipe,
Expand Down

0 comments on commit ca9fa7c

Please sign in to comment.