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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
# SubCommands in a Single File
In some cases, it's possible that your application code needs to live on a single file.
You can still use the same ideas:
{* docs_src/subcommands/tutorial002/main.py *}
There are several things to notice here...
## Apps at the top
First, you can create `typer.Typer()` objects and add them to another one at the top.
It doesn't have to be done after creating the subcommands:
{* docs_src/subcommands/tutorial002/main.py hl[4,5,6,7] *}
You can add the commands (subcommands) to each `typer.Typer()` app later and it will still work.
## Function names
As you now have subcommands like `create` for `users` and for `items`, you can no longer call the functions with just the name, like `def create()`, because they would overwrite each other.
So we use longer names:
{* docs_src/subcommands/tutorial002/main.py hl[11,16,21,26,31] *}
## Command name
We are naming the functions with longer names so that they don't overwrite each other.
But we still want the subcommands to be `create`, `delete`, etc.
To call them like:
<div class="termy">
```console
// We want this ✔️
$ python main.py items create
```
</div>
instead of:
<div class="termy">
```console
// We don't want this ⛔️
$ python main.py items items-create
```
</div>
So we pass the name we want to use for each subcommand as the function argument to the decorator:
{* docs_src/subcommands/tutorial002/main.py hl[10,15,20,25,30] *}
## Check it
It still works the same:
<div class="termy">
```console
// Check the help
$ python main.py --help
Usage: main.py [OPTIONS] COMMAND [ARGS]...
Options:
--install-completion Install completion for the current shell.
--show-completion Show completion for the current shell, to copy it or
customize the installation.
--help Show this message and exit.
Commands:
items
users
```
</div>
Check the `items` command:
<div class="termy">
```console
// Check the help for items
$ python main.py items --help
// It shows its own commands (subcommands): create, delete, sell
Usage: main.py items [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
create
delete
sell
// Try it
$ python main.py items create Wand
Creating item: Wand
$ python main.py items sell Vase
Selling item: Vase
```
</div>
And the same for the `users` command:
<div class="termy">
```console
$ python main.py users --help
Usage: main.py users [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
create
delete
// Try it
$ python main.py users create Camila
Creating user: Camila
```
</div>
|