Skip to content
This repository was archived by the owner on Apr 13, 2023. It is now read-only.

Add error/success separation on output #543

Merged
merged 2 commits into from
Dec 8, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
120 changes: 61 additions & 59 deletions src/git_portfolio/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@
CONFIG_MANAGER = cm.ConfigManager()


def _echo_outputs(response: res.ResponseFailure | res.ResponseSuccess) -> None:
if bool(response):
success = cast(res.ResponseSuccess, response)
click.secho(success.value)
else:
click.secho(
f"Error(s) found during execution:\n{response.value['message']}", fg="red"
)
def _echo_outputs(responses: list[res.Response]) -> None:
for response in responses:
if bool(response):
success = cast(res.ResponseSuccess, response)
click.secho(success.value)
else:
failure = cast(res.ResponseFailure, response)
click.secho(f"{failure.value['message']}", fg="red")


def gitp_config_check(func: F) -> F:
Expand All @@ -56,11 +56,12 @@ def wrapper(*args: Any, **kwargs: Any) -> Any:
)
sys.exit(3)
else:
value = func(*args, **kwargs)
_echo_outputs(value)
if not bool(value):
sys.exit(4)
return value
responses = func(*args, **kwargs)
_echo_outputs(responses)
for response in responses:
if not bool(response):
sys.exit(4)
return responses

return cast(F, wrapper)

Expand All @@ -77,44 +78,42 @@ def _get_connection_settings(config: c.Config) -> cs.GhConnectionSettings:


@gitp_config_check
def _call_git_use_case(
command: str, args: tuple[str]
) -> res.ResponseFailure | res.ResponseSuccess:
def _call_git_use_case(command: str, args: tuple[str]) -> list[res.Response]:
return git.GitUseCase().execute(
CONFIG_MANAGER.config.github_selected_repos, command, args
)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def add(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def add(args: tuple[str]) -> list[res.Response]:
"""Batch `git add` command."""
return _call_git_use_case("add", args)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def branch(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def branch(args: tuple[str]) -> list[res.Response]:
"""Batch `git branch` command."""
return _call_git_use_case("branch", args)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def checkout(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def checkout(args: tuple[str]) -> list[res.Response]:
"""Batch `git checkout` command."""
return _call_git_use_case("checkout", args)


@main.command()
@gitp_config_check
def clone() -> res.ResponseFailure | res.ResponseSuccess:
def clone() -> list[res.Response]:
"""Batch `git clone` command on current folder. Does not accept aditional args."""
settings = _get_connection_settings(CONFIG_MANAGER.config)
try:
github_service = ghs.GithubService(settings)
except ghs.GithubServiceError as gse:
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
return [res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)]

return gcuc.GitCloneUseCase(github_service).execute(
CONFIG_MANAGER.config.github_selected_repos
Expand All @@ -123,105 +122,105 @@ def clone() -> res.ResponseFailure | res.ResponseSuccess:

@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def commit(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def commit(args: tuple[str]) -> list[res.Response]:
"""Batch `git commit` command."""
return _call_git_use_case("commit", args)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def diff(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def diff(args: tuple[str]) -> list[res.Response]:
"""Batch `git diff` command."""
return _call_git_use_case("diff", args)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def fetch(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def fetch(args: tuple[str]) -> list[res.Response]:
"""Batch `git fetch` command."""
return _call_git_use_case("fetch", args)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def init(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def init(args: tuple[str]) -> list[res.Response]:
"""Batch `git init` command."""
return _call_git_use_case("init", args)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def merge(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def merge(args: tuple[str]) -> list[res.Response]:
"""Batch `git merge` command."""
return _call_git_use_case("merge", args)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def mv(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def mv(args: tuple[str]) -> list[res.Response]:
"""Batch `git mv` command."""
return _call_git_use_case("mv", args)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def pull(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def pull(args: tuple[str]) -> list[res.Response]:
"""Batch `git pull` command."""
return _call_git_use_case("pull", args)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def push(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def push(args: tuple[str]) -> list[res.Response]:
"""Batch `git push` command."""
return _call_git_use_case("push", args)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def rebase(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def rebase(args: tuple[str]) -> list[res.Response]:
"""Batch `git rebase` command."""
return _call_git_use_case("rebase", args)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def reset(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def reset(args: tuple[str]) -> list[res.Response]:
"""Batch `git reset` command."""
return _call_git_use_case("reset", args)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def rm(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def rm(args: tuple[str]) -> list[res.Response]:
"""Batch `git rm` command."""
return _call_git_use_case("rm", args)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def show(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def show(args: tuple[str]) -> list[res.Response]:
"""Batch `git show` command."""
return _call_git_use_case("show", args)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def status(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def status(args: tuple[str]) -> list[res.Response]:
"""Batch `git status` command."""
return _call_git_use_case("status", args)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def switch(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def switch(args: tuple[str]) -> list[res.Response]:
"""Batch `git switch` command."""
return _call_git_use_case("switch", args)


@main.command(context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
def tag(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def tag(args: tuple[str]) -> list[res.Response]:
"""Batch `git tag` command."""
return _call_git_use_case("tag", args)

Expand Down Expand Up @@ -263,42 +262,45 @@ def config_init() -> None:
click.secho(success.value)
break
else:
click.secho(f"Error: {response.value['message']}", fg="red")
if response.type == res.ResponseTypes.SYSTEM_ERROR:
failure = cast(res.ResponseFailure, response)
click.secho(f"Error: {failure.value['message']}", fg="red")
if failure.type == res.ResponseTypes.SYSTEM_ERROR:
click.ClickException("")


@group_config.command("repos")
@gitp_config_check
def config_repos() -> res.ResponseFailure | res.ResponseSuccess:
def config_repos() -> list[res.Response]:
"""Configure current working `gitp` repositories."""
new_repos = p.InquirerPrompter.new_repos(
CONFIG_MANAGER.config.github_selected_repos
)
if not new_repos:
return res.ResponseSuccess()
return [res.ResponseSuccess()]
settings = _get_connection_settings(CONFIG_MANAGER.config)
try:
github_service = ghs.GithubService(settings)
except ghs.GithubServiceError as gse:
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
return [res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)]

repo_names = github_service.get_repo_names()
selected_repos = p.InquirerPrompter.select_repos(repo_names)
return cr.ConfigReposUseCase(CONFIG_MANAGER).execute(
github_service.get_config(), selected_repos
)
return [
cr.ConfigReposUseCase(CONFIG_MANAGER).execute(
github_service.get_config(), selected_repos
)
]


@group_issues.command("create")
@gitp_config_check
def create_issues() -> res.ResponseFailure | res.ResponseSuccess:
def create_issues() -> list[res.Response]:
"""Batch creation of issues on GitHub."""
settings = _get_connection_settings(CONFIG_MANAGER.config)
try:
github_service = ghs.GithubService(settings)
except ghs.GithubServiceError as gse:
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
return [res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)]

issue = p.InquirerPrompter.create_issues(
CONFIG_MANAGER.config.github_selected_repos
Expand All @@ -308,13 +310,13 @@ def create_issues() -> res.ResponseFailure | res.ResponseSuccess:

@group_issues.command("close")
@gitp_config_check
def close_issues() -> res.ResponseFailure | res.ResponseSuccess:
def close_issues() -> list[res.Response]:
"""Batch close issues on GitHub."""
settings = _get_connection_settings(CONFIG_MANAGER.config)
try:
github_service = ghs.GithubService(settings)
except ghs.GithubServiceError as gse:
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
return [res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)]

list_object = "issue"
title_query = p.InquirerPrompter.query_by_title(
Expand All @@ -334,13 +336,13 @@ def close_issues() -> res.ResponseFailure | res.ResponseSuccess:

@group_issues.command("reopen")
@gitp_config_check
def reopen_issues() -> res.ResponseFailure | res.ResponseSuccess:
def reopen_issues() -> list[res.Response]:
"""Batch reopen issues on GitHub."""
settings = _get_connection_settings(CONFIG_MANAGER.config)
try:
github_service = ghs.GithubService(settings)
except ghs.GithubServiceError as gse:
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
return [res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)]

list_object = "issue"
title_query = p.InquirerPrompter.query_by_title(
Expand All @@ -361,7 +363,7 @@ def reopen_issues() -> res.ResponseFailure | res.ResponseSuccess:
@main.command("poetry", context_settings={"ignore_unknown_options": True})
@click.argument("args", nargs=-1)
@gitp_config_check
def poetry_cmd(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
def poetry_cmd(args: tuple[str]) -> list[res.Response]:
"""Batch `poetry` command."""
return poetry.PoetryUseCase().execute(
CONFIG_MANAGER.config.github_selected_repos, "poetry", args
Expand All @@ -370,13 +372,13 @@ def poetry_cmd(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:

@group_prs.command("create")
@gitp_config_check
def create_prs() -> res.ResponseFailure | res.ResponseSuccess:
def create_prs() -> list[res.Response]:
"""Batch creation of pull requests on GitHub."""
settings = _get_connection_settings(CONFIG_MANAGER.config)
try:
github_service = ghs.GithubService(settings)
except ghs.GithubServiceError as gse:
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
return [res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)]

pr = p.InquirerPrompter.create_pull_requests(
CONFIG_MANAGER.config.github_selected_repos
Expand All @@ -396,13 +398,13 @@ def create_prs() -> res.ResponseFailure | res.ResponseSuccess:

@group_prs.command("close")
@gitp_config_check
def close_prs() -> res.ResponseFailure | res.ResponseSuccess:
def close_prs() -> list[res.Response]:
"""Batch close pull requests on GitHub."""
settings = _get_connection_settings(CONFIG_MANAGER.config)
try:
github_service = ghs.GithubService(settings)
except ghs.GithubServiceError as gse:
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
return [res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)]

list_object = "pull request"
title_query = p.InquirerPrompter.query_by_title(
Expand All @@ -422,13 +424,13 @@ def close_prs() -> res.ResponseFailure | res.ResponseSuccess:

@group_prs.command("merge")
@gitp_config_check
def merge_prs() -> res.ResponseFailure | res.ResponseSuccess:
def merge_prs() -> list[res.Response]:
"""Batch merge of pull requests on GitHub."""
settings = _get_connection_settings(CONFIG_MANAGER.config)
try:
github_service = ghs.GithubService(settings)
except ghs.GithubServiceError as gse:
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
return [res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)]

pr_merge = p.InquirerPrompter.merge_pull_requests(
github_service.get_username(),
Expand All @@ -439,13 +441,13 @@ def merge_prs() -> res.ResponseFailure | res.ResponseSuccess:

@group_branches.command("delete")
@gitp_config_check
def delete_branches() -> res.ResponseFailure | res.ResponseSuccess:
def delete_branches() -> list[res.Response]:
"""Batch deletion of branches on GitHub."""
settings = _get_connection_settings(CONFIG_MANAGER.config)
try:
github_service = ghs.GithubService(settings)
except ghs.GithubServiceError as gse:
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
return [res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)]

branch = p.InquirerPrompter.delete_branches(
CONFIG_MANAGER.config.github_selected_repos
Expand Down
5 changes: 3 additions & 2 deletions src/git_portfolio/domain/issue.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""Issue model."""
from __future__ import annotations

from dataclasses import dataclass
from typing import Set


@dataclass
Expand All @@ -10,4 +11,4 @@ class Issue:
number: int
title: str
body: str
labels: Set[str]
labels: set[str]
Loading