Skip to content

Commit 4fe836a

Browse files
authored
Merge pull request #77 from smkent/status-output
Print status output in manage-cookie commands using loguru
2 parents daed151 + 4f087ad commit 4fe836a

6 files changed

Lines changed: 81 additions & 12 deletions

File tree

cookie_python/manage/main.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
from __future__ import annotations
22

33
import argparse
4+
import sys
45
from enum import Enum
6+
from pathlib import Path
57
from typing import Callable, Optional
68

9+
from loguru import logger
10+
711
from .release import release_action
812
from .update import update_action
913

@@ -33,7 +37,22 @@ def __new__(
3337
return obj
3438

3539

40+
def configure_logging() -> None:
41+
logger.remove()
42+
logger.add(
43+
sys.stderr,
44+
colorize=True,
45+
format=(
46+
f"<b>[{Path(sys.argv[0]).name}]</b>"
47+
" <light-blue>{time:YYYY-MM-DD HH:mm:ss}</light-blue>"
48+
" <light-magenta>{extra[repo]}</light-magenta>"
49+
" <level>{message}</level>"
50+
),
51+
)
52+
53+
3654
def main() -> None:
55+
configure_logging()
3756
ap = argparse.ArgumentParser()
3857
ap.add_argument(
3958
"action",

cookie_python/manage/release.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def release_patch_version(repo: RepoSandbox) -> None:
2222
latest_tag = tag
2323
break
2424
if not latest_tag:
25-
print("Unable to find latest version")
25+
repo.logger.warning("Unable to find latest version")
2626
return None
2727
check_refs = ["origin/main", latest_tag]
2828
refs = []
@@ -33,15 +33,16 @@ def release_patch_version(repo: RepoSandbox) -> None:
3333
.strip()
3434
)
3535
if len(refs) == len(check_refs) and len(set(refs)) == 1:
36-
print(f"No new changes since latest release {latest_tag}")
36+
repo.logger.info(f"No new changes since latest release {latest_tag}")
3737
return None
3838
sv = semver.VersionInfo.parse(latest_tag.lstrip("v"))
3939
next_patch_ver = sv.bump_patch()
4040
new_tag = f"v{next_patch_ver}"
4141
if repo.dry_run:
42-
print(f"Would release new version {new_tag}")
42+
repo.logger.success(f"Would release new version {new_tag}")
4343
return None
4444
repo.run(["gh", "release", "create", new_tag, "--generate-notes"])
45+
repo.logger.success(f"Releasing new version {new_tag}")
4546
return None
4647

4748

cookie_python/manage/repo.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
from types import TracebackType
1212
from typing import Any, Optional
1313

14+
import loguru
15+
1416

1517
class RepoSandbox:
1618
def __init__(self, repo: str, dry_run: bool = False) -> None:
@@ -30,6 +32,10 @@ def __exit__(
3032
) -> None:
3133
self._stack.close()
3234

35+
@cached_property
36+
def logger(self) -> "loguru.Logger":
37+
return loguru.logger.bind(repo=self.repo)
38+
3339
@cached_property
3440
def tempdir(self) -> Path:
3541
return Path(
@@ -73,7 +79,7 @@ def run(
7379

7480
def shell(self) -> None:
7581
if sys.__stdin__.isatty():
76-
print('Starting shell. Run "exit 1" to abort.')
82+
self.logger.info('Starting shell. Run "exit 1" to abort.')
7783
self.run([os.environ.get("SHELL", "/bin/bash")])
7884

7985
def commit_changes(self, message: str) -> None:
@@ -104,12 +110,13 @@ def lint_test(self) -> None:
104110
try:
105111
self.run(["poetry", "run", "poe", "test"])
106112
except subprocess.CalledProcessError as e:
107-
print(e)
108-
print("Resolve errors and exit shell to continue")
113+
self.logger.error(str(e))
114+
self.logger.error("Resolve errors and exit shell to continue")
109115
self.shell()
110116

111117
def open_pr(self, message: str) -> None:
112118
if self.dry_run:
119+
self.logger.success("Would open PR")
113120
return
114121
self.run(["git", "push", "origin", self.branch])
115122
commit_title, _, *commit_body = message.splitlines()
@@ -129,3 +136,4 @@ def open_pr(self, message: str) -> None:
129136
],
130137
input=os.linesep.join(commit_body).encode("utf-8"),
131138
)
139+
self.logger.success("Opened PR")

cookie_python/manage/update.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,10 @@ def update_cruft(repo: RepoSandbox) -> Optional[str]:
3838
)
3939
if rej_files or conflicts:
4040
if try_count == 0:
41-
print(f">>> Conflicts found: {rej_files}")
42-
print("Resolve conflicts and exit shell to continue")
41+
repo.logger.error(f"Conflicts found: {rej_files}")
42+
repo.logger.error(
43+
"Resolve conflicts and exit shell to continue"
44+
)
4345
repo.shell()
4446
continue
4547
raise Exception(f"Unresolved conflicts: {rej_files}")
@@ -102,6 +104,7 @@ def update_dependencies(repo: RepoSandbox) -> Optional[str]:
102104
def update_action(args: Namespace) -> None:
103105
for repo_url in args.repo:
104106
with RepoSandbox(repo_url, args.dry_run) as repo:
107+
repo.logger.info("Starting update")
105108
actions = []
106109
msg_body = ""
107110
cruft_msg = update_cruft(repo)
@@ -113,7 +116,10 @@ def update_action(args: Namespace) -> None:
113116
msg_body += deps_msg
114117
actions.append("dependencies")
115118
if not msg_body:
116-
return None
117-
message = f"Update {', '.join(actions)}\n\n{msg_body}"
119+
repo.logger.info("Already up to date")
120+
continue
121+
actions_str = ", ".join(actions)
122+
message = f"Update {actions_str}\n\n{msg_body}"
123+
repo.logger.info(f"Updated {actions_str}")
118124
repo.commit_changes(message)
119125
repo.open_pr(message)

poetry.lock

Lines changed: 36 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ packages = [
2323

2424
[tool.poetry.dependencies]
2525
python = "^3.8"
26+
loguru = "*"
2627
poetry-dynamic-versioning = "*"
2728
pyyaml = "*"
2829
semver = "*"

0 commit comments

Comments
 (0)