diff --git a/src/pyquickhelper/sphinxext/sphinx_gdot_extension.py b/src/pyquickhelper/sphinxext/sphinx_gdot_extension.py index 59fd7497..622392c9 100644 --- a/src/pyquickhelper/sphinxext/sphinx_gdot_extension.py +++ b/src/pyquickhelper/sphinxext/sphinx_gdot_extension.py @@ -105,7 +105,9 @@ class GDotDirective(Directive): 'process': directives.unchanged, } - _default_url = "http://www.xavierdupre.fr/js/vizjs/viz.js" + _default_url = ( + "https://github.com/sdpython/jyquickhelper/raw/master/src/" + "jyquickhelper/js/vizjs/viz.js") def run(self): """ @@ -131,8 +133,8 @@ def run(self): except ImportError: url = GDotDirective._default_url logger = logging.getLogger("gdot") - logger.warning("[gdot] jyquickhelper not installed, falling back to " - "%r", url) + logger.warning( + "[gdot] jyquickhelper not installed, falling back to %r", url) info = get_env_state_info(self) docname = info['docname'] @@ -170,8 +172,9 @@ def run(self): if script: spl = content.split(script) if len(spl) > 2: - raise RuntimeError("'{}' indicates the beginning of the graph " - "but there are many in\n{}".format(script, content)) + raise RuntimeError( + "'{}' indicates the beginning of the graph " + "but there are many in\n{}".format(script, content)) content = spl[-1] node = gdot_node(format=format, code=content, url=url, @@ -225,7 +228,8 @@ def process(text): "__URL__", node['url']) self.body.append(content) - self.body.append("{0}".format("\n", script)) + self.body.append( + '{0}'.format("\n", script)) def depart_gdot_node_html_svg(self, node): @@ -260,6 +264,8 @@ def depart_gdot_node_html(self, node): def copy_js_files(app): + from ..helpgen.install_custom import download_requirejs + from ..filehelper.download_helper import get_url_content_timeout try: import jyquickhelper local = True @@ -267,49 +273,73 @@ def copy_js_files(app): local = False logger = logging.getLogger("gdot") - if local: - path = os.path.join(os.path.dirname( - jyquickhelper.__file__), "js", "vizjs", "viz.js") - if os.path.exists(path): - # We copy the file to static path. - dest = app.config.html_static_path - if isinstance(dest, list) and len(dest) > 0: - dest = dest[0] + dest = app.config.html_static_path + if isinstance(dest, list) and len(dest) > 0: + dest = dest[0] + else: + logger.warning("[gdot] unable to locate 'html_static_path' (%r), " + "unable to use local viz.js.", + app.config.html_static_path) + return + + srcdir = app.builder.srcdir + if "IMPOSSIBLE:TOFIND" not in srcdir: + if not os.path.exists(srcdir): + raise FileNotFoundError( + f"Source file is wrong '{srcdir}'.") + + destf = os.path.join(os.path.abspath(srcdir), dest) + if not os.path.exists(destf): + logger.warning("[gdot] destination folder %r does not exists, " + "unable to use local viz.js.", destf) + return + + # viz.js + file_dest = os.path.join(destf, "viz.js") + if os.path.exists(file_dest): + logger.info("[gdot] %r already installed.", file_dest) + else: + if local: + path = os.path.join(os.path.dirname( + jyquickhelper.__file__), "js", "vizjs", "viz.js") + if os.path.exists(path): + # We copy the file to static path. + try: + shutil.copy(path, file_dest) + logger.info("[gdot] copy %r to %r.", path, file_dest) + except PermissionError as e: # pragma: no cover + logger.warning("[gdot] permission error: %r, " + "unable to use local viz.js.", e) else: - dest = None - - srcdir = app.builder.srcdir - if "IMPOSSIBLE:TOFIND" not in srcdir: - if not os.path.exists(srcdir): - raise FileNotFoundError( - f"Source file is wrong '{srcdir}'.") - - if dest is not None: - destf = os.path.join(os.path.abspath(srcdir), dest) - if os.path.exists(destf): - dest = os.path.join(destf, 'viz.js') - try: - shutil.copy(path, dest) - logger.info("[gdot] copy %r to %r.", path, dest) - except PermissionError as e: # pragma: no cover - logger.warning("[gdot] permission error: %r, " - "unable to use local viz.js.", e) - - if not os.path.exists(dest): - logger.warning("[gdot] unable to copy=%r, " - "unable to use local viz.js.", dest) - else: - logger.warning("[gdot] destination folder=%r does not exists, " - "unable to use local viz.js.", destf) - else: - logger.warning("[gdot] unable to locate html_static_path=%r, " - "unable to use local viz.js.", app.config.html_static_path) + logger.warning( + "[gdot] jyquickhelper needs to be update, unable to find %r.", path) else: - logger.warning( - "[gdot] jyquickhelper needs to be update, unable to find %r.", path) + logger.warning("[gdot] jyquickhelper not installed, falling back to " + "%r", GDotDirective._default_url) + + file_dest = os.path.join(destf, "require.js") + content = get_url_content_timeout( + GDotDirective._default_url, output=file_dest, raise_exception=False) + if content is None: + logger.warning("[gdot] unable to download: %r to %r", + GDotDirective._default_url, file_dest) + else: + logger.info("[gdot] copy %r to %r.", path, file_dest) + + # require.js + file_dest = os.path.join(destf, "require.js") + if os.path.exists(file_dest): + logger.info("[gdot] %r already installed.", file_dest) + else: + download_requirejs(destf, fLOG=lambda *args, **kwargs: None) + + if os.path.exists(file_dest): + # It adds + # at the bottom of the file. It needs to be at the beginning. + # app.add_js_file("require.js", priority=200) + logger.info("[gdot] %r installed.", file_dest) else: - logger.warning("[gdot] jyquickhelper not installed, falling back to " - "%r", GDotDirective._default_url) + logger.warning("[gdot] %r not installed.", file_dest) def setup(app):