ci: Add DevOps quality assurance with pre-commit hooks and GitHub Actions
- Add pre-commit hooks: Ruff lint/format, Bandit security scan, YAML/TOML validation - Add GitHub Actions CI workflow: lint, security, test, and build jobs - Configure Ruff and Bandit in pyproject.toml - Add pytest test suite for build_epub.py (25 tests) - Fix code issues: exception chaining, httpx timeout, formatting - Add requirements.txt and requirements-dev.txt
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
import ast
|
||||
import json
|
||||
from typing import Dict, List
|
||||
|
||||
|
||||
class APIDocExtractor(ast.NodeVisitor):
|
||||
"""Extract API documentation from Python source code."""
|
||||
@@ -11,13 +10,13 @@ class APIDocExtractor(ast.NodeVisitor):
|
||||
|
||||
def visit_FunctionDef(self, node):
|
||||
"""Extract function documentation."""
|
||||
if node.name.startswith('get_') or node.name.startswith('post_'):
|
||||
if node.name.startswith("get_") or node.name.startswith("post_"):
|
||||
doc = ast.get_docstring(node)
|
||||
endpoint = {
|
||||
'name': node.name,
|
||||
'docstring': doc,
|
||||
'params': [arg.arg for arg in node.args.args],
|
||||
'returns': self._extract_return_type(node)
|
||||
"name": node.name,
|
||||
"docstring": doc,
|
||||
"params": [arg.arg for arg in node.args.args],
|
||||
"returns": self._extract_return_type(node),
|
||||
}
|
||||
self.endpoints.append(endpoint)
|
||||
self.generic_visit(node)
|
||||
@@ -28,7 +27,8 @@ class APIDocExtractor(ast.NodeVisitor):
|
||||
return ast.unparse(node.returns)
|
||||
return "Any"
|
||||
|
||||
def generate_markdown_docs(endpoints: List[Dict]) -> str:
|
||||
|
||||
def generate_markdown_docs(endpoints: list[dict]) -> str:
|
||||
"""Generate markdown documentation from endpoints."""
|
||||
docs = "# API Documentation\n\n"
|
||||
|
||||
@@ -41,9 +41,11 @@ def generate_markdown_docs(endpoints: List[Dict]) -> str:
|
||||
|
||||
return docs
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
with open(sys.argv[1], 'r') as f:
|
||||
|
||||
with open(sys.argv[1]) as f:
|
||||
tree = ast.parse(f.read())
|
||||
|
||||
extractor = APIDocExtractor()
|
||||
|
||||
Reference in New Issue
Block a user