From 35dcd1e07f4b1707d79c7daa3831597a87830d6d Mon Sep 17 00:00:00 2001 From: WH-2099 Date: Sat, 9 May 2026 10:52:36 +0800 Subject: [PATCH] fix api docs cleanup --- api/dev/generate_swagger_markdown_docs.py | 8 ++--- .../test_generate_swagger_markdown_docs.py | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/api/dev/generate_swagger_markdown_docs.py b/api/dev/generate_swagger_markdown_docs.py index 508998cc36..0900d08331 100644 --- a/api/dev/generate_swagger_markdown_docs.py +++ b/api/dev/generate_swagger_markdown_docs.py @@ -9,7 +9,6 @@ from __future__ import annotations import argparse import logging -import shutil import subprocess import sys import tempfile @@ -116,11 +115,8 @@ def generate_markdown_docs( (markdown_dir / STALE_COMBINED_MARKDOWN_FILENAME).unlink(missing_ok=True) finally: if not keep_swagger_json: - if swagger_dir == markdown_dir or markdown_dir.is_relative_to(swagger_dir): - for path in spec_paths: - path.unlink(missing_ok=True) - else: - shutil.rmtree(swagger_dir, ignore_errors=True) + for path in spec_paths: + path.unlink(missing_ok=True) return written_paths diff --git a/api/tests/unit_tests/commands/test_generate_swagger_markdown_docs.py b/api/tests/unit_tests/commands/test_generate_swagger_markdown_docs.py index a8673e56bc..62d3d79cf1 100644 --- a/api/tests/unit_tests/commands/test_generate_swagger_markdown_docs.py +++ b/api/tests/unit_tests/commands/test_generate_swagger_markdown_docs.py @@ -65,3 +65,39 @@ def test_generate_markdown_docs_keeps_split_docs_and_merges_fastopenapi_into_con assert "#### Routes" in console_markdown assert "FastOpenAPI Preview" not in (markdown_dir / "web-swagger.md").read_text(encoding="utf-8") assert "FastOpenAPI Preview" not in (markdown_dir / "service-swagger.md").read_text(encoding="utf-8") + + +def test_generate_markdown_docs_only_removes_generated_specs_from_separate_swagger_dir(tmp_path, monkeypatch): + module = _load_generate_swagger_markdown_docs_module() + swagger_dir = tmp_path / "swagger" + markdown_dir = tmp_path / "markdown" + swagger_dir.mkdir() + existing_file = swagger_dir / "existing.txt" + existing_file.write_text("keep me", encoding="utf-8") + + def write_specs(output_dir: Path) -> list[Path]: + output_dir.mkdir(parents=True, exist_ok=True) + paths = [] + for target in module.SPEC_TARGETS: + path = output_dir / target.filename + path.write_text("{}", encoding="utf-8") + paths.append(path) + return paths + + def write_fastopenapi_specs(output_dir: Path) -> list[Path]: + output_dir.mkdir(parents=True, exist_ok=True) + path = output_dir / module.FASTOPENAPI_SPEC_TARGETS[0].filename + path.write_text("{}", encoding="utf-8") + return [path] + + def convert_spec_to_markdown(spec_path: Path, markdown_path: Path) -> None: + markdown_path.write_text(f"# {spec_path.stem}\n", encoding="utf-8") + + monkeypatch.setattr(module, "generate_specs", write_specs) + monkeypatch.setattr(module, "generate_fastopenapi_specs", write_fastopenapi_specs) + monkeypatch.setattr(module, "_convert_spec_to_markdown", convert_spec_to_markdown) + + module.generate_markdown_docs(swagger_dir, markdown_dir) + + assert existing_file.read_text(encoding="utf-8") == "keep me" + assert not list(swagger_dir.glob("*.json"))