Coverage for utils/docs/export_openapi.py: 0.00%

30 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2025-10-13 18:58 +0000

1#!/usr/bin/env python3 

2""" 

3OpenAPI规范导出脚本 

4 

5用途:从FastAPI应用导出OpenAPI规范到JSON文件 

6""" 

7import argparse 

8import json 

9import sys 

10from pathlib import Path 

11 

12# 添加backend目录到Python路径 

13backend_dir = Path(__file__).parent.parent / "backend" 

14sys.path.insert(0, str(backend_dir)) 

15 

16from main import app 

17 

18 

19def export_openapi(output_path: str): 

20 """ 

21 导出OpenAPI规范 

22 

23 Args: 

24 output_path: 输出文件路径 

25 """ 

26 # 获取OpenAPI规范 

27 openapi_schema = app.openapi() 

28 

29 # 确保输出目录存在 

30 output_file = Path(output_path) 

31 output_file.parent.mkdir(parents=True, exist_ok=True) 

32 

33 # 写入文件 

34 with open(output_file, "w", encoding="utf-8") as f: 

35 json.dump(openapi_schema, f, indent=2, ensure_ascii=False) 

36 

37 print(f"✅ OpenAPI规范已导出到: {output_path}") 

38 

39 # 打印统计信息 

40 endpoints = len( 

41 [ 

42 path 

43 for path in openapi_schema.get("paths", {}).values() 

44 for method in path.keys() 

45 ] 

46 ) 

47 schemas = len(openapi_schema.get("components", {}).get("schemas", {})) 

48 

49 print(f"📊 统计信息:") 

50 print(f" - API端点数量: {endpoints}") 

51 print(f" - 数据模型数量: {schemas}") 

52 

53 

54def main(): 

55 parser = argparse.ArgumentParser(description="导出FastAPI应用的OpenAPI规范") 

56 parser.add_argument( 

57 "--output", 

58 "-o", 

59 default="docs/api/openapi.json", 

60 help="输出文件路径 (默认: docs/api/openapi.json)", 

61 ) 

62 

63 args = parser.parse_args() 

64 

65 try: 

66 export_openapi(args.output) 

67 except Exception as e: 

68 print(f"❌ 导出失败: {e}") 

69 sys.exit(1) 

70 

71 

72if __name__ == "__main__": 

73 main()