blob: 01a8ac074f949c03111e321f6bb41dfa9c59fb3d (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
Leverage the power of `pydantic` to create `click` command line applications!
# Getting started
Invoke the example module:
```
$ python -m pydanclick.examples --help
```
# Architecture
```
┌─────────────────────────────────────────────────┐
│ Pydantic Schema │
├─────────────────────────────────────────────────┤
│ class MainArguments(BaseModel): │
│ verbose: bool │
│ name: str = Field(description="Service name.")│
│ ... │
└──┬──▲───────────────────────────────────────────┘
│ │
│ │
│ │ Reads schema
│ │ + generate click interface
│ ┌┴────────────────────────┐
│ │ Pydanclick decorator ├─────────────────────────────┐
│ ├─────────────────────────┤ │
│ │ pydanclick.core.command │ │
│ │ pydanclick.core.group │ │
│ └─────────────────────────┘ │
│ │
┌──▼───────────────────────────────────────────────────────┐ │
│ Click Interface │ │
├──────────────────────────────────────────────────────────┤ │
│ click.Option("--verbose", required=True, type=click.BOOL)│ │
│ type=click.BOOL) │ │
│ click.Option("--name", required=True, │ │
│ type=click.STR, │ │
│ help="Service Name.") │ │
└──────────────────────────────────────────────────────────┘ │
│
┌────────────────────────────────────┐ │
│ Entrypoint invocation │◄──────────────────────┘
├────────────────────────────────────┤ Read annotation(s)
│ @command() │ + invoke with arguments
│ def main(parameter: MainArguments):│ from click
│ ... │
│ │
│ if __name__ == "__main__": │
│ main() │
└────────────────────────────────────┘
```
|