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

Commit 013b24d

Browse files
authored
Merge pull request #528 from staticdev/bug/output-connetion-error
Fix outputs on connection error
2 parents c54c11f + 4e6faad commit 013b24d

File tree

13 files changed

+188
-81
lines changed

13 files changed

+188
-81
lines changed

src/git_portfolio/__main__.py

Lines changed: 56 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -72,27 +72,8 @@ def _echo_outputs(response: res.ResponseFailure | res.ResponseSuccess) -> None:
7272
)
7373

7474

75-
def _get_github_service(config: c.Config) -> ghs.GithubService:
76-
settings = cs.GhConnectionSettings(
77-
config.github_access_token, config.github_hostname
78-
)
79-
try:
80-
return ghs.GithubService(settings)
81-
except AttributeError:
82-
response = res.ResponseFailure(
83-
res.ResponseTypes.PARAMETERS_ERROR,
84-
"Wrong GitHub permissions. Please check your token.",
85-
)
86-
except ConnectionError:
87-
response = res.ResponseFailure(
88-
res.ResponseTypes.SYSTEM_ERROR,
89-
(
90-
"Unable to reach server. Please check your network and credentials and "
91-
"try again."
92-
),
93-
)
94-
_echo_outputs(response)
95-
raise click.ClickException("")
75+
def _get_connection_settings(config: c.Config) -> cs.GhConnectionSettings:
76+
return cs.GhConnectionSettings(config.github_access_token, config.github_hostname)
9677

9778

9879
@main.command("add")
@@ -238,7 +219,12 @@ def config_repos() -> res.ResponseFailure | res.ResponseSuccess:
238219
)
239220
if not new_repos:
240221
return res.ResponseSuccess()
241-
github_service = _get_github_service(CONFIG_MANAGER.config)
222+
settings = _get_connection_settings(CONFIG_MANAGER.config)
223+
try:
224+
github_service = ghs.GithubService(settings)
225+
except ghs.GithubServiceError as gse:
226+
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
227+
242228
repo_names = github_service.get_repo_names()
243229
selected_repos = p.InquirerPrompter.select_repos(repo_names)
244230
return cr.ConfigReposUseCase(CONFIG_MANAGER).execute(
@@ -250,7 +236,12 @@ def config_repos() -> res.ResponseFailure | res.ResponseSuccess:
250236
@gitp_config_check
251237
def clone() -> res.ResponseFailure | res.ResponseSuccess:
252238
"""Batch `git clone` command on current folder. Does not accept aditional args."""
253-
github_service = _get_github_service(CONFIG_MANAGER.config)
239+
settings = _get_connection_settings(CONFIG_MANAGER.config)
240+
try:
241+
github_service = ghs.GithubService(settings)
242+
except ghs.GithubServiceError as gse:
243+
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
244+
254245
return gcuc.GitCloneUseCase(github_service).execute(
255246
CONFIG_MANAGER.config.github_selected_repos
256247
)
@@ -260,7 +251,12 @@ def clone() -> res.ResponseFailure | res.ResponseSuccess:
260251
@gitp_config_check
261252
def create_issues() -> res.ResponseFailure | res.ResponseSuccess:
262253
"""Batch creation of issues on GitHub."""
263-
github_service = _get_github_service(CONFIG_MANAGER.config)
254+
settings = _get_connection_settings(CONFIG_MANAGER.config)
255+
try:
256+
github_service = ghs.GithubService(settings)
257+
except ghs.GithubServiceError as gse:
258+
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
259+
264260
issue = p.InquirerPrompter.create_issues(
265261
CONFIG_MANAGER.config.github_selected_repos
266262
)
@@ -271,7 +267,12 @@ def create_issues() -> res.ResponseFailure | res.ResponseSuccess:
271267
@gitp_config_check
272268
def close_issues() -> res.ResponseFailure | res.ResponseSuccess:
273269
"""Batch close issues on GitHub."""
274-
github_service = _get_github_service(CONFIG_MANAGER.config)
270+
settings = _get_connection_settings(CONFIG_MANAGER.config)
271+
try:
272+
github_service = ghs.GithubService(settings)
273+
except ghs.GithubServiceError as gse:
274+
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
275+
275276
list_object = "issue"
276277
title_query = p.InquirerPrompter.query_by_title(
277278
CONFIG_MANAGER.config.github_selected_repos, list_object
@@ -292,7 +293,12 @@ def close_issues() -> res.ResponseFailure | res.ResponseSuccess:
292293
@gitp_config_check
293294
def reopen_issues() -> res.ResponseFailure | res.ResponseSuccess:
294295
"""Batch reopen issues on GitHub."""
295-
github_service = _get_github_service(CONFIG_MANAGER.config)
296+
settings = _get_connection_settings(CONFIG_MANAGER.config)
297+
try:
298+
github_service = ghs.GithubService(settings)
299+
except ghs.GithubServiceError as gse:
300+
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
301+
296302
list_object = "issue"
297303
title_query = p.InquirerPrompter.query_by_title(
298304
CONFIG_MANAGER.config.github_selected_repos, list_object
@@ -323,7 +329,12 @@ def poetry_cmd(args: tuple[str]) -> res.ResponseFailure | res.ResponseSuccess:
323329
@gitp_config_check
324330
def create_prs() -> res.ResponseFailure | res.ResponseSuccess:
325331
"""Batch creation of pull requests on GitHub."""
326-
github_service = _get_github_service(CONFIG_MANAGER.config)
332+
settings = _get_connection_settings(CONFIG_MANAGER.config)
333+
try:
334+
github_service = ghs.GithubService(settings)
335+
except ghs.GithubServiceError as gse:
336+
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
337+
327338
pr = p.InquirerPrompter.create_pull_requests(
328339
CONFIG_MANAGER.config.github_selected_repos
329340
)
@@ -344,7 +355,12 @@ def create_prs() -> res.ResponseFailure | res.ResponseSuccess:
344355
@gitp_config_check
345356
def close_prs() -> res.ResponseFailure | res.ResponseSuccess:
346357
"""Batch close pull requests on GitHub."""
347-
github_service = _get_github_service(CONFIG_MANAGER.config)
358+
settings = _get_connection_settings(CONFIG_MANAGER.config)
359+
try:
360+
github_service = ghs.GithubService(settings)
361+
except ghs.GithubServiceError as gse:
362+
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
363+
348364
list_object = "pull request"
349365
title_query = p.InquirerPrompter.query_by_title(
350366
CONFIG_MANAGER.config.github_selected_repos, list_object
@@ -365,7 +381,12 @@ def close_prs() -> res.ResponseFailure | res.ResponseSuccess:
365381
@gitp_config_check
366382
def merge_prs() -> res.ResponseFailure | res.ResponseSuccess:
367383
"""Batch merge of pull requests on GitHub."""
368-
github_service = _get_github_service(CONFIG_MANAGER.config)
384+
settings = _get_connection_settings(CONFIG_MANAGER.config)
385+
try:
386+
github_service = ghs.GithubService(settings)
387+
except ghs.GithubServiceError as gse:
388+
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
389+
369390
pr_merge = p.InquirerPrompter.merge_pull_requests(
370391
github_service.get_username(),
371392
CONFIG_MANAGER.config.github_selected_repos,
@@ -377,7 +398,12 @@ def merge_prs() -> res.ResponseFailure | res.ResponseSuccess:
377398
@gitp_config_check
378399
def delete_branches() -> res.ResponseFailure | res.ResponseSuccess:
379400
"""Batch deletion of branches on GitHub."""
380-
github_service = _get_github_service(CONFIG_MANAGER.config)
401+
settings = _get_connection_settings(CONFIG_MANAGER.config)
402+
try:
403+
github_service = ghs.GithubService(settings)
404+
except ghs.GithubServiceError as gse:
405+
return res.ResponseFailure(res.ResponseTypes.RESOURCE_ERROR, gse)
406+
381407
branch = p.InquirerPrompter.delete_branches(
382408
CONFIG_MANAGER.config.github_selected_repos
383409
)

src/git_portfolio/github_service.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,14 @@ def _test_connection(
5252
try:
5353
return connection.me()
5454
except github3.exceptions.AuthenticationFailed:
55-
raise GithubServiceError("Invalid token.") from None
55+
raise GithubServiceError(
56+
"Wrong GitHub permissions. Please check your token."
57+
) from None
5658
except github3.exceptions.ConnectionError as github_error:
57-
raise ConnectionError() from github_error
59+
raise GithubServiceError(
60+
"Unable to reach server. Please check your network and credentials. "
61+
"This also happens when Github is offline, then try again later."
62+
) from github_error
5863
except github3.exceptions.IncompleteResponse:
5964
raise GithubServiceError(
6065
"Invalid response. Your token might not be properly scoped."

src/git_portfolio/responses.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def _format_message(self, msg: str | Exception | None) -> str | None:
3030
msg: string, exception or None.
3131
3232
Returns:
33-
Union[str, None]: formatted message or None.
33+
str | None: formatted message or None.
3434
"""
3535
if isinstance(msg, Exception):
3636
return f"{msg.__class__.__name__}: {msg}"

src/git_portfolio/use_cases/config_init.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""Initialize config use case."""
2-
from typing import Union
2+
from __future__ import annotations
33

44
import git_portfolio.config_manager as cm
55
import git_portfolio.domain.gh_connection_settings as gcs
@@ -18,7 +18,7 @@ def __init__(self, config_manager: cm.ConfigManager) -> None:
1818

1919
def execute(
2020
self, request: gcs.GhConnectionSettings
21-
) -> Union[res.ResponseFailure, res.ResponseSuccess]:
21+
) -> res.ResponseFailure | res.ResponseSuccess:
2222
"""Initialize app configuration."""
2323
try:
2424
new_github_service = ghs.GithubService(request)

src/git_portfolio/use_cases/gh.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
"""Base Github use case."""
2+
from __future__ import annotations
3+
24
import traceback
35
from typing import Any
4-
from typing import Union
56

67
import git_portfolio.config_manager as cm
78
import git_portfolio.github_service as ghs
@@ -40,7 +41,7 @@ def call_github_service(self, method: str, *args: Any, **kwargs: Any) -> None:
4041
f"with the following info:\n{traceback.format_exc()}"
4142
)
4243

43-
def generate_response(self) -> Union[res.ResponseFailure, res.ResponseSuccess]:
44+
def generate_response(self) -> res.ResponseFailure | res.ResponseSuccess:
4445
"""Create appropriate response object."""
4546
if self.error:
4647
return res.ResponseFailure(res.ResponseTypes.PARAMETERS_ERROR, self.output)
@@ -52,7 +53,7 @@ def action(self, github_repo: str, *args: Any, **kwargs: Any) -> None:
5253

5354
def execute(
5455
self, *args: Any, **kwargs: Any
55-
) -> Union[res.ResponseFailure, res.ResponseSuccess]:
56+
) -> res.ResponseFailure | res.ResponseSuccess:
5657
"""Execute GitHubUseCase."""
5758
if self.github_repo:
5859
self.action(self.github_repo, *args, **kwargs)

src/git_portfolio/use_cases/gh_close_issue.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""Close issue on Github use case."""
2-
from typing import Union
2+
from __future__ import annotations
33

44
import git_portfolio.request_objects.issue_list as il
55
import git_portfolio.responses as res
@@ -13,7 +13,7 @@ class GhCloseIssueUseCase(gh.GhUseCase):
1313
def action( # type: ignore[override]
1414
self,
1515
github_repo: str,
16-
request_object: Union[il.IssueListValidRequest, il.IssueListInvalidRequest],
16+
request_object: il.IssueListValidRequest | il.IssueListInvalidRequest,
1717
) -> None:
1818
"""Close issues."""
1919
github_service_method = "close_issues_from_repo"

src/git_portfolio/use_cases/gh_create_pr.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""Create pull request on Github use case."""
2-
from typing import Union
2+
from __future__ import annotations
33

44
import git_portfolio.domain.pull_request as pr
55
import git_portfolio.request_objects.issue_list as il
@@ -15,7 +15,7 @@ def action( # type: ignore[override]
1515
self,
1616
github_repo: str,
1717
pr_obj: pr.PullRequest,
18-
request_object: Union[il.IssueListValidRequest, il.IssueListInvalidRequest],
18+
request_object: il.IssueListValidRequest | il.IssueListInvalidRequest,
1919
) -> None:
2020
"""Create pull requests."""
2121
github_service_method = "create_pull_request_from_repo"

src/git_portfolio/use_cases/gh_reopen_issue.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""Reopen issue on Github use case."""
2-
from typing import Union
2+
from __future__ import annotations
33

44
import git_portfolio.request_objects.issue_list as il
55
import git_portfolio.responses as res
@@ -13,7 +13,7 @@ class GhReopenIssueUseCase(gh.GhUseCase):
1313
def action( # type: ignore[override]
1414
self,
1515
github_repo: str,
16-
request_object: Union[il.IssueListValidRequest, il.IssueListInvalidRequest],
16+
request_object: il.IssueListValidRequest | il.IssueListInvalidRequest,
1717
) -> None:
1818
"""Reopen issues."""
1919
github_service_method = "reopen_issues_from_repo"

src/git_portfolio/use_cases/git.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def execute(
2727
args: command arguments.
2828
2929
Returns:
30-
Union[res.ResponseFailure, res.ResponseSuccess]: final result.
30+
res.ResponseFailure | res.ResponseSuccess: final result.
3131
"""
3232
if self.err_output:
3333
return res.ResponseFailure(res.ResponseTypes.SYSTEM_ERROR, self.err_output)

src/git_portfolio/use_cases/poetry.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def execute(
2727
args: command arguments.
2828
2929
Returns:
30-
Union[res.ResponseFailure, res.ResponseSuccess]: final result.
30+
res.ResponseFailure | res.ResponseSuccess: final result.
3131
"""
3232
if self.err_output:
3333
return res.ResponseFailure(res.ResponseTypes.SYSTEM_ERROR, self.err_output)

0 commit comments

Comments
 (0)