mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Add a custom json serializer implementation that forces translation proxies. Fixes building with the JSON builder.
This commit is contained in:
2
CHANGES
2
CHANGES
@@ -1,6 +1,8 @@
|
||||
Release 1.0.1 (in development)
|
||||
==============================
|
||||
|
||||
* Fix building with the JSON builder.
|
||||
|
||||
* Fix hyperrefs in object descriptions for LaTeX.
|
||||
|
||||
|
||||
|
@@ -30,7 +30,7 @@ from docutils.frontend import OptionParser
|
||||
from docutils.readers.doctree import Reader as DoctreeReader
|
||||
|
||||
from sphinx import package_dir, __version__
|
||||
from sphinx.util import copy_static_entry
|
||||
from sphinx.util import jsonimpl, copy_static_entry
|
||||
from sphinx.util.osutil import SEP, os_path, relative_uri, ensuredir, \
|
||||
movefile, ustrftime, copyfile
|
||||
from sphinx.util.nodes import inline_all_toctrees
|
||||
@@ -47,14 +47,6 @@ from sphinx.util.console import bold, darkgreen, brown
|
||||
from sphinx.writers.html import HTMLWriter, HTMLTranslator, \
|
||||
SmartyPantsHTMLTranslator
|
||||
|
||||
try:
|
||||
import json
|
||||
except ImportError:
|
||||
try:
|
||||
import simplejson as json
|
||||
except ImportError:
|
||||
json = None
|
||||
|
||||
#: the filename for the inventory of objects
|
||||
INVENTORY_FILENAME = 'objects.inv'
|
||||
#: the filename for the "last build" file (for serializing builders)
|
||||
@@ -1007,15 +999,15 @@ class JSONHTMLBuilder(SerializingHTMLBuilder):
|
||||
"""
|
||||
A builder that dumps the generated HTML into JSON files.
|
||||
"""
|
||||
implementation = json
|
||||
indexer_format = json
|
||||
implementation = jsonimpl
|
||||
indexer_format = jsonimpl
|
||||
name = 'json'
|
||||
out_suffix = '.fjson'
|
||||
globalcontext_filename = 'globalcontext.json'
|
||||
searchindex_filename = 'searchindex.json'
|
||||
|
||||
def init(self):
|
||||
if json is None:
|
||||
if jsonimpl.json is None:
|
||||
raise SphinxError(
|
||||
'The module simplejson (or json in Python >= 2.6) '
|
||||
'is not available. The JSONHTMLBuilder builder will not work.')
|
||||
|
43
sphinx/util/jsonimpl.py
Normal file
43
sphinx/util/jsonimpl.py
Normal file
@@ -0,0 +1,43 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
sphinx.util.jsonimpl
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
JSON serializer implementation wrapper.
|
||||
|
||||
:copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
|
||||
:license: BSD, see LICENSE for details.
|
||||
"""
|
||||
|
||||
import UserString
|
||||
|
||||
try:
|
||||
import json
|
||||
JSONEncoder = json.JSONEncoder
|
||||
except ImportError:
|
||||
try:
|
||||
import simplejson as json
|
||||
JSONEncoder = json.JSONEncoder
|
||||
except ImportError:
|
||||
json = None
|
||||
JSONEncoder = object
|
||||
|
||||
|
||||
class SphinxJSONEncoder(JSONEncoder):
|
||||
"""JSONEncoder subclass that forces translation proxies."""
|
||||
def default(self, obj):
|
||||
if isinstance(obj, UserString.UserString):
|
||||
return unicode(obj)
|
||||
return JSONEncoder.default(self, obj)
|
||||
|
||||
|
||||
def dump(obj, fp, *args, **kwds):
|
||||
kwds['cls'] = SphinxJSONEncoder
|
||||
return json.dump(obj, fp, *args, **kwds)
|
||||
|
||||
def dumps(obj, *args, **kwds):
|
||||
kwds['cls'] = SphinxJSONEncoder
|
||||
return json.dumps(obj, *args, **kwds)
|
||||
|
||||
load = json.load
|
||||
loads = json.loads
|
Reference in New Issue
Block a user