diff options
author | Joris | 2023-09-17 12:23:47 +0200 |
---|---|---|
committer | Joris | 2023-09-17 12:23:47 +0200 |
commit | 1ebc55c72a1a17293bbf4ad86e0177a10a794750 (patch) | |
tree | 5fce0ea3a011ccbae85b0d3927f8ac33099585fb /cli/main.py | |
parent | c236facb4d4c277773c83f1a4ee85b48833d7e67 (diff) |
Make app packageable
Diffstat (limited to 'cli/main.py')
-rw-r--r-- | cli/main.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/cli/main.py b/cli/main.py new file mode 100644 index 0000000..01434fa --- /dev/null +++ b/cli/main.py @@ -0,0 +1,80 @@ +# Manage book library. +# +# Required dependencies: +# +# - python >= 3.11 +# - requests +# - pillow +# - ebook-convert CLI (from calibre) + +import cli.library.command +import cli.new.command +import cli.view.command +import os +import sys + +def main(bin_dir): + match sys.argv: + case [ _, 'new' ]: + books_library = get_books_library() + cli.new.command.run(books_library) + case [ _, 'new', book_source ]: + if os.path.isfile(book_source): + books_library = get_books_library() + cli.new.command.run(books_library, book_source) + else: + print_help(title=f'File not found: {book_source}.') + exit(1) + case [ _, 'library' ]: + books_library = get_books_library() + cli.library.command.run(books_library) + case [ _, 'view' ]: + books_library = get_books_library() + books_browser = get_env_var('BOOKS_BROWSER') + cli.view.command.run(books_library, books_browser, bin_dir) + case [ _, '--help' ]: + print_help() + case [ _, '-h' ]: + print_help() + case _: + print_help('Command not found.') + exit(1) + +def get_books_library(): + books_library = get_env_var('BOOKS_LIBRARY') + if os.path.isdir(books_library): + return books_library + else: + print_help(title=f'BOOKS_LIBRARY {books_library} not found.') + exit(1) + +def get_env_var(key): + value = os.getenv(key) + if value: + return value + else: + print_help(title=f'{key} environment variable is required.') + exit(1) + +def print_help(title='Manage book library'): + print(f"""{title} + +- Insert book entry with optional ebook file: + + $ python {sys.argv[0]} new [path-to-book] + +- Print library metadata as json: + + $ python {sys.argv[0]} library + +- View books in web page: + + $ python {sys.argv[0]} view + +Environment variables: + + BOOKS_LIBRARY: path to book library, + BOOKS_BROWSER: browser command executed to view the library.""") + +if __name__ == "__main__": + main() |