1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from __future__ import annotations
import subprocess
from fastapi import Request
from starlette.responses import Response
from pygitweb.api.action import Action
from pygitweb_pytesthtml.constants import PYTESTHTML_ACTION_NAME
from pygitweb_pytesthtml.worktree import cleanup_pytest_run, prepare_pytest_run
class ActionPytestHtml(Action):
"""
ActionPytestHtml: Run pytest and render the results.
"""
def action_name(self) -> str:
return PYTESTHTML_ACTION_NAME
def action(self, project: str, req: Request | None = None) -> Response | None:
cwd, report = prepare_pytest_run(project)
try:
subprocess.run(
["pytest", f"--html={report}", "--self-contained-html"],
cwd=str(cwd),
)
finally:
cleanup_pytest_run(project)
return None