@@ -0,0 +1,114 @@
|
||||
"""Command-line interface for pypandoc."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
|
||||
from .handler import _check_log_handler
|
||||
|
||||
|
||||
def main(argv=None):
|
||||
"""Entry point for ``python -m pypandoc`` and the ``pypandoc`` console script."""
|
||||
_check_log_handler()
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
prog="pypandoc",
|
||||
description="Thin wrapper for pandoc.",
|
||||
)
|
||||
sub = parser.add_subparsers(dest="command")
|
||||
|
||||
# version
|
||||
sub.add_parser("version", help="Show pypandoc and pandoc versions")
|
||||
|
||||
# pandoc
|
||||
p_pandoc = sub.add_parser(
|
||||
"pandoc",
|
||||
help="Pass arguments through to the pandoc binary",
|
||||
add_help=False,
|
||||
)
|
||||
p_pandoc.add_argument("pandoc_args", nargs=argparse.REMAINDER)
|
||||
|
||||
# download
|
||||
p_download = sub.add_parser("download", help="Download pandoc")
|
||||
p_download.add_argument("--url", default=None, help="URL to download pandoc from")
|
||||
p_download.add_argument(
|
||||
"--target", default=None, help="Target folder for the pandoc installation"
|
||||
)
|
||||
p_download.add_argument(
|
||||
"--version",
|
||||
default="latest",
|
||||
help="Pandoc version to download (default: latest)",
|
||||
)
|
||||
p_download.add_argument(
|
||||
"--delete-installer",
|
||||
action="store_true",
|
||||
help="Delete the installer after extraction",
|
||||
)
|
||||
p_download.add_argument(
|
||||
"--download-folder",
|
||||
default=None,
|
||||
help="Folder to download the installer to before extraction",
|
||||
)
|
||||
|
||||
# If the subcommand is "pandoc", pass everything after it verbatim
|
||||
# so argparse doesn't intercept flags like --version or --help.
|
||||
raw = argv if argv is not None else sys.argv[1:]
|
||||
if raw and raw[0] == "pandoc":
|
||||
args = argparse.Namespace(command="pandoc", pandoc_args=raw[1:])
|
||||
else:
|
||||
args = parser.parse_args(argv)
|
||||
|
||||
if not args.command:
|
||||
parser.print_help()
|
||||
return 1
|
||||
|
||||
import pypandoc
|
||||
|
||||
try:
|
||||
if args.command == "version":
|
||||
print("pypandoc %s" % pypandoc.__version__)
|
||||
try:
|
||||
print("pandoc info:")
|
||||
pandoc_path = pypandoc.get_pandoc_path()
|
||||
import subprocess
|
||||
|
||||
subprocess.call([pandoc_path, "--version"])
|
||||
except OSError:
|
||||
print("pandoc not found")
|
||||
try:
|
||||
import pytinytex
|
||||
|
||||
print("pytinytex %s" % pytinytex.__version__)
|
||||
except ImportError:
|
||||
print("pytinytex not installed")
|
||||
|
||||
elif args.command == "pandoc":
|
||||
import subprocess
|
||||
|
||||
try:
|
||||
pandoc_path = pypandoc.get_pandoc_path()
|
||||
except OSError:
|
||||
print(
|
||||
"Error: pandoc not found. Install pandoc or run "
|
||||
"'pypandoc download' to download it.",
|
||||
file=sys.stderr,
|
||||
)
|
||||
return 1
|
||||
sys.exit(subprocess.call([pandoc_path] + args.pandoc_args))
|
||||
|
||||
elif args.command == "download":
|
||||
pypandoc.download_pandoc(
|
||||
url=args.url,
|
||||
targetfolder=args.target,
|
||||
version=args.version,
|
||||
delete_installer=args.delete_installer,
|
||||
download_folder=args.download_folder,
|
||||
)
|
||||
print("Done.")
|
||||
|
||||
except RuntimeError as e:
|
||||
print("Error: %s" % e, file=sys.stderr)
|
||||
return 1
|
||||
|
||||
return 0
|
||||
Reference in New Issue
Block a user