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
32
33
34
35
36
37
38
39
40
41
42
from __future__ import annotations
import subprocess
from pathlib import Path
from types import TracebackType
from typing import Self
from fastapi import Request
from starlette.responses import Response
from pygitweb.api.action import Action
from pygitweb.config import settings
from pygitweb_pytesthtml.constants import PYTESTHTML_ACTION_NAME
class ActionPytestHtml(Action):
"""
ActionPytestHtml: Run pytest and render the results.
"""
def __enter__(self) -> Self:
return self
def __exit__(
self,
exc_type: type[BaseException] | None,
exc_value: BaseException | None,
traceback: TracebackType | None,
) -> bool | None:
return None
def action_name(self) -> str:
return PYTESTHTML_ACTION_NAME
def action(self, project: str, req: Request | None = None) -> Response | None:
cwd = Path(settings.PROJECTROOT) / project
subprocess.run(
["pytest", "--html=.pygitweb/pytest_report.html", "--self-contained-html"],
cwd=str(cwd),
)
return None