diff --git a/_extensions/odoo/__init__.py b/_extensions/odoo/__init__.py index 13dcf557e..e3473c996 100644 --- a/_extensions/odoo/__init__.py +++ b/_extensions/odoo/__init__.py @@ -28,7 +28,9 @@ def setup(app): app.connect('html-page-context', update_meta) def update_meta(app, pagename, templatename, context, doctree): - meta = context.setdefault('meta', {}) + if not context.get('meta'): # context['meta'] can be None + context['meta'] = {} + meta = context.setdefault('meta', {}) # we want {} by default meta.setdefault('banner', app.config.odoo_cover_default) def navbarify(node, navbar=None): diff --git a/_extensions/odoo/pycompat.py b/_extensions/odoo/pycompat.py deleted file mode 100644 index 804a2a0ba..000000000 --- a/_extensions/odoo/pycompat.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -import sys - -PY2 = sys.version_info[0] == 2 - -if PY2: - text_type = unicode -else: - text_type = str - -def to_text(source): - """ Generates a text value (an instance of text_type) from an arbitrary - source. - - * False and None are converted to empty strings - * text is passed through - * bytes are decoded as UTF-8 - * rest is textified via the current version's relevant data model method - """ - if source is None or source is False: - return u'' - - if isinstance(source, bytes): - return source.decode('utf-8') - - return text_type(source) - diff --git a/_extensions/odoo/translator.py b/_extensions/odoo/translator.py index 769496f8a..e3ee8bcf1 100644 --- a/_extensions/odoo/translator.py +++ b/_extensions/odoo/translator.py @@ -2,14 +2,11 @@ import os.path import posixpath import re -import urllib from docutils import nodes from sphinx import addnodes, util from sphinx.locale import admonitionlabels -from . import pycompat - try: from urllib import url2pathname except ImportError: @@ -58,6 +55,7 @@ class BootstrapTranslator(nodes.NodeVisitor, object): self.context = [] self.section_level = 0 + self.config = builder.config self.highlightlang = self.highlightlang_base = self.builder.config.highlight_language self.highlightopts = getattr(builder.config, 'highlight_options', {}) @@ -67,7 +65,7 @@ class BootstrapTranslator(nodes.NodeVisitor, object): self.param_separator = ',' def encode(self, text): - return pycompat.to_text(text).translate({ + return text.strip().translate({ ord('&'): u'&', ord('<'): u'<', ord('"'): u'"', @@ -76,7 +74,7 @@ class BootstrapTranslator(nodes.NodeVisitor, object): }) def starttag(self, node, tagname, **attributes): - tagname = pycompat.to_text(tagname).lower() + tagname = tagname.strip().lower() # extract generic attributes attrs = {name.lower(): value for name, value in attributes.items()} @@ -111,7 +109,7 @@ class BootstrapTranslator(nodes.NodeVisitor, object): # only "space characters" SPACE, CHARACTER TABULATION, LINE FEED, # FORM FEED and CARRIAGE RETURN should be collapsed, not al White_Space def attval(self, value, whitespace=re.compile(u'[ \t\n\f\r]')): - return self.encode(whitespace.sub(u' ', pycompat.to_text(value))) + return self.encode(whitespace.sub(u' ', value.strip())) def astext(self): return u''.join(self.body) @@ -647,7 +645,7 @@ class BootstrapTranslator(nodes.NodeVisitor, object): self.body.append(title if title else util.nodes.clean_astext(env.titles[ref])) self.body.append(u'') - entries = [(title, ref)] if not toc else ((e[0], e[1]) for e in toc[0]['entries']) + entries = [(title, ref)] if not toc else ((e[0], e[1]) for e in list(toc)[0]['entries']) for subtitle, subref in entries: baseuri = self.builder.get_target_uri(node['parent']) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..93abfad67 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +Sphinx>=2.4.0 +Werkzeug==0.14.1