-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbasic.py
More file actions
73 lines (62 loc) · 3.13 KB
/
basic.py
File metadata and controls
73 lines (62 loc) · 3.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from typing import Optional
from ..command_builder import ICommandBuilder
from ..command_builders_dispatcher import (
TFileExtCommandBuildersDispatcher,
TFileTypeCommandBuildersDispatcher,
TGlobCommandBuildersDispatcher,
TShebangCommandBuildersDispatcher,
)
from ..config_manager import EDispatchersTypes, TBasicConfigManager
class TBasicCommandDispatcherStrategySelector:
def __init__(
self,
*,
config_manager: TBasicConfigManager,
shebang_command_builders_dispatcher: TShebangCommandBuildersDispatcher,
glob_command_builders_dispatcher: TGlobCommandBuildersDispatcher,
file_ext_command_builders_dispatcher: TFileExtCommandBuildersDispatcher,
file_type_command_builders_dispatcher: TFileTypeCommandBuildersDispatcher,
):
self._config_manager: TBasicConfigManager = config_manager
self._shebang_command_builders_dispatcher: TShebangCommandBuildersDispatcher = (
shebang_command_builders_dispatcher
)
self._glob_command_builders_dispatcher: TGlobCommandBuildersDispatcher = glob_command_builders_dispatcher
self._file_ext_command_builders_dispatcher: TFileExtCommandBuildersDispatcher = (
file_ext_command_builders_dispatcher
)
self._file_type_command_builders_dispatcher: TFileTypeCommandBuildersDispatcher = (
file_type_command_builders_dispatcher
)
def dispatch_by_shebang(self, file_path_abs: str) -> Optional[ICommandBuilder]:
return self._shebang_command_builders_dispatcher.dispatch(file_path_abs)
def dispatch_by_glob(self, file_path_abs: str) -> Optional[ICommandBuilder]:
return self._glob_command_builders_dispatcher.dispatch(file_path_abs)
def dispatch_by_file_ext(self, file_path_abs: str) -> Optional[ICommandBuilder]:
return self._file_ext_command_builders_dispatcher.dispatch(file_path_abs)
def dispatch_by_file_type(self, file_path_abs: str) -> Optional[ICommandBuilder]:
return self._file_type_command_builders_dispatcher.dispatch(file_path_abs)
def dispatch(self, file_path_abs: str) -> Optional[ICommandBuilder]:
command_builder: Optional[ICommandBuilder] = None
if (
self._config_manager.get_respect_shebang()
and (command_builder := self.dispatch_by_shebang(file_path_abs)) is not None
):
return command_builder
for dispatcher in self._config_manager.get_dispatchers_order():
if (
dispatcher == EDispatchersTypes.BY_FILE_EXT
and (command_builder := self.dispatch_by_file_ext(file_path_abs)) is not None
):
return command_builder
if (
dispatcher == EDispatchersTypes.BY_FILE_TYPE
and (command_builder := self.dispatch_by_file_type(file_path_abs)) is not None
):
return command_builder
if (
dispatcher == EDispatchersTypes.BY_GLOB
and (command_builder := self.dispatch_by_glob(file_path_abs)) is not None
):
return command_builder
return command_builder