Skip to content

Module manubot.pandoc.util

View Source
import functools

import logging

import shutil

import subprocess

from typing import Any, Dict, Tuple

@functools.lru_cache

def get_pandoc_info() -> Dict[str, Any]:

    """

    Return path and version information for the system's pandoc and

    pandoc-citeproc commands. When Pandoc is installed,

    the output will look like:

    ```python

    {

        'pandoc': True,

        'pandoc path': '/PATH_TO_EXECUTABLES/pandoc',

        'pandoc version': (2, 5),

        'pandoc-citeproc': True,

        'pandoc-citeproc path': '/PATH_TO_EXECUTABLES/pandoc-citeproc',

        'pandoc-citeproc version': (0, 15),

    }

    ```

    If the executables are missing, the output will be like:

    ```python

    {

        'pandoc': False,

        'pandoc-citeproc': False,

    }

    ```

    """

    stats = get_command_info("pandoc")

    if stats["pandoc version"] < (2, 11):

        stats.update(get_command_info("pandoc-citeproc"))

    else:

        stats["pandoc-citeproc"] = False

    logging.info("\n".join(f"{k}: {v}" for k, v in stats.items()))

    return stats

def get_pandoc_version() -> Tuple[int, ...]:

    """

    Return pandoc version as tuple of major and minor

    version numbers, for example: (2, 7, 2)

    """

    pandoc_info = get_pandoc_info()

    if not pandoc_info["pandoc"]:

        # https://twitter.com/dhimmel/status/1327082301994496000

        raise ImportError("missing pandoc command on system.")

    return pandoc_info["pandoc version"]

def get_command_info(command: str) -> dict:

    """

    Returns a dictionary containing some information about a command

    """

    command_info_dict = {}

    path = shutil.which(command)

    command_info_dict[command] = bool(path)

    if not path:

        return command_info_dict

    version = subprocess.check_output(args=[command, "--version"], encoding="utf-8")

    logging.debug(version)

    version, *_discard = version.splitlines()

    _discard, version = version.strip().split()

    from packaging.version import parse as parse_version

    version = parse_version(version).release

    command_info_dict[f"{command} version"] = version

    command_info_dict[f"{command} path"] = path

    return command_info_dict

Functions

get_command_info

def get_command_info(
    command: str
) -> dict

Returns a dictionary containing some information about a command

View Source
def get_command_info(command: str) -> dict:

    """

    Returns a dictionary containing some information about a command

    """

    command_info_dict = {}

    path = shutil.which(command)

    command_info_dict[command] = bool(path)

    if not path:

        return command_info_dict

    version = subprocess.check_output(args=[command, "--version"], encoding="utf-8")

    logging.debug(version)

    version, *_discard = version.splitlines()

    _discard, version = version.strip().split()

    from packaging.version import parse as parse_version

    version = parse_version(version).release

    command_info_dict[f"{command} version"] = version

    command_info_dict[f"{command} path"] = path

    return command_info_dict

get_pandoc_info

def get_pandoc_info(

) -> Dict[str, Any]

Return path and version information for the system's pandoc and

pandoc-citeproc commands. When Pandoc is installed, the output will look like:

{
    'pandoc': True,
    'pandoc path': '/PATH_TO_EXECUTABLES/pandoc',
    'pandoc version': (2, 5),
    'pandoc-citeproc': True,
    'pandoc-citeproc path': '/PATH_TO_EXECUTABLES/pandoc-citeproc',
    'pandoc-citeproc version': (0, 15),
}

If the executables are missing, the output will be like:

{
    'pandoc': False,
    'pandoc-citeproc': False,
}
View Source
@functools.lru_cache

def get_pandoc_info() -> Dict[str, Any]:

    """

    Return path and version information for the system's pandoc and

    pandoc-citeproc commands. When Pandoc is installed,

    the output will look like:

    ```python

    {

        'pandoc': True,

        'pandoc path': '/PATH_TO_EXECUTABLES/pandoc',

        'pandoc version': (2, 5),

        'pandoc-citeproc': True,

        'pandoc-citeproc path': '/PATH_TO_EXECUTABLES/pandoc-citeproc',

        'pandoc-citeproc version': (0, 15),

    }

    ```

    If the executables are missing, the output will be like:

    ```python

    {

        'pandoc': False,

        'pandoc-citeproc': False,

    }

    ```

    """

    stats = get_command_info("pandoc")

    if stats["pandoc version"] < (2, 11):

        stats.update(get_command_info("pandoc-citeproc"))

    else:

        stats["pandoc-citeproc"] = False

    logging.info("\n".join(f"{k}: {v}" for k, v in stats.items()))

    return stats

get_pandoc_version

def get_pandoc_version(

) -> Tuple[int, ...]

Return pandoc version as tuple of major and minor

version numbers, for example: (2, 7, 2)

View Source
def get_pandoc_version() -> Tuple[int, ...]:

    """

    Return pandoc version as tuple of major and minor

    version numbers, for example: (2, 7, 2)

    """

    pandoc_info = get_pandoc_info()

    if not pandoc_info["pandoc"]:

        # https://twitter.com/dhimmel/status/1327082301994496000

        raise ImportError("missing pandoc command on system.")

    return pandoc_info["pandoc version"]