Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
onetimepass==1.0.1
click
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
install_requires=[open("requirements.txt").readlines()],
use_scm_version={
"version_scheme": "post-release",
# 'write_to': 'totp/version.py',
"write_to": "totp/version.py",
},
setup_requires=["setuptools_scm"],
classifiers=[
Expand Down
43 changes: 41 additions & 2 deletions totp/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,39 @@
import getpass
import click
import sys
import subprocess
from base64 import b32decode
from collections import namedtuple
from importlib.metadata import version, PackageNotFoundError

import totp

_subcommands = {}

_argument = namedtuple("_argument", ["args", "kwargs"])

from importlib.metadata import version, PackageNotFoundError

def get_version():
# 1. Try installed distribution (pip/pipx)
try:
return version("totp")
except PackageNotFoundError:
pass

# 2. Try __version__ from version.py or __init__.py
try:
from .version import __version__ # setuptools_scm can generate this
return __version__
except ImportError:
try:
from . import __version__ # fallback if you put it in __init__.py
return __version__
except ImportError:
pass

# 3. Last-resort fallback
return "unknown"

def argument(*args, **kwargs):
return _argument(args, kwargs)
Expand All @@ -24,10 +48,25 @@ def decorator(func):


def _parse_args(args):
pkg_version = get_version()

parser = argparse.ArgumentParser(
description="Print a TOTP token getting the shared key from pass(1)."
description="""Print a TOTP token getting the shared key from pass(1).""",
epilog=f"""totp-cli v. {pkg_version} is a python utility for providing one-time passwords.
See https://github.com/WhyNotHugo/totp-cli for more information.
\n
""",
formatter_class=argparse.RawDescriptionHelpFormatter
)


parser.add_argument(
"--version",
action="version",
version=f"totp-cli v. {pkg_version}",
)


subparsers = parser.add_subparsers(dest="command")
aliases = {}

Expand All @@ -48,7 +87,7 @@ def replace_aliases(args, aliases):

def add_default_subcommand_if_omitted(args, default):
if not any(
arg in ("-h", "--help") or arg in subparsers.choices for arg in args
arg in ("-h", "--help", "--version") or arg in subparsers.choices for arg in args
):
args.insert(0, default)

Expand Down