28
28
from absl import app
29
29
from absl import flags
30
30
from absl import logging
31
- from absl .flags import argparse_flags
32
31
32
+ import simple_parsing
33
33
import tensorflow_datasets .public_api as tfds
34
34
35
35
# Import commands
@@ -46,7 +46,7 @@ def _parse_flags(argv: List[str]) -> argparse.Namespace:
46
46
"""Command lines flag parsing."""
47
47
argv = flag_utils .normalize_flags (argv ) # See b/174043007 for context.
48
48
49
- parser = argparse_flags .ArgumentParser (
49
+ parser = simple_parsing .ArgumentParser (
50
50
description = 'Tensorflow Datasets CLI tool' ,
51
51
allow_abbrev = False ,
52
52
)
@@ -67,7 +67,22 @@ def _parse_flags(argv: List[str]) -> argparse.Namespace:
67
67
new .register_subparser (subparser )
68
68
convert_format .register_subparser (subparser )
69
69
croissant .register_subparser (subparser )
70
- return parser .parse_args (argv [1 :])
70
+
71
+ namespace , remaining_argv = parser .parse_known_args (argv [1 :])
72
+
73
+ # Manually parse absl flags from the remaining arguments.
74
+ try :
75
+ # FLAGS requires the program name as the first argument.
76
+ positionals = FLAGS (argv [:1 ] + remaining_argv )
77
+ except flags .Error as e :
78
+ parser .error (str (e ))
79
+
80
+ # There should be no positional arguments left, as they should have been
81
+ # handled by the sub-commands.
82
+ if len (positionals ) > 1 :
83
+ parser .error (f"unrecognized arguments: { ' ' .join (positionals [1 :])} " )
84
+
85
+ return namespace
71
86
72
87
73
88
def main (args : argparse .Namespace ) -> None :
0 commit comments