|
20 | 20 | from __future__ import annotations |
21 | 21 |
|
22 | 22 | import argparse |
| 23 | +import importlib.metadata |
23 | 24 | import re |
24 | 25 | import sys |
25 | 26 | from pathlib import Path |
@@ -374,9 +375,33 @@ def get_object(root, dotted: str): |
374 | 375 | ) |
375 | 376 |
|
376 | 377 |
|
377 | | -def build_body(root, page: dict) -> str: |
| 378 | +def cldk_version() -> str: |
| 379 | + """The version of the installed `cldk` these pages were generated from.""" |
| 380 | + try: |
| 381 | + return importlib.metadata.version("cldk") |
| 382 | + except importlib.metadata.PackageNotFoundError: |
| 383 | + return "" |
| 384 | + |
| 385 | + |
| 386 | +def version_badge(version: str) -> str: |
| 387 | + """A shields.io badge stating the python-sdk version, linked to PyPI.""" |
| 388 | + if not version: |
| 389 | + return "" |
| 390 | + safe = version.replace("-", "--") |
| 391 | + return ( |
| 392 | + f"[![cldk {version}]" |
| 393 | + f"(https://img.shields.io/badge/cldk-{safe}-3776AB?logo=pypi&logoColor=white)]" |
| 394 | + f"(https://pypi.org/project/cldk/{version}/)" |
| 395 | + ) |
| 396 | + |
| 397 | + |
| 398 | +def build_body(root, page: dict, version: str = "") -> str: |
378 | 399 | """The generated symbol reference body (no frontmatter).""" |
379 | | - out: list[str] = [GITHUB_BADGE, ""] |
| 400 | + badge = version_badge(version) |
| 401 | + header = f"{GITHUB_BADGE} {badge}" if badge else GITHUB_BADGE |
| 402 | + out: list[str] = [header, ""] |
| 403 | + if version: |
| 404 | + out += [f"_API reference generated from cldk {version}._", ""] |
380 | 405 | multi = len(page["sections"]) > 1 |
381 | 406 | for heading, dotted in page["sections"]: |
382 | 407 | module = get_object(root, dotted) |
@@ -470,9 +495,16 @@ def main() -> int: |
470 | 495 | ) |
471 | 496 | return 1 |
472 | 497 |
|
| 498 | + version = cldk_version() |
| 499 | + if version: |
| 500 | + print(f"generating from cldk {version}") |
| 501 | + else: |
| 502 | + print("warning: could not determine the cldk version (is it installed?)", |
| 503 | + file=sys.stderr) |
| 504 | + |
473 | 505 | args.out.mkdir(parents=True, exist_ok=True) |
474 | 506 | for page in PAGES: |
475 | | - body = build_body(root, page) |
| 507 | + body = build_body(root, page, version) |
476 | 508 | dest = args.out / page["file"] |
477 | 509 | text = inject_or_create(dest, page, body) |
478 | 510 | mode = "injected into" if dest.exists() and MARK_START in dest.read_text(encoding="utf-8") else "wrote" |
|
0 commit comments