From 751c74e7de1c78a151fdd8b76f220d8411a2108a Mon Sep 17 00:00:00 2001 From: Simeon Simeonov Date: Tue, 28 Apr 2026 14:27:05 +0200 Subject: Restructure the entire project, enforce linting and add support for type checkers --- src/otp2289/__main__.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'src/otp2289/__main__.py') diff --git a/src/otp2289/__main__.py b/src/otp2289/__main__.py index 9f1aab8..0fdcc52 100644 --- a/src/otp2289/__main__.py +++ b/src/otp2289/__main__.py @@ -1,6 +1,6 @@ -# SPDX-License-Identifier: BSD-2-Clause-FreeBSD +# SPDX-License-Identifier: BSD-2-Clause # -# Copyright (c) 2020-2025 Simeon Simeonov +# Copyright (c) 2020-2026 Simeon Simeonov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -36,6 +36,7 @@ import argparse import errno import getpass import os +import pathlib import secrets import string import sys @@ -43,9 +44,11 @@ import sys import otp2289 -def eprint(*arg, **kwargs): +def eprint( + *value: object, sep: str | None = ' ', end: str | None = '\n' +) -> None: """stdderr print wrapper""" - print(*arg, file=sys.stderr, flush=True, **kwargs) + print(*value, sep=sep, end=end, file=sys.stderr, flush=True) def generate_otp_response(args: argparse.Namespace) -> str: @@ -162,8 +165,8 @@ def get_password(args: argparse.Namespace) -> str: eprint('The passwords do not match') return password - if os.path.isfile(args.password): - with open(args.password, encoding='utf-8') as fp: + if pathlib.Path(args.password).is_file(): + with pathlib.Path(args.password).open(encoding='utf-8') as fp: return fp.readline().strip() return args.password @@ -213,7 +216,7 @@ def initiate_new_sequence(args: argparse.Namespace) -> str: return header + generator.generate_otp_hexdigest(args.step) -def main(args=None): +def main(inargs: list[str] | None = None) -> None: """the main entry point""" parser = argparse.ArgumentParser( prog=__package__, @@ -344,8 +347,10 @@ def main(args=None): version=f'%(prog)s {otp2289.__version__}', help='display program-version and exit', ) - args = parser.parse_args(args) + + args = parser.parse_args(inargs) # handle the password before everything else + try: args.password = get_password(args) except KeyboardInterrupt: @@ -354,6 +359,7 @@ def main(args=None): except Exception as exp: eprint(f'Unable to fetch password: {exp}') sys.exit(1) + try: if args.initiate_new_sequence: print(initiate_new_sequence(args)) -- cgit v1.3