Skip to content

Commit 164b1c0

Browse files
committed
Move command handlers handlers.py
Signed-off-by: Alireza Poodineh <[email protected]>
1 parent c8c06fd commit 164b1c0

File tree

2 files changed

+57
-53
lines changed

2 files changed

+57
-53
lines changed

tools/pybite/handlers.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import argparse
2+
from typing import List
3+
4+
from .msbuild import MSBuildTarget
5+
from .host import Host
6+
7+
def handle_dotnet_cli(host: Host, args: argparse.Namespace, extras: List[str]) -> None:
8+
"""
9+
Handle custom dotnet commands.
10+
Passes any extra arguments to the dotnet CLI.
11+
"""
12+
host.run('', *extras)
13+
14+
def handle_dotnet_builtin(host: Host, args: argparse.Namespace, extras: List[str]) -> None:
15+
"""
16+
Handle built-in dotnet commands.
17+
Passes any extra arguments to the dotnet CLI.
18+
"""
19+
host.run_builtin(args.command, *extras)
20+
21+
def handle_bite_run(host: Host, args: argparse.Namespace, extras: List[str]) -> None:
22+
"""
23+
Handle the 'run' command, running a custom msbuild target.
24+
Passes any extra arguments to msbuild.
25+
"""
26+
list_targets = getattr(args, 'list', False)
27+
if list_targets:
28+
dependant_targets: List[MSBuildTarget] = []
29+
targets = host._get_bite_core_targets()
30+
print("Available independent targets:")
31+
for target in targets:
32+
if getattr(target, 'AfterTargets', None) is None and getattr(target, 'BeforeTargets', None) is None:
33+
print(f" {target.Name}")
34+
else:
35+
dependant_targets.append(target)
36+
if dependant_targets:
37+
print("\nAvailable automated targets:")
38+
for target in dependant_targets:
39+
print(f" {target.Name}", end=' ')
40+
if getattr(target, 'AfterTargets', None):
41+
print(f"(after '{target.AfterTargets}')", end=' ')
42+
if getattr(target, 'BeforeTargets', None):
43+
print(f"(before '{target.BeforeTargets}')", end=' ')
44+
print()
45+
return
46+
target = getattr(args, 'target', 'help')
47+
host.run_bite(target, *extras)

tools/pybite/host.py

Lines changed: 10 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ def __init__(
9494
self.requested_sdk: Optional[str] = self._resolve_requested_sdk()
9595
self.solution: str = self.SOLUTION_PATH or self.detect_solution()
9696
self.argparser: Optional[argparse.ArgumentParser] = None
97-
self.handlers: Dict[str, Callable[[argparse.Namespace, List[str]], None]] = {}
97+
self.handlers: Dict[str, Callable[["Host", argparse.Namespace, List[str]], None]] = {}
9898
self._subparsers_action: Optional[argparse._SubParsersAction] = None
9999

100100
# --- CLI and Command Registration ---
@@ -109,6 +109,8 @@ def get_argparser(self) -> argparse.ArgumentParser:
109109
if self.argparser is not None:
110110
return self.argparser
111111

112+
from . import handlers
113+
112114
parser = argparse.ArgumentParser(
113115
prog=self.name,
114116
description=self.description,
@@ -121,8 +123,7 @@ def get_argparser(self) -> argparse.ArgumentParser:
121123
required=False,
122124
metavar='',
123125
)
124-
subparsers.required = False
125-
parser.set_defaults(command='build', func=self._handle_dotnet_command)
126+
parser.set_defaults(command='build')
126127
self._subparsers_action = subparsers
127128

128129
# Register built-in dotnet commands
@@ -134,7 +135,7 @@ def get_argparser(self) -> argparse.ArgumentParser:
134135
usage=self.argparser_usage.replace('command', cmd['name']),
135136
add_help=False,
136137
)
137-
self.register_handler(cmd['name'], self._handle_dotnet_command)
138+
self.register_handler(cmd['name'], handlers.handle_dotnet_builtin)
138139

139140
# Register bite command only if bite.proj exists
140141
if os.path.isfile(self.BITE_PROJ_PATH):
@@ -146,7 +147,7 @@ def get_argparser(self) -> argparse.ArgumentParser:
146147
)
147148
run_parser.add_argument('target', nargs='?', default='help', help='bite.core target to run, default is "help"')
148149
run_parser.add_argument('--list', '-l', action='store_true', help='List available targets')
149-
self.register_handler('run', self._handle_bite_run)
150+
self.register_handler('run', handlers.handle_bite_run)
150151

151152
subparsers.add_parser(
152153
'dotnet',
@@ -155,15 +156,15 @@ def get_argparser(self) -> argparse.ArgumentParser:
155156
usage=self.argparser_usage.replace('command', 'dotnet') + ' [command]',
156157
add_help=False,
157158
)
158-
self.register_handler('dotnet', self._handle_dotnet_cli)
159+
self.register_handler('dotnet', handlers.handle_dotnet_cli)
159160

160161
self.argparser = parser
161162
return self.argparser
162163

163164
def add_command(
164165
self,
165166
name: str,
166-
handler: Callable[[argparse.Namespace, List[str]], None],
167+
handler: Callable[["Host", argparse.Namespace, List[str]], None],
167168
description: Optional[str] = None,
168169
help: str = "",
169170
arguments: Optional[List[Dict[str, Any]]] = None,
@@ -188,7 +189,7 @@ def add_command(
188189
sub.add_argument(*arg.get('args', ()), **arg.get('kwargs', {}))
189190
self.register_handler(name, handler)
190191

191-
def register_handler(self, command: str, handler: Callable[[argparse.Namespace, List[str]], None]) -> None:
192+
def register_handler(self, command: str, handler: Callable[["Host", argparse.Namespace, List[str]], None]) -> None:
192193
"""
193194
Register a custom handler for a command.
194195
@@ -209,54 +210,10 @@ def dispatch(self, args: argparse.Namespace, unknown_args: Optional[List[str]] =
209210
extras = unknown_args or []
210211
command = getattr(args, 'command', None)
211212
if command and command in self.handlers:
212-
self.handlers[command](args, extras)
213+
self.handlers[command](self, args, extras)
213214
else:
214215
self.get_argparser().print_help()
215216

216-
# --- Dotnet/MSBuild Command Handlers ---
217-
218-
def _handle_dotnet_cli(self, args: argparse.Namespace, extras: List[str]) -> None:
219-
"""
220-
Handle custom dotnet commands.
221-
Passes any extra arguments to the dotnet CLI.
222-
"""
223-
self.run('', *extras)
224-
225-
def _handle_dotnet_command(self, args: argparse.Namespace, extras: List[str]) -> None:
226-
"""
227-
Handle built-in dotnet commands.
228-
Passes any extra arguments to the dotnet CLI.
229-
"""
230-
self.run_builtin(args.command, *extras)
231-
232-
def _handle_bite_run(self, args: argparse.Namespace, extras: List[str]) -> None:
233-
"""
234-
Handle the 'run' command, running a custom msbuild target.
235-
Passes any extra arguments to msbuild.
236-
"""
237-
list_targets = getattr(args, 'list', False)
238-
if list_targets:
239-
dependant_targets: List[MSBuildTarget] = []
240-
targets = self._get_bite_core_targets()
241-
print("Available independent targets:")
242-
for target in targets:
243-
if getattr(target, 'AfterTargets', None) is None and getattr(target, 'BeforeTargets', None) is None:
244-
print(f" {target.Name}")
245-
else:
246-
dependant_targets.append(target)
247-
if dependant_targets:
248-
print("\nAvailable automated targets:")
249-
for target in dependant_targets:
250-
print(f" {target.Name}", end=' ')
251-
if getattr(target, 'AfterTargets', None):
252-
print(f"(after '{target.AfterTargets}')", end=' ')
253-
if getattr(target, 'BeforeTargets', None):
254-
print(f"(before '{target.BeforeTargets}')", end=' ')
255-
print()
256-
return
257-
target = getattr(args, 'target', 'help')
258-
self.run_bite(target, *extras)
259-
260217
# --- Dotnet/MSBuild Execution ---
261218

262219
def run(self, command: str, *args: str, capture_output: bool = False) -> Optional[subprocess.CompletedProcess]:

0 commit comments

Comments
 (0)