summaryrefslogtreecommitdiffstats
path: root/README.md
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()                           │
└────────────────────────────────────┘
```
remember that computers suck.