Skip to content

Commit 2c0c979

Browse files
committed
better example presentation
1 parent 03712c3 commit 2c0c979

File tree

2 files changed

+46
-16
lines changed

2 files changed

+46
-16
lines changed

docs/examples.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def load_examples() -> Iterator[tuple[str, Callable[[], ComponentType]]]:
2222

2323
def all_example_names() -> set[str]:
2424
names = set()
25-
for file in _iter_example_files():
25+
for file in _iter_example_files(SOURCE_DIR):
2626
path = file.parent if file.name == "app.py" else file
2727
names.add("/".join(path.relative_to(SOURCE_DIR).with_suffix("").parts))
2828
return names
@@ -64,12 +64,12 @@ def get_example_files_by_name(
6464
return [path] if path.exists() else []
6565

6666

67-
def _iter_example_files() -> Iterator[Path]:
68-
for path in SOURCE_DIR.iterdir():
67+
def _iter_example_files(root: Path) -> Iterator[Path]:
68+
for path in root.iterdir():
6969
if path.is_dir():
7070
if not path.name.startswith("_") or path.name == "_examples":
71-
yield from path.rglob("*.py")
72-
elif path != CONF_FILE and path.suffix == ".py":
71+
yield from _iter_example_files(path)
72+
elif path.suffix == ".py" and path != CONF_FILE:
7373
yield path
7474

7575

scripts/one_example.py

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,33 +46,63 @@ def update_component():
4646

4747
def _example_name_input() -> str:
4848
if len(sys.argv) == 1:
49-
print("No example argument given. Provide an example's number or name:")
50-
_print_available_options()
49+
_print_error(
50+
"No example argument given. Provide an example's number from above."
51+
)
5152
sys.exit(1)
5253

53-
ex_name = sys.argv[1]
54-
55-
if ex_name in EXAMPLE_NAME_SET:
56-
return ex_name
54+
ex_num = sys.argv[1]
5755

5856
try:
59-
ex_num = int(ex_name)
57+
ex_num = int(ex_num)
6058
except ValueError:
61-
print(f"No example {ex_name!r} exists. Provide an example's number or name:")
62-
_print_available_options()
59+
_print_error(
60+
f"No example {ex_num!r} exists. Provide an example's number as an integer."
61+
)
6362
sys.exit(1)
6463

6564
ex_index = ex_num - 1
6665
try:
6766
return EXAMPLE_NAME_LIST[ex_index]
6867
except IndexError:
69-
print(f"No example #{ex_num} exists.")
68+
_print_error(f"No example #{ex_num} exists. Choose from an option above.")
7069
sys.exit(1)
7170

7271

72+
def _print_error(*args) -> None:
73+
_print_available_options()
74+
print(*args)
75+
76+
7377
def _print_available_options():
78+
examples_by_path = {}
7479
for i, name in enumerate(EXAMPLE_NAME_LIST):
75-
print(f"{i + 1}.", name)
80+
if "/" not in name:
81+
path = ""
82+
else:
83+
path, name = name.rsplit("/", 1)
84+
examples_by_path.setdefault(path, []).append(name)
85+
86+
number = 1
87+
print()
88+
for path, names in examples_by_path.items():
89+
title = " ".join(
90+
map(
91+
str.title,
92+
path.replace("/_examples", "")
93+
.replace("/", " > ")
94+
.replace("-", " ")
95+
.replace("_", " ")
96+
.upper()
97+
.split(),
98+
)
99+
)
100+
print(title)
101+
print("-" * len(title))
102+
for name in names:
103+
print(f"{number}. ", name)
104+
number += 1
105+
print()
76106

77107

78108
if __name__ == "__main__":

0 commit comments

Comments
 (0)