Merge branch '1.7' into 4754_remove_unused_code

This commit is contained in:
Takeshi KOMIYA 2018-03-20 01:41:57 +09:00 committed by GitHub
commit c9fcaa3c14
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 24 additions and 11 deletions

View File

@ -29,6 +29,8 @@ Bugs fixed
* #4574: vertical space before equation in latex * #4574: vertical space before equation in latex
* #4720: message when an image is mismatched for builder is not clear * #4720: message when an image is mismatched for builder is not clear
* #4655, #4684: Incomplete localization strings in Polish and Chinese * #4655, #4684: Incomplete localization strings in Polish and Chinese
* #2286: Sphinx crashes when error is happens in rendering HTML pages
* #4688: Error to download remote images having long URL
* #4754: sphinx/pycode/__init__.py raises AttributeError * #4754: sphinx/pycode/__init__.py raises AttributeError
Testing Testing

View File

@ -96,7 +96,7 @@ switch on line numbers for the individual block::
Some more Ruby code. Some more Ruby code.
The first line number can be selected with the ``lineno-start`` option. If The first line number can be selected with the ``lineno-start`` option. If
present, ``linenos`` is automatically activated as well:: present, ``linenos`` flag is automatically activated::
.. code-block:: ruby .. code-block:: ruby
:lineno-start: 10 :lineno-start: 10

View File

@ -35,8 +35,9 @@ from sphinx.deprecation import RemovedInSphinx20Warning
from sphinx.environment.adapters.asset import ImageAdapter from sphinx.environment.adapters.asset import ImageAdapter
from sphinx.environment.adapters.indexentries import IndexEntries from sphinx.environment.adapters.indexentries import IndexEntries
from sphinx.environment.adapters.toctree import TocTree from sphinx.environment.adapters.toctree import TocTree
from sphinx.errors import ThemeError
from sphinx.highlighting import PygmentsBridge from sphinx.highlighting import PygmentsBridge
from sphinx.locale import _, l_ from sphinx.locale import _, __, l_
from sphinx.search import js_index from sphinx.search import js_index
from sphinx.theming import HTMLThemeFactory from sphinx.theming import HTMLThemeFactory
from sphinx.util import jsonimpl, logging, status_iterator from sphinx.util import jsonimpl, logging, status_iterator
@ -1016,6 +1017,9 @@ class StandaloneHTMLBuilder(Builder):
"Please make sure all config values that contain " "Please make sure all config values that contain "
"non-ASCII content are Unicode strings.", pagename) "non-ASCII content are Unicode strings.", pagename)
return return
except Exception as exc:
raise ThemeError(__("An error happened in rendering the page %s.\nReason: %r") %
(pagename, exc))
if not outfilename: if not outfilename:
outfilename = self.get_outfilename(pagename) outfilename = self.get_outfilename(pagename)

View File

@ -30,6 +30,8 @@ if False:
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
MAX_FILENAME_LEN = 32
class BaseImageConverter(SphinxTransform): class BaseImageConverter(SphinxTransform):
def apply(self): def apply(self):
@ -66,16 +68,21 @@ class ImageDownloader(BaseImageConverter):
def handle(self, node): def handle(self, node):
# type: (nodes.Node) -> None # type: (nodes.Node) -> None
basename = os.path.basename(node['uri'])
if '?' in basename:
basename = basename.split('?')[0]
if basename == '':
basename = sha1(node['uri'].encode("utf-8")).hexdigest()
dirname = node['uri'].replace('://', '/').translate({ord("?"): u"/",
ord("&"): u"/"})
ensuredir(os.path.join(self.imagedir, dirname))
path = os.path.join(self.imagedir, dirname, basename)
try: try:
basename = os.path.basename(node['uri'])
if '?' in basename:
basename = basename.split('?')[0]
if basename == '' or len(basename) > MAX_FILENAME_LEN:
filename, ext = os.path.splitext(node['uri'])
basename = sha1(filename.encode("utf-8")).hexdigest() + ext
dirname = node['uri'].replace('://', '/').translate({ord("?"): u"/",
ord("&"): u"/"})
if len(dirname) > MAX_FILENAME_LEN:
dirname = sha1(dirname.encode('utf-8')).hexdigest()
ensuredir(os.path.join(self.imagedir, dirname))
path = os.path.join(self.imagedir, dirname, basename)
headers = {} headers = {}
if os.path.exists(path): if os.path.exists(path):
timestamp = ceil(os.stat(path).st_mtime) timestamp = ceil(os.stat(path).st_mtime)