Skip to content

Commit 3a34697

Browse files
fineguyThe TensorFlow Datasets Authors
authored andcommitted
Use simple_parsing for new cli command.
PiperOrigin-RevId: 792079370
1 parent 44239d8 commit 3a34697

File tree

1 file changed

+46
-44
lines changed
  • tensorflow_datasets/scripts/cli

1 file changed

+46
-44
lines changed

tensorflow_datasets/scripts/cli/new.py

Lines changed: 46 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@
1616
"""`tfds new` command."""
1717

1818
import argparse
19+
import dataclasses
1920
import os
2021
import pathlib
2122
import subprocess
2223
import textwrap
23-
from typing import Optional
24+
import typing
2425

26+
import simple_parsing
2527
from tensorflow_datasets.core import constants
2628
from tensorflow_datasets.core import dataset_metadata
2729
from tensorflow_datasets.core import naming
@@ -30,60 +32,60 @@
3032
from tensorflow_datasets.scripts.cli import cli_utils as utils
3133

3234

33-
def register_subparser(parsers: argparse._SubParsersAction) -> None: # pylint: disable=protected-access
34-
"""Add subparser for `new` command."""
35-
new_parser = parsers.add_parser(
36-
'new', help='Creates a new dataset directory from the template.'
37-
)
38-
new_parser.add_argument(
39-
'dataset_name', # Positional argument
40-
type=str,
41-
help='Name of the dataset to be created (in snake_case)',
35+
@dataclasses.dataclass(frozen=True, kw_only=True)
36+
class Args:
37+
"""CLI arguments for creating a new dataset directory.
38+
39+
Attributes:
40+
dataset_name: Name of the dataset to be created (in snake_case).
41+
data_format: Format of the input data, which is used to generate a
42+
format-specific template.
43+
dir: Path where the dataset directory will be created. Defaults to current
44+
directory.
45+
"""
46+
47+
dataset_name: str = simple_parsing.field(
48+
positional=True,
49+
# Need to explicitly set metavar for command-line help.
50+
metavar='dataset_name',
4251
)
43-
new_parser.add_argument(
44-
'--data_format', # Optional argument
45-
type=str,
52+
data_format: str = simple_parsing.choice(
53+
builder_templates.STANDARD,
54+
builder_templates.CONLL,
55+
builder_templates.CONLLU,
4656
default=builder_templates.STANDARD,
47-
choices=[
48-
builder_templates.STANDARD,
49-
builder_templates.CONLL,
50-
builder_templates.CONLLU,
51-
],
52-
help=(
53-
'Optional format of the input data, which is used to generate a '
54-
'format-specific template.'
55-
),
56-
)
57-
new_parser.add_argument(
58-
'--dir',
59-
type=pathlib.Path,
60-
default=pathlib.Path.cwd(),
61-
help=(
62-
'Path where the dataset directory will be created. '
63-
'Defaults to current directory.'
64-
),
6557
)
66-
new_parser.set_defaults(subparser_fn=_create_dataset_files)
67-
68-
69-
def _create_dataset_files(args: argparse.Namespace) -> None:
70-
"""Creates the dataset directory. Executed by `tfds new <name>`."""
71-
if not naming.is_valid_dataset_and_class_name(args.dataset_name):
72-
raise ValueError(
73-
'Invalid dataset name. It should be a valid Python class name.'
58+
dir: pathlib.Path = simple_parsing.field(default_factory=pathlib.Path.cwd)
59+
60+
def execute(self) -> None:
61+
"""Creates the dataset directory."""
62+
if not naming.is_valid_dataset_and_class_name(self.dataset_name):
63+
raise ValueError(
64+
'Invalid dataset name. It should be a valid Python class name.'
65+
)
66+
67+
create_dataset_files(
68+
dataset_name=self.dataset_name,
69+
dataset_dir=self.dir,
70+
data_format=self.data_format,
7471
)
7572

76-
create_dataset_files(
77-
dataset_name=args.dataset_name,
78-
dataset_dir=args.dir,
79-
data_format=args.data_format,
73+
74+
def register_subparser(parsers: argparse._SubParsersAction) -> None:
75+
"""Add subparser for `new` command."""
76+
parser = parsers.add_parser(
77+
'new',
78+
help='Creates a new dataset directory from the template.',
8079
)
80+
parser = typing.cast(simple_parsing.ArgumentParser, parser)
81+
parser.add_arguments(Args, dest='args')
82+
parser.set_defaults(subparser_fn=lambda args: args.args.execute())
8183

8284

8385
def create_dataset_files(
8486
dataset_name: str,
8587
dataset_dir: pathlib.Path,
86-
data_format: Optional[str] = None,
88+
data_format: str | None = None,
8789
) -> None:
8890
"""Creates the dataset files."""
8991
# Creates the root directory

0 commit comments

Comments
 (0)