Source code for pyquickhelper.helpgen.install_custom

"""
Various function to install some application such as :epkg:`pandoc`.


:githublink:`%|py|5`
"""
from __future__ import print_function
import re
import os
import shutil

from ..filehelper import download, read_url
from ..filehelper.internet_helper import ReadUrlException
from ..filehelper.compression_helper import unzip_files
from ..filehelper.synchelper import explore_folder_iterfile


[docs]def download_revealjs(temp_folder=".", unzip_to=".", fLOG=print, location="https://github.com/hakimel/reveal.js/releases", clean=True): """ Downloads :epkg:`reveal.js` release and unzips it. :param temp_folder: where to download the setup :param unzip_to: where to unzip the files :param fLOG: logging function :param location: location of reveal.js release :param clean: clean unnecessary files :return: list of downloaded and unzipped files :githublink:`%|py|28` """ link = location page = read_url(link, encoding="utf8") reg = re.compile("href=\\\"(.*?[0-9.]+?[.]zip)\\\"") alls = reg.findall(page) if len(alls) == 0: raise Exception( "unable to find a link on a .zip file on page: " + page) filename = alls[0].split("/")[-1] filel = location.replace("releases", "").rstrip( '/') + "/archive/{0}".format(filename) outfile = os.path.join(temp_folder, "reveal.js." + filename) fLOG("download ", filel, "to", outfile) local = download(filel, temp_folder, fLOG=fLOG) fLOG("local file", local) unzip_files(local, where_to=unzip_to) # we rename sub = [_ for _ in os.listdir(unzip_to) if "reveal" in _] if len(sub) != 1: raise FileNotFoundError( "several version exists or noe of them:\n{0}".format(", ".join(sub))) sub = sub[0] master = os.path.join(unzip_to, sub) if not os.path.exists(master): raise FileNotFoundError("unable to find: " + master) new_master = os.path.join(unzip_to, "reveal.js") os.rename(master, new_master) if clean: # we clean some files res = explore_folder_iterfile(new_master) keep = [] for r in res: if os.path.isdir(r): continue if (".gitignore" in r or ".travis.yml" in r or "index.html" in r or ".appveyor.yml" in r or "requirement" in r or "README" in r or "CONTRIBUTING.md" in r): os.remove(r) elif "/test/" in r.replace("\\", "/"): os.remove(r) else: keep.append(r) # we clean the downloaded file os.remove(local) return keep
[docs]def download_requirejs(to=".", fLOG=print, location="http://requirejs.org/docs/download.html", clean=True): """ Downloads `require.js <http://requirejs.org/docs/download.html>`_ release. :param to: where to unzip the files :param fLOG: logging function :param location: location of require.js release :param clean: clean unnecessary files :return: list of downloaded and unzipped files .. versionchanged:: 1.7 *require.js* can be locally obtained if :epkg:`notebook` is installed. :githublink:`%|py|95` """ if location is None: from notebook import __file__ as local_location dirname = os.path.dirname(local_location) location = os.path.join( dirname, "static", "components", "requirejs", "require.js") if not os.path.exists(location): raise FileNotFoundError( "Unable to find requirejs in '{0}'".format(location)) shutil.copy(location, to) return [os.path.join(to, "require.js")] else: link = location try: page = read_url(link, encoding="utf8") except ReadUrlException: if fLOG: fLOG( "[download_requirejs] unable to read '{0}'".format(location)) return download_requirejs(to=to, fLOG=fLOG, location=None, clean=clean) reg = re.compile("href=\\\"(.*?minified/require[.]js)\\\"") alls = reg.findall(page) if len(alls) == 0: raise Exception( "unable to find a link on require.js file on page: " + page) filename = alls[0] try: local = download(filename, to, fLOG=fLOG) except ReadUrlException as e: # We implement a backup plan. new_filename = "http://www.xavierdupre.fr/enseignement/setup/require.js/2.3.6/require.js" try: local = download(new_filename, to, fLOG=fLOG) except ReadUrlException: raise ReadUrlException("Unable to download '{0}' or '{1}'".format( filename, new_filename)) from e fLOG("[download_requirejs] local file", local) return [local]