Add CLI tests #22
@ -1,92 +1,4 @@
|
|||||||
import typer
|
from nixprstatus.app import app
|
||||||
import json
|
|
||||||
from typing import Annotated
|
|
||||||
from nixprstatus.pr import pr_merge_status
|
|
||||||
from nixprstatus.pr import commits_since
|
|
||||||
from nixprstatus.watchlist import Watchlist
|
|
||||||
from nixprstatus.output import OutputFormat
|
|
||||||
|
|
||||||
app = typer.Typer(rich_markup_mode=None)
|
|
||||||
watchlist_app = typer.Typer()
|
|
||||||
app.add_typer(watchlist_app, name="watchlist", help="Manage watchlist.")
|
|
||||||
|
|
||||||
DEFAULT_HEADERS = {
|
|
||||||
"Accept": "application/vnd.github.text+json",
|
|
||||||
}
|
|
||||||
|
|
||||||
BRANCHES = ["nixos-unstable-small", "nixos-unstable", "nixos-24.05"]
|
|
||||||
|
|
||||||
|
|
||||||
@app.command()
|
|
||||||
def pr(
|
|
||||||
pr: list[int],
|
|
||||||
branches: Annotated[
|
|
||||||
list[str] | None, typer.Option(help="Check specific branch")
|
|
||||||
] = None,
|
|
||||||
format: Annotated[
|
|
||||||
OutputFormat, typer.Option(help="Output format")
|
|
||||||
] = OutputFormat.CONSOLE,
|
|
||||||
) -> None:
|
|
||||||
"""Get merge status of pull request."""
|
|
||||||
if isinstance(pr, int):
|
|
||||||
status = pr_merge_status(pr, branches)
|
|
||||||
status.print(format=format)
|
|
||||||
return
|
|
||||||
|
|
||||||
for pr_ in pr:
|
|
||||||
status = pr_merge_status(pr_, branches)
|
|
||||||
status.print(format=format)
|
|
||||||
print()
|
|
||||||
|
|
||||||
|
|
||||||
@app.command()
|
|
||||||
def since(
|
|
||||||
commit_sha: str,
|
|
||||||
target: str = "nixos-unstable",
|
|
||||||
waybar_format: Annotated[
|
|
||||||
bool, typer.Option(help="Output in format expected by waybar")
|
|
||||||
] = False,
|
|
||||||
) -> None:
|
|
||||||
"""
|
|
||||||
Return the count of commits that has happened between the two refs.
|
|
||||||
"""
|
|
||||||
count = commits_since(target, commit_sha)
|
|
||||||
|
|
||||||
if waybar_format:
|
|
||||||
output = {"text": str(count), "tooltip": f"{target}: {count}"}
|
|
||||||
typer.echo(json.dumps(output))
|
|
||||||
return
|
|
||||||
typer.echo(count)
|
|
||||||
|
|
||||||
|
|
||||||
@watchlist_app.command(name="list")
|
|
||||||
def command_list(
|
|
||||||
watchlist: str | None = None, format: OutputFormat = OutputFormat.CONSOLE
|
|
||||||
) -> None:
|
|
||||||
"""List PRs in watchlist."""
|
|
||||||
wl = Watchlist.from_file(path=watchlist)
|
|
||||||
wl.print(format=format)
|
|
||||||
|
|
||||||
|
|
||||||
@watchlist_app.command()
|
|
||||||
def add(pr: int, watchlist: str | None = None) -> None:
|
|
||||||
"""Add PR to watchlist."""
|
|
||||||
wl = Watchlist.from_file(path=watchlist)
|
|
||||||
info = wl.add_pr(pr)
|
|
||||||
wl.to_file(path=watchlist)
|
|
||||||
print(f"Added #{info.pr}: {info.title} to watchlist.")
|
|
||||||
|
|
||||||
|
|
||||||
@watchlist_app.command()
|
|
||||||
def remove(pr: int) -> None:
|
|
||||||
"""Remove PR from watchlist."""
|
|
||||||
wl = Watchlist.from_file()
|
|
||||||
if pr not in wl:
|
|
||||||
print(f"#{pr} not in watchlist.")
|
|
||||||
return
|
|
||||||
wl.remove(pr)
|
|
||||||
wl.to_file()
|
|
||||||
print(f"Removed #{pr} from watchlist.")
|
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
def main() -> None:
|
||||||
|
89
nixprstatus/app.py
Normal file
89
nixprstatus/app.py
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
import typer
|
||||||
|
import json
|
||||||
|
from typing import Annotated
|
||||||
|
from nixprstatus.pr import pr_merge_status
|
||||||
|
from nixprstatus.pr import commits_since
|
||||||
|
from nixprstatus.watchlist import Watchlist
|
||||||
|
from nixprstatus.output import OutputFormat
|
||||||
|
|
||||||
|
app = typer.Typer(rich_markup_mode=None)
|
||||||
|
watchlist_app = typer.Typer()
|
||||||
|
app.add_typer(watchlist_app, name="watchlist", help="Manage watchlist.")
|
||||||
|
|
||||||
|
DEFAULT_HEADERS = {
|
||||||
|
"Accept": "application/vnd.github.text+json",
|
||||||
|
}
|
||||||
|
|
||||||
|
BRANCHES = ["nixos-unstable-small", "nixos-unstable", "nixos-24.05"]
|
||||||
|
|
||||||
|
|
||||||
|
@app.command()
|
||||||
|
def pr(
|
||||||
|
pr: list[int],
|
||||||
|
branches: Annotated[
|
||||||
|
list[str] | None, typer.Option(help="Check specific branch")
|
||||||
|
] = None,
|
||||||
|
format: Annotated[
|
||||||
|
OutputFormat, typer.Option(help="Output format")
|
||||||
|
] = OutputFormat.CONSOLE,
|
||||||
|
) -> None:
|
||||||
|
"""Get merge status of pull request(s)."""
|
||||||
|
if isinstance(pr, int):
|
||||||
|
status = pr_merge_status(pr, branches)
|
||||||
|
status.print(format=format)
|
||||||
|
return
|
||||||
|
|
||||||
|
for pr_ in pr:
|
||||||
|
status = pr_merge_status(pr_, branches)
|
||||||
|
status.print(format=format)
|
||||||
|
print()
|
||||||
|
|
||||||
|
|
||||||
|
@app.command()
|
||||||
|
def since(
|
||||||
|
commit_sha: str,
|
||||||
|
target: str = "nixos-unstable",
|
||||||
|
waybar_format: Annotated[
|
||||||
|
bool, typer.Option(help="Output in format expected by waybar")
|
||||||
|
] = False,
|
||||||
|
) -> None:
|
||||||
|
"""
|
||||||
|
Return the count of commits that has happened between the two refs.
|
||||||
|
"""
|
||||||
|
count = commits_since(target, commit_sha)
|
||||||
|
|
||||||
|
if waybar_format:
|
||||||
|
output = {"text": str(count), "tooltip": f"{target}: {count}"}
|
||||||
|
typer.echo(json.dumps(output))
|
||||||
|
return
|
||||||
|
typer.echo(count)
|
||||||
|
|
||||||
|
|
||||||
|
@watchlist_app.command(name="list")
|
||||||
|
def command_list(
|
||||||
|
watchlist: str | None = None, format: OutputFormat = OutputFormat.CONSOLE
|
||||||
|
) -> None:
|
||||||
|
"""List PRs in watchlist."""
|
||||||
|
wl = Watchlist.from_file(path=watchlist)
|
||||||
|
wl.print(format=format)
|
||||||
|
|
||||||
|
|
||||||
|
@watchlist_app.command()
|
||||||
|
def add(pr: int, watchlist: str | None = None) -> None:
|
||||||
|
"""Add PR to watchlist."""
|
||||||
|
wl = Watchlist.from_file(path=watchlist)
|
||||||
|
info = wl.add_pr(pr)
|
||||||
|
wl.to_file(path=watchlist)
|
||||||
|
print(f"Added #{info.pr}: {info.title} to watchlist.")
|
||||||
|
|
||||||
|
|
||||||
|
@watchlist_app.command()
|
||||||
|
def remove(pr: int) -> None:
|
||||||
|
"""Remove PR from watchlist."""
|
||||||
|
wl = Watchlist.from_file()
|
||||||
|
if pr not in wl:
|
||||||
|
print(f"#{pr} not in watchlist.")
|
||||||
|
return
|
||||||
|
wl.remove(pr)
|
||||||
|
wl.to_file()
|
||||||
|
print(f"Removed #{pr} from watchlist.")
|
3
tests/test_cli.py
Normal file
3
tests/test_cli.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import unittest
|
||||||
|
|
||||||
|
from nixprstatus.app import app
|
Loading…
Reference in New Issue
Block a user