Skip to content

Commit f1396ce

Browse files
author
SunDoge
authored
Merge pull request #12 from SunDoge/group-and-subcommand
update docs
2 parents 4ab0695 + ea7eb12 commit f1396ce

File tree

4 files changed

+60
-68
lines changed

4 files changed

+60
-68
lines changed

.travis.yml

Lines changed: 0 additions & 15 deletions
This file was deleted.

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1212

1313
- Support `add_argument_group`
1414
- Support `add_subparsers`
15+
- Rename `from_args`, `from_known_args` to `parse_args` and `parse_known_args` because `Args` is now a `ArgumentParser`.
1516

1617
## [0.5.2]
1718

README.md

Lines changed: 56 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -21,67 +21,70 @@ If you want to use it on python 3.5 and 3.6 please install `dataclasses`:
2121
pip install dataclasses
2222
```
2323

24-
## Usage
24+
## Core Functionality
2525

26+
Check [_test_v0_6.py](https://github.com/SunDoge/typed-args/blob/master/_test_v0_6.py) for `add_argument_group` and `add_subparsers`.
27+
28+
29+
### Create a parser
30+
31+
`argparse`
2632

2733
```python
2834
import argparse
35+
parser = argparse.ArgumentParser(prog='ProgramName')
36+
```
2937

38+
`typed-args`
39+
40+
```python
3041
import typed_args as ta
3142

32-
"""
33-
argparse
34-
"""
43+
@ta.argument_parser(prog='ProgramName')
44+
class Args:
45+
pass
46+
```
47+
48+
### Add arguments
49+
50+
`argparse`
51+
52+
```python
53+
import argparse
3554
parser = argparse.ArgumentParser()
36-
parser.add_argument(
37-
'data', metavar='DIR', type=str,
38-
help='path to dataset'
39-
)
40-
parser.add_argument(
41-
'-a', '--arch', metavar='ARCH', default='resnet18', type=str,
42-
help='model architecture (default: resnet18)'
43-
)
44-
parser.add_argument(
45-
'-j', '--workers', default=4, metavar='N', type=int, dest='num_workers',
46-
help='number of data loading workers (default: 4)'
47-
)
48-
49-
"""
50-
TypedArgs
51-
"""
55+
parser.add_argument('filename') # positional argument
56+
parser.add_argument('-c', '--count') # option that takes a value
57+
parser.add_argument('-v', '--verbose',
58+
action='store_true') # on/off flag
59+
```
60+
61+
`typed-args`
62+
63+
```python
64+
import typed_args as ta
65+
5266
@ta.argument_parser()
5367
class Args:
54-
data: str = ta.add_argument(
55-
metavar='DIR', type=str, help='path to dataset'
56-
)
57-
arch: str = ta.add_argument(
58-
'-a', '--arch', metavar='ARCH', default='resnet18', type=str,
59-
help='model architecture (default: resnet18)'
60-
)
61-
num_workers: int = ta.add_argument(
62-
'-j', '--workers', default=4, metavar='N', type=int,
63-
help='number of data loading workers (default: 4)'
64-
)
65-
66-
67-
def test_args():
68-
data = '/path/to/dataset'
69-
arch = 'resnet50'
70-
num_workers = 8
71-
72-
argv = f'{data} -a {arch} --workers {num_workers}'.split()
73-
74-
"""
75-
from_args = parse_args, from_known_args = parse_known_args
76-
"""
77-
typed_args = Args.parse_args(argv)
78-
args = parser.parse_args(argv)
79-
80-
assert args.arch == typed_args.arch
81-
assert args.data == typed_args.data
82-
assert args.num_workers == typed_args.num_workers
83-
84-
85-
if __name__ == "__main__":
86-
test_args()
68+
filename: str = ta.add_argument() # positional argument, use the attribute name automatically
69+
count: str = ta.add_argument('-c', '--count') # option that takes a value, also can be annotated as Optional[str]
70+
verbose: bool = ta.add_argument('-v', '--verbose',
71+
action='store_true') # on/off flag
8772
```
73+
74+
### Parse args
75+
76+
`argparse`
77+
78+
```python
79+
args = parser.parse_args()
80+
print(args.filename, args.count, args.verbose)
81+
```
82+
83+
`typed-args`
84+
85+
```python
86+
args = Args.parse_args()
87+
print(args.filename, args.count, args.verbose)
88+
```
89+
90+

typed_args/_utils.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ class SubcommandEnum(_Subcommand, enum.Enum):
6565

6666

6767
class DefaultHelpFormatter(argparse.HelpFormatter):
68+
"""
69+
Show FOO instead of GROUP1.FOO as metavar
70+
"""
6871

6972
def _get_default_metavar_for_optional(self, action: argparse.Action) -> str:
7073
return action.dest.split('.')[-1].upper()

0 commit comments

Comments
 (0)