Source code for pymyinstall.installcustom.install_custom_graphviz
"""
Various functions to install some applications such as `7z <http://www.7-zip.org/>`_.
:githublink:`%|py|5`
"""
from __future__ import print_function
import sys
import re
import os
from ..installhelper.install_cmd_helper import run_cmd, unzip_files
from .install_custom import download_page, download_file
[docs]def install_graphviz(temp_folder=".", fLOG=print, install=True,
force_download=False, version=None, source=None):
"""
Install `Graphviz <http://www.graphviz.org/>`_.
It does not do it a second time if it is already installed.
:param temp_folder: where to download the setup
:param fLOG: logging function
:param install: install (otherwise only download)
:param force_download: force the downloading of Graphviz
:param version: specify a version (unused)
:param source: change the source
:return: temporary file
:githublink:`%|py|27`
"""
if version is not None:
raise ValueError("cannot specify a version")
if sys.platform.startswith("win"):
if source == "2":
url = "http://www.xavierdupre.fr/enseignement/setup/"
full = "graphviz-2.38.msi"
url += full
outfile = os.path.join(temp_folder, full)
if not os.path.exists(temp_folder):
os.makedirs(temp_folder)
elif source == "zip":
url = "http://www.xavierdupre.fr/enseignement/setup/"
full = "Graphviz.zip"
url += full
outfile = os.path.join(temp_folder, full)
if not os.path.exists(temp_folder):
os.makedirs(temp_folder)
else:
link = "http://www.graphviz.org/Download_windows.php"
repl = "http://www.graphviz.org"
page = download_page(link)
reg = re.compile("href=\\\"(.*?[.]msi)\\\"")
alls = reg.findall(page)
if len(alls) == 0:
raise Exception(
"unable to find a link on a .msi file on page: " +
page)
url = repl + alls[0]
full = url.split("/")[-1]
outfile = os.path.join(temp_folder, full)
fLOG("[pymy] download ", url)
local = download_file(url, outfile)
if install:
if source == "zip":
fLOG("[pymy] dest ", os.path.abspath(temp_folder))
unzip_files(local, temp_folder, fLOG=fLOG)
else:
run_cmd("msiexec /i " + local, fLOG=fLOG, wait=True)
return local
else:
raise NotImplementedError("not available on platform " + sys.platform)