cdx-manager 0.12.4 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,107 @@
1
+ """Launch settings domain commands: set, unset, and the power/perm/fast/model aliases.
2
+
3
+ Split out of cli_commands.py. Moved verbatim; re-exported by cli_commands.
4
+ """
5
+
6
+ from ..cli_args import _parse_launch_setting_alias_args, _parse_set_args, _parse_unset_args
7
+ from ..cli_helpers import _format_launch_config, _json_success, _write_json
8
+ from ..cli_render import _success
9
+ from ..errors import CdxError
10
+
11
+
12
+ def _resolve_bulk_launch_targets(parsed, service):
13
+ sessions = service["list_sessions"]()
14
+ by_name = {session["name"]: session for session in sessions}
15
+ if parsed.get("name"):
16
+ session = by_name.get(parsed["name"])
17
+ if not session:
18
+ raise CdxError(f"Unknown session: {parsed['name']}")
19
+ targets = [session]
20
+ elif parsed.get("sessions") == "all":
21
+ targets = sessions
22
+ elif parsed.get("sessions"):
23
+ targets = []
24
+ for name in parsed["sessions"]:
25
+ session = by_name.get(name)
26
+ if not session:
27
+ raise CdxError(f"Unknown session: {name}")
28
+ targets.append(session)
29
+ else:
30
+ targets = sessions
31
+ if parsed.get("provider"):
32
+ targets = [session for session in targets if session["provider"] == parsed["provider"]]
33
+ if not targets:
34
+ raise CdxError("No sessions matched.")
35
+ return targets
36
+
37
+ def _format_bulk_launch_summary(sessions):
38
+ names = [session["name"] for session in sessions]
39
+ if len(names) <= 8:
40
+ return ", ".join(names)
41
+ return ", ".join(names[:8]) + f", +{len(names) - 8} more"
42
+
43
+ def _apply_launch_settings(parsed, ctx, action="set"):
44
+ targets = _resolve_bulk_launch_targets(parsed, ctx["service"])
45
+ sessions = [
46
+ ctx["service"]["set_launch_settings"](session["name"], parsed["settings"])
47
+ for session in targets
48
+ ]
49
+ if len(sessions) == 1:
50
+ session = sessions[0]
51
+ message = f"Updated launch settings for {session['name']}"
52
+ else:
53
+ message = f"Updated launch settings for {len(sessions)} sessions: {_format_bulk_launch_summary(sessions)}"
54
+ if parsed["json"]:
55
+ payload = _json_success(
56
+ action,
57
+ message,
58
+ updated_count=len(sessions),
59
+ session=sessions[0] if len(sessions) == 1 else None,
60
+ sessions=sessions,
61
+ launch=sessions[0].get("launch") or {} if len(sessions) == 1 else None,
62
+ )
63
+ _write_json(ctx, payload)
64
+ return 0
65
+ ctx["out"](f"{_success(message, ctx['use_color'])}\n")
66
+ if len(sessions) == 1:
67
+ ctx["out"](f"{_format_launch_config(sessions[0], ctx['use_color'])}\n")
68
+ return 0
69
+
70
+ def _clear_launch_settings(parsed, ctx, action="unset"):
71
+ targets = _resolve_bulk_launch_targets(parsed, ctx["service"])
72
+ sessions = [
73
+ ctx["service"]["unset_launch_settings"](session["name"], parsed["keys"])
74
+ for session in targets
75
+ ]
76
+ if len(sessions) == 1:
77
+ session = sessions[0]
78
+ message = f"Cleared launch settings for {session['name']}"
79
+ else:
80
+ message = f"Cleared launch settings for {len(sessions)} sessions: {_format_bulk_launch_summary(sessions)}"
81
+ if parsed["json"]:
82
+ payload = _json_success(
83
+ action,
84
+ message,
85
+ updated_count=len(sessions),
86
+ session=sessions[0] if len(sessions) == 1 else None,
87
+ sessions=sessions,
88
+ launch=sessions[0].get("launch") or {} if len(sessions) == 1 else None,
89
+ )
90
+ _write_json(ctx, payload)
91
+ return 0
92
+ ctx["out"](f"{_success(message, ctx['use_color'])}\n")
93
+ if len(sessions) == 1:
94
+ ctx["out"](f"{_format_launch_config(sessions[0], ctx['use_color'])}\n")
95
+ return 0
96
+
97
+ def handle_set(rest, ctx):
98
+ return _apply_launch_settings(_parse_set_args(rest), ctx)
99
+
100
+ def handle_unset(rest, ctx):
101
+ return _clear_launch_settings(_parse_unset_args(rest), ctx)
102
+
103
+ def handle_launch_setting_alias(kind, rest, ctx):
104
+ parsed = _parse_launch_setting_alias_args(kind, rest)
105
+ if parsed.get("settings"):
106
+ return _apply_launch_settings(parsed, ctx, action=kind)
107
+ return _clear_launch_settings(parsed, ctx, action=kind)