Add the command-line specification under the planned new parser
Marco Ricci

Marco Ricci commited on 2026-08-16 16:58:20
Zeige 1 geänderte Dateien mit 366 Einfügungen und 11 Löschungen.


Translate derivepassphrase's existing command-line interface to the
planned new parser infrastructure.

(The new CLI spec is not connected to anything yet.)
... ...
@@ -14,19 +14,9 @@ import contextlib
14 14
 import json
15 15
 import logging
16 16
 import os
17
-from typing import (
18
-    TYPE_CHECKING,
19
-    Final,
20
-    Literal,
21
-    NoReturn,
22
-    TextIO,
23
-    cast,
24
-)
17
+from typing import TYPE_CHECKING, cast
25 18
 
26 19
 import click
27
-from typing_extensions import (
28
-    Any,
29
-)
30 20
 
31 21
 from derivepassphrase import _internals, _types, exporter, vault
32 22
 from derivepassphrase._internals import cli_helpers, cli_machinery
... ...
@@ -36,12 +26,377 @@ if TYPE_CHECKING:
36 26
     from collections.abc import Sequence
37 27
     from collections.abc import Set as AbstractSet
38 28
     from contextlib import AbstractContextManager
29
+    from typing import Final, Literal, NoReturn, TextIO
30
+
31
+    from typing_extensions import Any
39 32
 
40 33
 __all__ = ("derivepassphrase",)
41 34
 
42 35
 PROG_NAME = _internals.PROG_NAME
43 36
 VERSION = _internals.VERSION
44 37
 
38
+help_option = cli_machinery.CLIOption(
39
+    names=("--help", "-h"),
40
+    help=_msg.TranslatedString(_msg.Label.HELP_OPTION_SPEC_AND_HELP_TEXT),
41
+    eager=True,
42
+)
43
+version_option = cli_machinery.CLIOption(
44
+    names=("--version",),
45
+    help=_msg.TranslatedString(_msg.Label.VERSION_OPTION_SPEC_AND_HELP_TEXT),
46
+    eager=True,
47
+)
48
+logging_option_group = cli_machinery.CLIOptionGroup(
49
+    options=(
50
+        cli_machinery.CLIOption(
51
+            names=("--debug",),
52
+            help=_msg.TranslatedString(
53
+                _msg.Label.DEBUG_OPTION_SPEC_AND_HELP_TEXT
54
+            ),
55
+        ),
56
+        cli_machinery.CLIOption(
57
+            names=("--verbose", "-v"),
58
+            help=_msg.TranslatedString(
59
+                _msg.Label.VERBOSE_OPTION_SPEC_AND_HELP_TEXT
60
+            ),
61
+        ),
62
+        cli_machinery.CLIOption(
63
+            names=("--quiet", "-q"),
64
+            help=_msg.TranslatedString(
65
+                _msg.Label.QUIET_OPTION_SPEC_AND_HELP_TEXT
66
+            ),
67
+        ),
68
+    ),
69
+    title=_msg.TranslatedString(_msg.Label.LOGGING_LABEL),
70
+)
71
+
72
+derivepassphrase_vault_command_interface = cli_machinery.CLITerminalSubcommand(
73
+    names=("vault",),
74
+    contents=(
75
+        (
76
+            cli_machinery.CLIOptionGroup(
77
+                options=(
78
+                    cli_machinery.CLIOption(
79
+                        names=("--phrase", "-p"),
80
+                        help=_msg.TranslatedString(
81
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_PHRASE_SPEC_AND_HELP_TEXT
82
+                        ),
83
+                    ),
84
+                    cli_machinery.CLIOption(
85
+                        names=("--key", "-k"),
86
+                        help=_msg.TranslatedString(
87
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_KEY_SPEC_AND_HELP_TEXT
88
+                        ),
89
+                    ),
90
+                    cli_machinery.CLIOption(
91
+                        names=("--length", "-l"),
92
+                        help=_msg.TranslatedString(
93
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_LENGTH_SPEC_AND_HELP_TEXT
94
+                        ),
95
+                        has_argument=True,
96
+                    ),
97
+                    cli_machinery.CLIOption(
98
+                        names=("--repeat", "-r"),
99
+                        help=_msg.TranslatedString(
100
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_REPEAT_SPEC_AND_HELP_TEXT
101
+                        ),
102
+                        has_argument=True,
103
+                    ),
104
+                    cli_machinery.CLIOption(
105
+                        names=("--lower",),
106
+                        help=_msg.TranslatedString(
107
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_LOWER_SPEC_AND_HELP_TEXT
108
+                        ),
109
+                        has_argument=True,
110
+                    ),
111
+                    cli_machinery.CLIOption(
112
+                        names=("--upper",),
113
+                        help=_msg.TranslatedString(
114
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_UPPER_SPEC_AND_HELP_TEXT
115
+                        ),
116
+                        has_argument=True,
117
+                    ),
118
+                    cli_machinery.CLIOption(
119
+                        names=("--number",),
120
+                        help=_msg.TranslatedString(
121
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_NUMBER_SPEC_AND_HELP_TEXT
122
+                        ),
123
+                        has_argument=True,
124
+                    ),
125
+                    cli_machinery.CLIOption(
126
+                        names=("--space",),
127
+                        help=_msg.TranslatedString(
128
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_SPACE_SPEC_AND_HELP_TEXT
129
+                        ),
130
+                        has_argument=True,
131
+                    ),
132
+                    cli_machinery.CLIOption(
133
+                        names=("--dash",),
134
+                        help=_msg.TranslatedString(
135
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_DASH_SPEC_AND_HELP_TEXT
136
+                        ),
137
+                        has_argument=True,
138
+                    ),
139
+                    cli_machinery.CLIOption(
140
+                        names=("--symbol",),
141
+                        help=_msg.TranslatedString(
142
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_SYMBOL_SPEC_AND_HELP_TEXT
143
+                        ),
144
+                        has_argument=True,
145
+                    ),
146
+                ),
147
+                title=_msg.TranslatedString(
148
+                    _msg.Label.PASSPHRASE_GENERATION_LABEL
149
+                ),
150
+                epilog=_msg.TranslatedString(
151
+                    _msg.Label.PASSPHRASE_GENERATION_EPILOG
152
+                ),
153
+            ),
154
+            cli_machinery.CLIOptionGroup(
155
+                options=(
156
+                    cli_machinery.CLIOption(
157
+                        names=("--notes", "-n"),
158
+                        help=_msg.TranslatedString(
159
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_NOTES_SPEC_AND_HELP_TEXT
160
+                        ),
161
+                    ),
162
+                    cli_machinery.CLIOption(
163
+                        names=("--config", "-c"),
164
+                        help=_msg.TranslatedString(
165
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_CONFIG_SPEC_AND_HELP_TEXT
166
+                        ),
167
+                    ),
168
+                    cli_machinery.CLIOption(
169
+                        names=("--delete", "-x"),
170
+                        help=_msg.TranslatedString(
171
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_DELETE_SPEC_AND_HELP_TEXT
172
+                        ),
173
+                        has_argument=True,
174
+                    ),
175
+                    cli_machinery.CLIOption(
176
+                        names=("--delete-globals",),
177
+                        help=_msg.TranslatedString(
178
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_DELETE_GLOBALS_SPEC_AND_HELP_TEXT
179
+                        ),
180
+                    ),
181
+                    cli_machinery.CLIOption(
182
+                        names=("--clear", "-X"),
183
+                        help=_msg.TranslatedString(
184
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_DELETE_ALL_SPEC_AND_HELP_TEXT
185
+                        ),
186
+                    ),
187
+                ),
188
+                title=_msg.TranslatedString(_msg.Label.CONFIGURATION_LABEL),
189
+                epilog=_msg.TranslatedString(_msg.Label.CONFIGURATION_EPILOG),
190
+            ),
191
+            cli_machinery.CLIOptionGroup(
192
+                options=(
193
+                    cli_machinery.CLIOption(
194
+                        names=("--export", "-e"),
195
+                        help=_msg.TranslatedString(
196
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_EXPORT_SPEC_AND_HELP_TEXT
197
+                        ),
198
+                        has_argument=True,
199
+                    ),
200
+                    cli_machinery.CLIOption(
201
+                        names=("--import", "-i"),
202
+                        help=_msg.TranslatedString(
203
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_IMPORT_SPEC_AND_HELP_TEXT
204
+                        ),
205
+                        has_argument=True,
206
+                    ),
207
+                ),
208
+                title=_msg.TranslatedString(
209
+                    _msg.Label.STORAGE_MANAGEMENT_LABEL
210
+                ),
211
+                epilog=_msg.TranslatedString(
212
+                    _msg.Label.STORAGE_MANAGEMENT_EPILOG
213
+                ),
214
+            ),
215
+            cli_machinery.CLIOptionGroup(
216
+                options=(
217
+                    cli_machinery.CLIOption(
218
+                        names=("--overwrite-existing",),
219
+                        help=_msg.TranslatedString(
220
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_OVERWRITE_SPEC_AND_HELP_TEXT
221
+                        ),
222
+                    ),
223
+                    cli_machinery.CLIOption(
224
+                        names=("--merge-existing",),
225
+                        help=_msg.TranslatedString(
226
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_OVERWRITE_SPEC_AND_HELP_TEXT
227
+                        ),
228
+                    ),
229
+                    cli_machinery.CLIOption(
230
+                        names=("--unset",),
231
+                        help=_msg.TranslatedString(
232
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_UNSET_SPEC_AND_HELP_TEXT
233
+                        ),
234
+                        has_argument=(
235
+                            "phrase",
236
+                            "key",
237
+                            "length",
238
+                            "repeat",
239
+                            "lower",
240
+                            "upper",
241
+                            "number",
242
+                            "space",
243
+                            "dash",
244
+                            "symbol",
245
+                            "notes",
246
+                        ),
247
+                    ),
248
+                    cli_machinery.CLIOption(
249
+                        names=("--export-as",),
250
+                        help=_msg.TranslatedString(
251
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_EXPORT_AS_SPEC_AND_HELP_TEXT
252
+                        ),
253
+                        has_argument=(
254
+                            "json",
255
+                            "sh",
256
+                        ),
257
+                    ),
258
+                    cli_machinery.CLIOption(
259
+                        names=("--modern-editor-interface",),
260
+                        help=_msg.TranslatedString(
261
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_EDITOR_INTERFACE_SPEC_AND_HELP_TEXT
262
+                        ),
263
+                    ),
264
+                    cli_machinery.CLIOption(
265
+                        names=("--vault-legacy-editor-interface",),
266
+                        help=_msg.TranslatedString(
267
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_EDITOR_INTERFACE_SPEC_AND_HELP_TEXT
268
+                        ),
269
+                    ),
270
+                    cli_machinery.CLIOption(
271
+                        names=("--print-notes-after",),
272
+                        help=_msg.TranslatedString(
273
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_PRINT_NOTES_BEFORE_SPEC_AND_HELP_TEXT
274
+                        ),
275
+                    ),
276
+                    cli_machinery.CLIOption(
277
+                        names=("--print-notes-before",),
278
+                        help=_msg.TranslatedString(
279
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_PRINT_NOTES_BEFORE_SPEC_AND_HELP_TEXT
280
+                        ),
281
+                    ),
282
+                    cli_machinery.CLIOption(
283
+                        names=("--ssh-agent-socket-provider",),
284
+                        help=_msg.TranslatedString(
285
+                            _msg.Label.DERIVEPASSPHRASE_VAULT_SSH_AGENT_SOCKET_PROVIDER_SPEC_AND_HELP_TEXT
286
+                        ),
287
+                        has_argument=True,
288
+                    ),
289
+                ),
290
+                title=_msg.TranslatedString(
291
+                    _msg.Label.COMPATIBILITY_OPTION_LABEL
292
+                ),
293
+            ),
294
+            logging_option_group,
295
+            cli_machinery.CLIOptionGroup(
296
+                options=(help_option, version_option),
297
+                title=_msg.TranslatedString(_msg.Label.OTHER_OPTIONS_LABEL),
298
+            ),
299
+        ),
300
+        (cli_machinery.CLIArgument("SERVICE"),),
301
+    ),
302
+    prolog=(
303
+        _msg.TranslatedString(_msg.Label.DERIVEPASSPHRASE_VAULT_01),
304
+        _msg.TranslatedString(_msg.Label.REDUCED_DERIVEPASSPHRASE_VAULT_02),
305
+    ),
306
+    epilog=(
307
+        _msg.TranslatedString(_msg.Label.DERIVEPASSPHRASE_VAULT_EPILOG_01),
308
+        _msg.TranslatedString(_msg.Label.DERIVEPASSPHRASE_VAULT_EPILOG_02),
309
+    ),
310
+)
311
+
312
+
313
+derivepassphrase_export_vault_command_interface = cli_machinery.CLITerminalSubcommand(  # noqa: E501
314
+    names=("vault",),
315
+    contents=(
316
+        (
317
+            cli_machinery.CLIOptionGroup(
318
+                (
319
+                    cli_machinery.CLIOption(
320
+                        names=("--format", "-f"),
321
+                        help=_msg.TranslatedString(
322
+                            _msg.Label.EXPORT_VAULT_FORMAT_SPEC_AND_HELP_TEXT,
323
+                        ),
324
+                    ),
325
+                    cli_machinery.CLIOption(
326
+                        names=("--key", "-k"),
327
+                        help=_msg.TranslatedString(
328
+                            _msg.Label.EXPORT_VAULT_KEY_SPEC_AND_HELP_TEXT,
329
+                        ),
330
+                    ),
331
+                    version_option,
332
+                    help_option,
333
+                ),
334
+                title=_msg.TranslatedString(_msg.Label.OTHER_OPTIONS_LABEL),
335
+            ),
336
+        ),
337
+        (cli_machinery.CLIArgument("PATH"),),
338
+    ),
339
+    prolog=(
340
+        _msg.TranslatedString(_msg.Label.DERIVEPASSPHRASE_EXPORT_VAULT_01),
341
+        _msg.TranslatedString(
342
+            _msg.Label.REDUCED_DERIVEPASSPHRASE_EXPORT_VAULT_02
343
+        ),
344
+        _msg.TranslatedString(
345
+            _msg.Label.REDUCED_DERIVEPASSPHRASE_EXPORT_VAULT_03
346
+        ),
347
+    ),
348
+    epilog=(
349
+        _msg.TranslatedString(_msg.Label.DERIVEPASSPHRASE_VAULT_EPILOG_01),
350
+        _msg.TranslatedString(_msg.Label.DERIVEPASSPHRASE_VAULT_EPILOG_02),
351
+    ),
352
+)
353
+
354
+derivepassphrase_export_command_interface = (
355
+    cli_machinery.CLICompositeSubcommand(
356
+        names=("export",),
357
+        contents=(
358
+            (
359
+                logging_option_group,
360
+                cli_machinery.CLIOptionGroup(
361
+                    (help_option, version_option),
362
+                    title=_msg.TranslatedString(
363
+                        _msg.Label.OTHER_OPTIONS_LABEL
364
+                    ),
365
+                ),
366
+            ),
367
+            (derivepassphrase_export_vault_command_interface,),
368
+            "vault",
369
+        ),
370
+        prolog=(
371
+            _msg.TranslatedString(_msg.Label.DERIVEPASSPHRASE_EXPORT_01),
372
+            _msg.TranslatedString(_msg.Label.DERIVEPASSPHRASE_EXPORT_02),
373
+            _msg.TranslatedString(_msg.Label.DERIVEPASSPHRASE_EXPORT_03),
374
+        ),
375
+        epilog=(),
376
+    )
377
+)
378
+
379
+derivepassphrase_command_interface = cli_machinery.CLICompositeSubcommand(
380
+    names=(),
381
+    contents=(
382
+        (
383
+            logging_option_group,
384
+            cli_machinery.CLIOptionGroup(
385
+                (help_option, version_option),
386
+                title=_msg.TranslatedString(_msg.Label.OTHER_OPTIONS_LABEL),
387
+            ),
388
+        ),
389
+        (derivepassphrase_export_command_interface,),
390
+        "vault",
391
+    ),
392
+    prolog=(
393
+        _msg.TranslatedString(_msg.Label.DERIVEPASSPHRASE_01),
394
+        _msg.TranslatedString(_msg.Label.DERIVEPASSPHRASE_02),
395
+        _msg.TranslatedString(_msg.Label.DERIVEPASSPHRASE_03),
396
+    ),
397
+    epilog=(_msg.TranslatedString(_msg.Label.DERIVEPASSPHRASE_EPILOG_01),),
398
+)
399
+
45 400
 
46 401
 @click.group(
47 402
     context_settings={
48 403