115 lines
3.4 KiB
Python
115 lines
3.4 KiB
Python
"""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
|