Repository navigation
Expand file tree
/
Copy pathsimple_cli.py
More file actions
127 lines (93 loc) · 2.91 KB
/
Copy pathsimple_cli.py
File metadata and controls
127 lines (93 loc) · 2.91 KB
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
#!/usr/bin/env python3
"""
Simple CLI - Minimalne CLI z markdown help
Pokazuje jak w kilku liniach stworzyć profesjonalne CLI
z kolorowym helpem i markdown w docstrings.
Run: python examples/simple_cli.py --help
python examples/simple_cli.py greet Alice
python examples/simple_cli.py info
"""
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[2]))
import clickmd
if not clickmd.CLICK_AVAILABLE:
print("Ten przykład wymaga click: pip install clickmd[click]")
sys.exit(1)
# ============================================================================
# NAJPROSTSZE CLI - jedna komenda
# ============================================================================
@clickmd.command(cls=clickmd.MarkdownCommand)
@clickmd.argument("name")
@clickmd.option("--loud", "-l", is_flag=True, help="Użyj **WIELKICH** liter")
def greet(name, loud) -> None:
"""
# 👋 Powitanie
Wyświetla powitanie dla podanej osoby.
## Przykłady
```bash
python simple_cli.py greet Alice
python simple_cli.py greet Bob --loud
```
"""
message = f"Hello, {name}!"
if loud:
message = message.upper()
clickmd.success(message)
# ============================================================================
# CLI Z GRUPĄ KOMEND
# ============================================================================
@clickmd.group(cls=clickmd.MarkdownGroup)
def cli() -> None:
"""
# 🛠️ Simple CLI Tool
Przykładowe narzędzie CLI z **clickmd**.
## Szybki start
```bash
simple_cli.py greet Alice
simple_cli.py info
```
"""
pass
@cli.command(cls=clickmd.MarkdownCommand)
@clickmd.argument("name")
def hello(name) -> None:
"""Przywitaj użytkownika."""
clickmd.success(f"Hello, {name}!")
@cli.command(cls=clickmd.MarkdownCommand)
def info() -> None:
"""
# Informacje o systemie
Wyświetla informacje o środowisku.
"""
import platform
clickmd.table(
headers=["Właściwość", "Wartość"],
rows=[
["Python", platform.python_version()],
["System", platform.system()],
["clickmd", "1.5.0"],
],
)
@cli.command(cls=clickmd.MarkdownCommand)
@clickmd.option("--format", "-f", type=clickmd.Choice(["json", "yaml", "table"]), default="table")
def status(format):
"""
Pokaż status aplikacji.
Formaty: `json`, `yaml`, `table`
"""
data = {
"status": "running",
"uptime": "2h 30m",
"memory": "128 MB",
}
if format == "json":
import json
clickmd.md(f"```json\n{json.dumps(data, indent=2)}\n```")
elif format == "yaml":
yaml_str = "\n".join(f"{k}: {v}" for k, v in data.items())
clickmd.md(f"```yaml\n{yaml_str}\n```")
else:
clickmd.table(headers=["Key", "Value"], rows=[[k, v] for k, v in data.items()])
if __name__ == "__main__":
cli()