convert to click
This commit is contained in:
parent
83e685d4a7
commit
485e65a6c6
33
poetry.lock
generated
33
poetry.lock
generated
@ -207,10 +207,10 @@ six = ">=1.9"
|
|||||||
webencodings = "*"
|
webencodings = "*"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
lxml = ["lxml"]
|
all = ["genshi", "chardet (>=2.2)", "lxml"]
|
||||||
genshi = ["genshi"]
|
|
||||||
chardet = ["chardet (>=2.2)"]
|
chardet = ["chardet (>=2.2)"]
|
||||||
all = ["lxml", "chardet (>=2.2)", "genshi"]
|
genshi = ["genshi"]
|
||||||
|
lxml = ["lxml"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "httpcore"
|
name = "httpcore"
|
||||||
@ -597,17 +597,14 @@ python-versions = "*"
|
|||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "1.1"
|
lock-version = "1.1"
|
||||||
python-versions = "^3.10"
|
python-versions = "^3.10"
|
||||||
content-hash = "6f1802f15f85c08e926dc13db45802e5c7bc863ab623d44a1c3b4b2dab1af7b1"
|
content-hash = "ccfdeb63811daaa93297ab75bfd661b68b7f04683c8310f0d60783ec56a577cc"
|
||||||
|
|
||||||
[metadata.files]
|
[metadata.files]
|
||||||
anyio = []
|
anyio = []
|
||||||
black = []
|
black = []
|
||||||
cachecontrol = []
|
cachecontrol = []
|
||||||
cachy = []
|
cachy = []
|
||||||
certifi = [
|
certifi = []
|
||||||
{file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"},
|
|
||||||
{file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"},
|
|
||||||
]
|
|
||||||
cffi = []
|
cffi = []
|
||||||
charset-normalizer = []
|
charset-normalizer = []
|
||||||
cleo = []
|
cleo = []
|
||||||
@ -616,16 +613,19 @@ click = [
|
|||||||
{file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
|
{file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
|
||||||
]
|
]
|
||||||
clikit = []
|
clikit = []
|
||||||
colorama = [
|
colorama = []
|
||||||
{file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"},
|
|
||||||
{file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"},
|
|
||||||
]
|
|
||||||
crashtest = []
|
crashtest = []
|
||||||
cryptography = []
|
cryptography = []
|
||||||
distlib = []
|
distlib = []
|
||||||
filelock = []
|
filelock = []
|
||||||
h11 = []
|
h11 = [
|
||||||
html5lib = []
|
{file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"},
|
||||||
|
{file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"},
|
||||||
|
]
|
||||||
|
html5lib = [
|
||||||
|
{file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"},
|
||||||
|
{file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"},
|
||||||
|
]
|
||||||
httpcore = []
|
httpcore = []
|
||||||
httpx = []
|
httpx = []
|
||||||
idna = [
|
idna = [
|
||||||
@ -689,4 +689,7 @@ tomli = [
|
|||||||
tomlkit = []
|
tomlkit = []
|
||||||
urllib3 = []
|
urllib3 = []
|
||||||
virtualenv = []
|
virtualenv = []
|
||||||
webencodings = []
|
webencodings = [
|
||||||
|
{file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"},
|
||||||
|
{file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"},
|
||||||
|
]
|
||||||
|
@ -8,6 +8,7 @@ authors = ["Joe Kaufeld <opensource@joekaufeld.com>"]
|
|||||||
python = "^3.10"
|
python = "^3.10"
|
||||||
shiv = "^1.0.1"
|
shiv = "^1.0.1"
|
||||||
httpx = "^0.23.0"
|
httpx = "^0.23.0"
|
||||||
|
click = "^8.1.3"
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
poetry = "^1.1.14"
|
poetry = "^1.1.14"
|
||||||
|
30
src/art.py
Normal file
30
src/art.py
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
_BANNER1 = r"""
|
||||||
|
. o8o oooo o8o . o8o
|
||||||
|
.o8 `"' `888 `"' .o8 `"'
|
||||||
|
oooo oooo .o888oo oooo 888 oooo .o888oo oooo .ooooo. .oooo.o
|
||||||
|
`888 `888 888 `888 888 `888 888 `888 d88' `88b d88( "8
|
||||||
|
888 888 888 888 888 888 888 888 888ooo888 `"Y88b.
|
||||||
|
888 888 888 . 888 888 888 888 . 888 888 .o o. )88b
|
||||||
|
`V88V"V8P' "888" o888o o888o o888o "888" o888o `Y8bod8P' 8""888P'
|
||||||
|
"""
|
||||||
|
|
||||||
|
_BANNER2 = r"""
|
||||||
|
__ .__.__ .__ __ .__
|
||||||
|
__ ___/ |_|__| | |__|/ |_|__| ____ ______
|
||||||
|
| | \ __\ | | | \ __\ |/ __ \ / ___/
|
||||||
|
| | /| | | | |_| || | | \ ___/ \___ \
|
||||||
|
|____/ |__| |__|____/__||__| |__|\___ >____ >
|
||||||
|
\/ \/
|
||||||
|
"""
|
||||||
|
|
||||||
|
_BANNER3 = r"""
|
||||||
|
__ __ _______ ___ ___ ___ _______ ___ _______ _______
|
||||||
|
| | | || || | | | | | | || | | || |
|
||||||
|
| | | ||_ _|| | | | | | |_ _|| | | ___|| _____|
|
||||||
|
| |_| | | | | | | | | | | | | | | |___ | |_____
|
||||||
|
| | | | | | | |___ | | | | | | | ___||_____ |
|
||||||
|
| | | | | | | || | | | | | | |___ _____| |
|
||||||
|
|_______| |___| |___| |_______||___| |___| |___| |_______||_______|
|
||||||
|
"""
|
||||||
|
|
||||||
|
BANNERS: list[str] = [_BANNER1, _BANNER2, _BANNER3]
|
109
src/cli.py
109
src/cli.py
@ -1,43 +1,82 @@
|
|||||||
import code
|
import code
|
||||||
import argparse
|
import random
|
||||||
import importlib
|
import string
|
||||||
import sys
|
import sys
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
import click
|
||||||
|
import httpx
|
||||||
|
|
||||||
import src
|
import src
|
||||||
|
from src.helpers import flip_char
|
||||||
BANNER = """
|
from src.art import BANNERS
|
||||||
. o8o oooo o8o . o8o
|
|
||||||
.o8 `"' `888 `"' .o8 `"'
|
|
||||||
oooo oooo .o888oo oooo 888 oooo .o888oo oooo .ooooo. .oooo.o
|
|
||||||
`888 `888 888 `888 888 `888 888 `888 d88' `88b d88( "8
|
|
||||||
888 888 888 888 888 888 888 888 888ooo888 `"Y88b.
|
|
||||||
888 888 888 . 888 888 888 888 . 888 888 .o o. )88b
|
|
||||||
`V88V"V8P' "888" o888o o888o o888o "888" o888o `Y8bod8P' 8""888P'
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
@click.group(
|
||||||
parser = argparse.ArgumentParser(
|
context_settings=dict(help_option_names=["-h", "--help", "--halp"]),
|
||||||
description="Run a specific script by name. If no name is provided, start a REPL."
|
invoke_without_command=True,
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
@click.pass_context
|
||||||
"user_input",
|
@click.version_option(version=src.__version__, prog_name="utils")
|
||||||
type=str,
|
def main(ctx):
|
||||||
nargs="*",
|
if ctx.invoked_subcommand is None:
|
||||||
help="The name of the script that you want to run plus any arguments for that script.",
|
banner = random.choice(BANNERS)
|
||||||
)
|
code.interact(banner=banner, local=locals())
|
||||||
parser.add_argument(
|
|
||||||
"--version", action="store_true", help="Print out the version string."
|
|
||||||
)
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
|
||||||
user_input = args.user_input
|
|
||||||
if args.version is True:
|
|
||||||
print(src.__version__)
|
|
||||||
sys.exit()
|
sys.exit()
|
||||||
if len(user_input) == 0:
|
|
||||||
code.interact(banner=BANNER, local=locals())
|
|
||||||
else:
|
@main.command()
|
||||||
command_name = user_input.pop(0)
|
def uuid4():
|
||||||
module = importlib.import_module(f"src.commands.{command_name}")
|
"""Generate a random UUID4."""
|
||||||
sys.exit(module.main(user_input))
|
click.echo(uuid.uuid4())
|
||||||
|
|
||||||
|
|
||||||
|
@main.command()
|
||||||
|
@click.argument("words", nargs=-1)
|
||||||
|
def beautify(words: list[str]):
|
||||||
|
"""
|
||||||
|
MAkE YoUr mEsSaGe bEaUtIfUl!!!1!!
|
||||||
|
|
||||||
|
WORDS is either a single string surrounded by double quotes or multiple bare words,
|
||||||
|
e.g. `utils beautify "one two three"` or `utils beautify one two three`.
|
||||||
|
"""
|
||||||
|
message = " ".join(words)
|
||||||
|
new_beautiful_string = []
|
||||||
|
|
||||||
|
for num, letter in enumerate(message):
|
||||||
|
if letter in string.ascii_letters:
|
||||||
|
if num % 2:
|
||||||
|
new_beautiful_string.append(flip_char(letter))
|
||||||
|
continue
|
||||||
|
new_beautiful_string.append(letter)
|
||||||
|
|
||||||
|
click.echo("".join(new_beautiful_string))
|
||||||
|
|
||||||
|
|
||||||
|
@main.command()
|
||||||
|
def update():
|
||||||
|
"""Get the newest release from GitHub and install it."""
|
||||||
|
release_data = httpx.get(
|
||||||
|
"https://api.github.com/repos/itsthejoker/utils/releases/latest"
|
||||||
|
)
|
||||||
|
if release_data.status_code != 200:
|
||||||
|
print(
|
||||||
|
f"Something went wrong when talking to github; got a"
|
||||||
|
f" {release_data.status_code} with the following content:\n"
|
||||||
|
f"{release_data.content}"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
json_data = release_data.json()
|
||||||
|
if json_data["name"] == src.__version__:
|
||||||
|
print("Server version is the same as current version; nothing to update.")
|
||||||
|
return
|
||||||
|
|
||||||
|
url = json_data["assets"][0]["browser_download_url"]
|
||||||
|
with open("utils", "wb") as f, httpx.stream("GET", url, follow_redirects=True) as r:
|
||||||
|
for line in r.iter_bytes():
|
||||||
|
f.write(line)
|
||||||
|
print(f"Updated to {json_data['name']}! 🎉")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
import string
|
|
||||||
|
|
||||||
|
|
||||||
def flip_char(char: str):
|
|
||||||
if char in string.ascii_lowercase:
|
|
||||||
return string.ascii_uppercase[string.ascii_lowercase.find(char)]
|
|
||||||
else:
|
|
||||||
return string.ascii_lowercase[string.ascii_uppercase.find(char)]
|
|
||||||
|
|
||||||
|
|
||||||
def main(args: list[str]):
|
|
||||||
message = " ".join(args)
|
|
||||||
new_beautiful_string = []
|
|
||||||
|
|
||||||
for num, letter in enumerate(message):
|
|
||||||
if letter in string.ascii_letters:
|
|
||||||
if num % 2:
|
|
||||||
new_beautiful_string.append(flip_char(letter))
|
|
||||||
continue
|
|
||||||
new_beautiful_string.append(letter)
|
|
||||||
|
|
||||||
print("".join(new_beautiful_string))
|
|
@ -1,26 +0,0 @@
|
|||||||
import httpx
|
|
||||||
|
|
||||||
import src
|
|
||||||
|
|
||||||
|
|
||||||
def main(args):
|
|
||||||
release_data = httpx.get(
|
|
||||||
"https://api.github.com/repos/itsthejoker/utils/releases/latest"
|
|
||||||
)
|
|
||||||
if release_data.status_code != 200:
|
|
||||||
print(
|
|
||||||
f"Something went wrong when talking to github; got a"
|
|
||||||
f" {release_data.status_code} with the following content:\n"
|
|
||||||
f"{release_data.content}"
|
|
||||||
)
|
|
||||||
return
|
|
||||||
json_data = release_data.json()
|
|
||||||
if json_data["name"] == src.__version__:
|
|
||||||
print("Server version is the same as current version; nothing to update.")
|
|
||||||
return
|
|
||||||
|
|
||||||
url = json_data["assets"][0]["browser_download_url"]
|
|
||||||
with open("utils", "wb") as f, httpx.stream("GET", url, follow_redirects=True) as r:
|
|
||||||
for line in r.iter_bytes():
|
|
||||||
f.write(line)
|
|
||||||
print(f"Updated to {json_data['name']}! 🎉")
|
|
@ -1,6 +0,0 @@
|
|||||||
"""Generate and print a random UUID4."""
|
|
||||||
import uuid
|
|
||||||
|
|
||||||
|
|
||||||
def main(args: list[str]):
|
|
||||||
print(uuid.uuid4())
|
|
8
src/helpers.py
Normal file
8
src/helpers.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import string
|
||||||
|
|
||||||
|
|
||||||
|
def flip_char(char: str):
|
||||||
|
if char in string.ascii_lowercase:
|
||||||
|
return string.ascii_uppercase[string.ascii_lowercase.find(char)]
|
||||||
|
else:
|
||||||
|
return string.ascii_lowercase[string.ascii_uppercase.find(char)]
|
Loading…
Reference in New Issue
Block a user