@@ -21,67 +21,70 @@ If you want to use it on python 3.5 and 3.6 please install `dataclasses`:
21
21
pip install dataclasses
22
22
```
23
23
24
- ## Usage
24
+ ## Core Functionality
25
25
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 `
26
32
27
33
``` python
28
34
import argparse
35
+ parser = argparse.ArgumentParser(prog = ' ProgramName' )
36
+ ```
29
37
38
+ ` typed-args `
39
+
40
+ ``` python
30
41
import typed_args as ta
31
42
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
35
54
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
+
52
66
@ta.argument_parser ()
53
67
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
87
72
```
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
+
0 commit comments