mirror of
https://github.com/natelandau/obsidian-metadata.git
synced 2025-11-08 13:13:47 -05:00
151 lines
3.6 KiB
Python
Executable File
151 lines
3.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
"""Script to update the pyproject.toml file with the latest versions of the dependencies."""
|
|
from pathlib import Path
|
|
from textwrap import wrap
|
|
|
|
try:
|
|
import tomllib
|
|
except ModuleNotFoundError: # pragma: no cover
|
|
import tomli as tomllib # type: ignore [no-redef]
|
|
|
|
import sh
|
|
from rich.console import Console
|
|
|
|
console = Console()
|
|
|
|
|
|
def dryrun(msg: str) -> None:
|
|
"""Print a message if the dry run flag is set.
|
|
|
|
Args:
|
|
msg: Message to print
|
|
"""
|
|
console.print(f"[cyan]DRYRUN | {msg}[/cyan]")
|
|
|
|
|
|
def success(msg: str) -> None:
|
|
"""Print a success message without using logging.
|
|
|
|
Args:
|
|
msg: Message to print
|
|
"""
|
|
console.print(f"[green]SUCCESS | {msg}[/green]")
|
|
|
|
|
|
def warning(msg: str) -> None:
|
|
"""Print a warning message without using logging.
|
|
|
|
Args:
|
|
msg: Message to print
|
|
"""
|
|
console.print(f"[yellow]WARNING | {msg}[/yellow]")
|
|
|
|
|
|
def error(msg: str) -> None:
|
|
"""Print an error message without using logging.
|
|
|
|
Args:
|
|
msg: Message to print
|
|
"""
|
|
console.print(f"[red]ERROR | {msg}[/red]")
|
|
|
|
|
|
def notice(msg: str) -> None:
|
|
"""Print a notice message without using logging.
|
|
|
|
Args:
|
|
msg: Message to print
|
|
"""
|
|
console.print(f"[bold]NOTICE | {msg}[/bold]")
|
|
|
|
|
|
def info(msg: str) -> None:
|
|
"""Print a notice message without using logging.
|
|
|
|
Args:
|
|
msg: Message to print
|
|
"""
|
|
console.print(f"INFO | {msg}")
|
|
|
|
|
|
def usage(msg: str, width: int = 80) -> None:
|
|
"""Print a usage message without using logging.
|
|
|
|
Args:
|
|
msg: Message to print
|
|
width (optional): Width of the message
|
|
"""
|
|
for _n, line in enumerate(wrap(msg, width=width)):
|
|
if _n == 0:
|
|
console.print(f"[dim]USAGE | {line}")
|
|
else:
|
|
console.print(f"[dim] | {line}")
|
|
|
|
|
|
def debug(msg: str) -> None:
|
|
"""Print a debug message without using logging.
|
|
|
|
Args:
|
|
msg: Message to print
|
|
"""
|
|
console.print(f"[blue]DEBUG | {msg}[/blue]")
|
|
|
|
|
|
def dim(msg: str) -> None:
|
|
"""Print a message in dimmed color.
|
|
|
|
Args:
|
|
msg: Message to print
|
|
"""
|
|
console.print(f"[dim]{msg}[/dim]")
|
|
|
|
|
|
# Load the pyproject.toml file
|
|
pyproject = Path(__file__).parents[1] / "pyproject.toml"
|
|
|
|
if not pyproject.exists():
|
|
console.print("pyproject.toml file not found")
|
|
raise SystemExit(1)
|
|
|
|
with pyproject.open("rb") as f:
|
|
try:
|
|
data = tomllib.load(f)
|
|
except tomllib.TOMLDecodeError as e:
|
|
raise SystemExit(1) from e
|
|
|
|
|
|
# Get the latest versions of all dependencies
|
|
info("Getting latest versions of dependencies...")
|
|
packages: dict = {}
|
|
for line in sh.poetry("--no-ansi", "show", "--outdated").splitlines():
|
|
package, current, latest = line.split()[:3]
|
|
packages[package] = {"current_version": current, "new_version": latest}
|
|
|
|
if not packages:
|
|
success("All dependencies are up to date")
|
|
raise SystemExit(0)
|
|
|
|
|
|
dependencies = data["tool"]["poetry"]["dependencies"]
|
|
groups = data["tool"]["poetry"]["group"]
|
|
|
|
for p in dependencies:
|
|
if p in packages:
|
|
notice(
|
|
f"Updating {p} from {packages[p]['current_version']} to {packages[p]['new_version']}"
|
|
)
|
|
sh.poetry("add", f"{p}@latest", _fg=True)
|
|
|
|
|
|
for group in groups:
|
|
for p in groups[group]["dependencies"]:
|
|
if p in packages:
|
|
notice(
|
|
f"Updating {p} from {packages[p]['current_version']} to {packages[p]['new_version']}"
|
|
)
|
|
sh.poetry("add", f"{p}@latest", "--group", group, _fg=True)
|
|
|
|
sh.poetry("update", _fg=True)
|
|
success("All dependencies are up to date")
|
|
raise SystemExit(0)
|