Source code for pymyinstall.installcustom.install_custom_putty
"""
Various functions to install `Putty <http://www.putty.org/>`_.
:githublink:`%|py|5`
"""
from __future__ import print_function
import sys
import re
import os
from .install_custom import download_page, download_file
if sys.version_info[0] == 2:
FileNotFoundError = Exception
[docs]def IsPuttyInstalled(dest_folder):
"""
check if Scite was already installed
:param dest_folder: where it was installed
:return: boolean
:githublink:`%|py|22`
"""
if sys.platform.startswith("win"):
file = os.path.join(dest_folder, "putty.exe")
return os.path.exists(file)
else:
raise NotImplementedError("not available on platform " + sys.platform)
[docs]def install_putty(dest_folder=".", fLOG=print, install=True, version=None):
"""
install `Putty <http://www.putty.org/>`_ (only on Windows)
:param dest_folder: where to download putty
:param fLOG: logging function
:param install: install (otherwise only download)
:param version: version to install (unused)
:return: temporary file
:githublink:`%|py|39`
"""
if version is not None:
raise ValueError("cannot specify a version")
if IsPuttyInstalled(dest_folder):
return os.path.join(
os.path.abspath(dest_folder), "putty.exe")
if not sys.platform.startswith("win"):
raise NotImplementedError(
"SciTE can only be installed on Windows at the moment")
url = "http://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html"
page = download_page(url)
reg = re.compile(
"<a href=\\\"(.*latest/w64/putty.exe)\\\"><code>putty.exe</code></a>")
find = reg.findall(page)
if len(find) != 1:
mes = "unable to find the file to download at {0}\nfound: {1}\npattern: {2}\nOUT:\n{3}".format(
url, len(find), reg.pattern, "\n".join(find))
raise Exception(mes)
# should be something like http://www.scintilla.org/wscite356.zip
newurl = find[0]
outfile = os.path.join(dest_folder, "putty.exe")
if not os.path.exists(outfile):
try:
download_file(newurl, outfile)
except Exception as e:
raise Exception("unable to download\n{0}\nto{1}".format(
newurl, outfile)) from e
if not os.path.exists(outfile):
raise FileNotFoundError(outfile)
return outfile