Skip to content

Commit

Permalink
Merge pull request #7 from epicserve/task/switch-to-typer
Browse files Browse the repository at this point in the history
Switch to using Typer instead of Argparse
  • Loading branch information
epicserve authored Oct 21, 2024
2 parents 817d100 + e2b4b49 commit 83a2155
Show file tree
Hide file tree
Showing 4 changed files with 137 additions and 45 deletions.
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ dependencies = [
"inquirerpy>=0.3.4",
"requests>=2.32.3",
"setuptools>=75.1.0",
"typer>=0.12.5",
]

[build-system]
Expand Down
89 changes: 46 additions & 43 deletions src/dj_beat_drop/main_cli.py
Original file line number Diff line number Diff line change
@@ -1,75 +1,78 @@
import argparse
import importlib.metadata

import requests
from pkg_resources import get_distribution, parse_version
import typer
from packaging.version import parse

from dj_beat_drop.new import handle_new
from dj_beat_drop.utils import color


def get_ascii_logo():
logo = r"""
___ __ ___ __ ___
/ _ \__ / / / _ )___ ___ _/ /_ / _ \_______ ___
___ __ ___ __ ___
/ _ \__ / / / _ )___ ___ _/ /_ / _ \_______ ___
/ // / // / / _ / -_) _ `/ __/ / // / __/ _ \/ _ \
/____/\___/ /____/\__/\_,_/\__/ /____/_/ \___/ .__/
/_/
"""
/_/ """
return logo


def get_current_version():
return importlib.metadata.version("dj-beat-drop")


main_command = typer.Typer(no_args_is_help=True)


def print_version(value: bool):
if value:
print(f"Version {get_current_version()}")
raise typer.Exit()


def check_version():
package_name = "dj-beat-drop"
current_version = get_distribution(package_name).version
current_version = get_current_version()

response = requests.get(f"https://pypi.org/pypi/{package_name}/json", timeout=10)
latest_version = response.json()["info"]["version"]

if parse_version(current_version) < parse_version(latest_version):
if parse(current_version) < parse(latest_version):
color.green(
f"\033[0;33m\nA new version of {package_name} is available ({latest_version}). You are using "
f"{current_version}. To update, run:\n\033[0m"
)
print(f" pip install --upgrade {package_name}\n")


@main_command.callback()
def main_callback(
version: bool = typer.Option(
None,
"--version",
"-v",
callback=print_version,
is_eager=True,
help="Show the application's version and exit.",
),
):
pass


@main_command.command()
def new(
name: str | None = typer.Argument(None, help="Project name (e.g. 'example_project' or 'example-project')."),
use_lts: bool = typer.Option(False, "--lts", help="Use the latest LTS version of Django."),
overwrite: bool = typer.Option(False, "--overwrite", help="Overwrite the project directory if it already exists."),
):
handle_new(name, use_lts, overwrite)


def main():
print(f"\033[38;2;255;165;0m{get_ascii_logo()}\033[0m")
color.orange(get_ascii_logo())
check_version()
parser = argparse.ArgumentParser()
parser.add_argument(
"-v",
"--version",
action="version",
version=f"Version {get_distribution('dj-beat-drop').version}",
)
subparsers = parser.add_subparsers(dest="command")

# Add 'new' subcommand
new_parser = subparsers.add_parser("new", help="Create a new Django project.")
new_parser.add_argument(
"name",
type=str,
nargs="?",
help="Project name (e.g. 'example_project' or 'example-project').",
)
new_parser.add_argument(
"--lts",
action="store_true",
help="Use the latest LTS version of Django.",
)
new_parser.add_argument(
"--overwrite",
action="store_true",
help="Overwrite the project directory if it already exists.",
)

args = parser.parse_args()

if args.command == "new":
handle_new(args.name, args.lts, args.overwrite)
else:
parser.print_help()
main_command()


if __name__ == "__main__":
Expand Down
10 changes: 8 additions & 2 deletions src/dj_beat_drop/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,19 @@


class Color:
ESCAPE = "\033[0m"

@staticmethod
def green(text):
print(f"\033[92m{text}\033[0m")
print(f"\033[92m{text}{Color.ESCAPE}")

@staticmethod
def red(text):
print(f"\033[91m{text}\033[0m")
print(f"\033[91m{text}{Color.ESCAPE}")

@staticmethod
def orange(text):
print(f"\033[38;2;255;165;0m{text}{Color.ESCAPE}")


color = Color()
Expand Down
82 changes: 82 additions & 0 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 83a2155

Please sign in to comment.