Skip to content

Commit

Permalink
Merge pull request sphinx-doc#7978 from tk0miya/7973_imgconverter_war…
Browse files Browse the repository at this point in the history
…nings

Fix sphinx-doc#7973: imgconverter: Check availability of imagemagick many times
  • Loading branch information
tk0miya committed Oct 4, 2020
2 parents 941c9ba + 4571797 commit f2d8093
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 5 deletions.
1 change: 1 addition & 0 deletions CHANGES
Expand Up @@ -45,6 +45,7 @@ Bugs fixed
* #8175: intersphinx: Potential of regex denial of service by broken inventory
* #8277: sphinx-build: missing and redundant spacing (and etc) for console
output on building
* #7973: imgconverter: Check availability of imagemagick many times
* #8093: The highlight warning has wrong location in some builders (LaTeX,
singlehtml and so on)
* #8239: Failed to refer a token in productionlist if it is indented
Expand Down
15 changes: 10 additions & 5 deletions sphinx/transforms/post_transforms/images.py
Expand Up @@ -11,7 +11,7 @@
import os
import re
from math import ceil
from typing import Any, Dict, List, Tuple
from typing import Any, Dict, List, Optional, Tuple

from docutils import nodes

Expand Down Expand Up @@ -175,6 +175,13 @@ class ImageConverter(BaseImageConverter):
"""
default_priority = 200

#: The converter is available or not. Will be filled at the first call of
#: the build. The result is shared in the same process.
#:
#: .. todo:: This should be refactored not to store the state without class
#: variable.
available = None # type: Optional[bool]

#: A conversion rules the image converter supports.
#: It is represented as a list of pair of source image format (mimetype) and
#: destination one::
Expand All @@ -187,16 +194,14 @@ class ImageConverter(BaseImageConverter):
conversion_rules = [] # type: List[Tuple[str, str]]

def __init__(self, *args: Any, **kwargs: Any) -> None:
self.available = None # type: bool
# the converter is available or not.
# Will be checked at first conversion
super().__init__(*args, **kwargs)

def match(self, node: nodes.image) -> bool:
if not self.app.builder.supported_image_types:
return False
elif self.available is None:
self.available = self.is_available()
# store the value to the class variable to share it during the build
self.__class__.available = self.is_available()

if not self.available:
return False
Expand Down

0 comments on commit f2d8093

Please sign in to comment.