From 914c5ebc180a95d67e3da291565dbc97ad24526b Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 30 May 2018 11:19:30 +0200 Subject: [PATCH 1/9] [FIX] _extensions: p3 compatibility (2) --- _extensions/demo_link.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_extensions/demo_link.py b/_extensions/demo_link.py index d2990db36..296b235c7 100644 --- a/_extensions/demo_link.py +++ b/_extensions/demo_link.py @@ -125,7 +125,7 @@ def _submit(result_queue, xid, view='form'): def _launcher(): try: info = xmlrpclib.ServerProxy('https://demo.odoo.com/start').start() - except xmlrpclib.Fault, e: + except xmlrpclib.Fault as e: threading.Thread( target=_fault_requests, args=["Demo start() failed: %s" % e.faultString], From 4143a500e1792f81d94467d9bba6b5b6f84af6c1 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 30 May 2018 11:37:01 +0200 Subject: [PATCH 2/9] [FIX] _extensions: p3 compatibility (3) --- _extensions/demo_link.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/_extensions/demo_link.py b/_extensions/demo_link.py index 296b235c7..ab607782c 100644 --- a/_extensions/demo_link.py +++ b/_extensions/demo_link.py @@ -1,9 +1,14 @@ -import Queue import collections import threading import urllib import xmlrpclib +try: + import Queue +except ImportError: + # P3 + import queue as Queue + from xml.etree import ElementTree as ET from docutils import nodes, utils From 2e58b86fe22afe54b2e6c8b5cf07b284aad37f59 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 30 May 2018 11:59:47 +0200 Subject: [PATCH 3/9] [FIX] _extensions: p3 compatibility (4) --- _extensions/demo_link.py | 11 ++++++++--- _extensions/github_link.py | 5 +++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/_extensions/demo_link.py b/_extensions/demo_link.py index ab607782c..76d29d47c 100644 --- a/_extensions/demo_link.py +++ b/_extensions/demo_link.py @@ -1,7 +1,12 @@ import collections import threading -import urllib -import xmlrpclib +import werkzeug + +try: + import xmlrpclib +except ImportError: + # P3 + import xmlrpc.client as xmlrpclib try: import Queue @@ -94,7 +99,7 @@ class Action(Directive): external_id = self.arguments[0] text = "action button" node = nodes.reference( - refuri='https://demo.odoo.com?{}'.format(urllib.urlencode({ + refuri='https://demo.odoo.com?{}'.format(werkzeug.urls.url_encode({ 'module': external_id })), classes=['btn', 'btn-primary', 'btn-lg', 'btn-block', 'center-block'] diff --git a/_extensions/github_link.py b/_extensions/github_link.py index baf301810..806d2b4ae 100644 --- a/_extensions/github_link.py +++ b/_extensions/github_link.py @@ -1,7 +1,8 @@ import inspect import importlib import os.path -from urlparse import urlunsplit +import werkzeug + """ * adds github_link(mode) context variable: provides URL (in relevant mode) of @@ -81,7 +82,7 @@ def make_github_link(app, path, line=None, mode="blob"): path=path, mode=mode, ) - return urlunsplit(( + return werkzeug.urls.url_unparse(( 'https', 'github.com', urlpath, From b22590c2da8b5f9a5dd64ecab03239b47ed6b02c Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 30 May 2018 12:09:58 +0200 Subject: [PATCH 4/9] [FIX] _extensions: p3 compatibility (5) --- _extensions/demo_link.py | 2 +- _extensions/odoo/translator.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/_extensions/demo_link.py b/_extensions/demo_link.py index 76d29d47c..9038d8040 100644 --- a/_extensions/demo_link.py +++ b/_extensions/demo_link.py @@ -77,7 +77,7 @@ class Fields(Directive): )) ) ) - for k, v in fields.iteritems() + for k, v in fields.items() # if there's a whitelist, only display whitelisted fields if not whitelist or k in whitelist # only display if there's a help text diff --git a/_extensions/odoo/translator.py b/_extensions/odoo/translator.py index 34eb03d07..617126f13 100644 --- a/_extensions/odoo/translator.py +++ b/_extensions/odoo/translator.py @@ -71,9 +71,9 @@ class BootstrapTranslator(nodes.NodeVisitor, object): tagname = unicode(tagname).lower() # extract generic attributes - attrs = {name.lower(): value for name, value in attributes.iteritems()} + attrs = {name.lower(): value for name, value in attributes.items()} attrs.update( - (name, value) for name, value in node.attributes.iteritems() + (name, value) for name, value in node.attributes.items() if name.startswith('data-') ) @@ -97,7 +97,7 @@ class BootstrapTranslator(nodes.NodeVisitor, object): prefix=u''.join(prefix), tag=tagname, attrs=u' '.join(u'{}="{}"'.format(name, self.attval(value)) - for name, value in attrs.iteritems()), + for name, value in attrs.items()), postfix=u''.join(postfix), ) # only "space characters" SPACE, CHARACTER TABULATION, LINE FEED, From 478fcb7befbc179ecc648a32e7cf9b68c5d2c104 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 30 May 2018 12:23:26 +0200 Subject: [PATCH 5/9] [FIX] _extensions: p3 compatibility (6) --- _extensions/odoo/pycompat.py | 27 +++++++++++++++++++++++++++ _extensions/odoo/translator.py | 8 +++++--- 2 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 _extensions/odoo/pycompat.py diff --git a/_extensions/odoo/pycompat.py b/_extensions/odoo/pycompat.py new file mode 100644 index 000000000..804a2a0ba --- /dev/null +++ b/_extensions/odoo/pycompat.py @@ -0,0 +1,27 @@ +# -*- 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 617126f13..34739d870 100644 --- a/_extensions/odoo/translator.py +++ b/_extensions/odoo/translator.py @@ -8,6 +8,8 @@ from docutils import nodes from sphinx import addnodes, util from sphinx.locale import admonitionlabels +from . import pycompat + def _parents(node): while node.parent: @@ -59,7 +61,7 @@ class BootstrapTranslator(nodes.NodeVisitor, object): self.param_separator = ',' def encode(self, text): - return unicode(text).translate({ + return pycompat.to_text(text).translate({ ord('&'): u'&', ord('<'): u'<', ord('"'): u'"', @@ -68,7 +70,7 @@ class BootstrapTranslator(nodes.NodeVisitor, object): }) def starttag(self, node, tagname, **attributes): - tagname = unicode(tagname).lower() + tagname = pycompat.to_text(tagname).lower() # extract generic attributes attrs = {name.lower(): value for name, value in attributes.items()} @@ -103,7 +105,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' ', unicode(value))) + return self.encode(whitespace.sub(u' ', pycompat.to_text(value))) def astext(self): return u''.join(self.body) From db5604f7033f913a223365aa24215db309d6986e Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 30 May 2018 14:33:24 +0200 Subject: [PATCH 6/9] [FIX] _extensions: p3 compatibility (7) --- _extensions/github_link.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_extensions/github_link.py b/_extensions/github_link.py index 806d2b4ae..e30ae3e5b 100644 --- a/_extensions/github_link.py +++ b/_extensions/github_link.py @@ -99,7 +99,7 @@ def add_doc_link(app, pagename, templatename, context, doctree): # in Sphinx 1.3 it's possible to have mutliple source suffixes and that # may be useful in the future source_suffix = app.config.source_suffix - source_suffix = source_suffix if isinstance(source_suffix, basestring) else source_suffix[0] + source_suffix = source_suffix if isinstance(source_suffix, str) else source_suffix[0] # FIXME: odoo/odoo has a doc/ prefix which is incorrect for this # project, how to unify? Add new setting? context['github_link'] = lambda mode='edit': make_github_link( From 48b11b31cc0f75bb38c2cd64123cad562bdac00c Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 30 May 2018 14:55:32 +0200 Subject: [PATCH 7/9] [FIX] _extensions: p3 compatibility (8) --- _extensions/odoo/translator.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/_extensions/odoo/translator.py b/_extensions/odoo/translator.py index 34739d870..de7901c2f 100644 --- a/_extensions/odoo/translator.py +++ b/_extensions/odoo/translator.py @@ -10,6 +10,12 @@ from sphinx.locale import admonitionlabels from . import pycompat +try: + from urllib import url2pathname +except ImportError: + # P3 + from urllib.request import url2pathname + def _parents(node): while node.parent: @@ -652,7 +658,7 @@ class BootstrapTranslator(nodes.NodeVisitor, object): banner = '_static/' + cover base, ext = os.path.splitext(banner) small = "{}.small{}".format(base, ext) - if os.path.isfile(urllib.url2pathname(small)): + if os.path.isfile(url2pathname(small)): banner = small style = u"background-image: url('{}')".format( util.relative_uri(baseuri, banner) or '#') From 591adeeb8464cd7ce953a2d66aab922b83888f10 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 30 May 2018 16:24:02 +0200 Subject: [PATCH 8/9] [FIX] latex style: compatibility with sphinx 1.6+ As of 1.6 and PR sphinx-doc/sphinx#3550, \ifsphinxpdfoutput is gone. It was not really necessary in the first place, mostly a leftover from an old copy of sphinx's \maketitle commands. Also make the title slightly less huge ;-) --- _static/latex/odoo.sty | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/_static/latex/odoo.sty b/_static/latex/odoo.sty index 3f313460b..d334203f9 100644 --- a/_static/latex/odoo.sty +++ b/_static/latex/odoo.sty @@ -82,17 +82,11 @@ \renewcommand{\footrulewidth}{0.1pt} \renewcommand{\maketitle}{% - \noindent\rule{\textwidth}{1pt}\ifsphinxpdfoutput\newline\null\fi\par - \ifsphinxpdfoutput - \begingroup - %\pdfstringdefDisableCommands{\def\\{, }\def\endgraf{ }\def\and{, }}% - %\hypersetup{pdfauthor={\@author}, pdftitle={\@title}}% - \endgroup - \fi + \noindent\rule{\textwidth}{1pt}\par \begin{flushright} \sphinxlogo \py@HeaderFamily - {\Huge \@title }\par + {\huge \@title }\par \end{flushright} \@thanks \setcounter{footnote}{0} @@ -118,4 +112,4 @@ \newpage } -\makeatother \ No newline at end of file +\makeatother From 63a615bc67c1a16f8e7e2286475122f8c419e46d Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 31 May 2018 16:04:46 +0200 Subject: [PATCH 9/9] [FIX] port db0cb1b09237b2e004c7a7eceadedde668f4ac30 from tech doc fix Sphinx 1.6 compatibility leading to the "tiles" on the home page not working anymore: 1.6 replaces BuildEnvironment.reolve_toctree by TocTree().resolve(), while the method still exists it's not actually called anymore --- _extensions/odoo/__init__.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/_extensions/odoo/__init__.py b/_extensions/odoo/__init__.py index 9744f826b..af3a34386 100644 --- a/_extensions/odoo/__init__.py +++ b/_extensions/odoo/__init__.py @@ -5,6 +5,11 @@ from . import switcher from . import translator import sphinx.environment +try: + from sphinx.environment.adapters import toctree +except ImportError: + toctree = None + import sphinx.builders.html from docutils import nodes def setup(app): @@ -93,6 +98,14 @@ class monkey(object): old = getattr(self.obj, name) setattr(self.obj, name, lambda self_, *args, **kwargs: \ fn(old, self_, *args, **kwargs)) +if toctree: + # 1.6 and above use a new toctree adapter object for processing rather + # than functions on the BuildEnv & al + @monkey(toctree.TocTree) + def resolve(old_resolve, tree, docname, *args, **kwargs): + if docname == tree.env.config.master_doc: + return resolve_content_toctree(tree.env, docname, *args, **kwargs) + return old_resolve(tree, docname, *args, **kwargs) @monkey(sphinx.environment.BuildEnvironment) def resolve_toctree(old_resolve, self, docname, *args, **kwargs):