From 37ad03d9d5183e49b1cc3bd6f915ca49a7a9c910 Mon Sep 17 00:00:00 2001 From: BrOakes Date: Sat, 4 Jan 2020 21:47:03 -0500 Subject: [PATCH] half working --- util/downloadpython.js | 176 ++++++++++++++++++-------------------- util/getpythonversions.js | 86 +++++++++++++++++-- 2 files changed, 159 insertions(+), 103 deletions(-) diff --git a/util/downloadpython.js b/util/downloadpython.js index 85ef1b2..560cd91 100644 --- a/util/downloadpython.js +++ b/util/downloadpython.js @@ -1,6 +1,6 @@ -module.exports = { - download -}; +// module.exports = { +// download +// }; const request = require('request'); const fs = require('fs'); @@ -8,104 +8,90 @@ const os = require('os'); const {execSync} = require('child_process'); const path = require('path'); const copydir = require('copy-dir'); +const pyversion = require('./getpythonversions.js'); -async function download() { +async function download(ver) { - - let url = await getPythonDownloadLink(); - let filename = path.parse(url).base; - try { - fs.mkdirSync('Python-Installer'); - } catch(e) {'';} - try { - fs.mkdirSync('Python'); - } catch(e) {'';} - try { - fs.mkdirSync('Temp-Python'); - } catch(e) {'';} - try { - fs.writeFileSync('.installerLocation', filename); - } catch(e) {'';} - // let installSettings = fs.readFileSync('unattend.xml'); + let url = ""; + let version = ""; - let out_file = `Python-Installer/${filename}` - - await new Promise(resolve => { - request({ - uri: url, - encoding: null - }, function (error, response, body) { - fs.writeFileSync(out_file, body, {}); - resolve(); - }); - }); - - console.log('Download Complete!'); - - switch (os.platform()) - { - case 'win32': { - try { - let installerPath = path.join(__dirname, '..', 'Python-Installer/', filename); - let tempPath = path.join(__dirname, '..', 'Temp-Python/'); - let targetPath = path.join(__dirname, '..', 'Python/'); - execSync(`${installerPath} /passive DefaultJustForMeTargetDir=${tempPath}`, { - stdio: "inherit" - }); - - console.log("Creating Portable Python Directory"); - - copydir.sync(tempPath, targetPath); - console.log("Portable Directory Created!"); - - console.log("Uninstalling Unnecessary Python Files"); - - execSync(`${installerPath} /passive /uninstall`, { - stdio: 'inherit' - }); - - fs.rmdirSync(tempPath); - - console.log("PordaPy Installed!"); - } catch (err) { - console.log(err); - } - break; - } + if (ver === undefined) { + version = await pyversion.current; + console.log("Python: " + version.toString() + " Selected"); + } else if (await pyversion.validateVersion(ver)) { + version = ver; + console.log("Python: " + version.toString() + " Selected"); + } else { + console.log("Version of python not available"); } -} -function getPythonDownloadLink() { - return new Promise(resolve => { - request({ - uri: "https://www.python.org/downloads/", - }, function (error, response, body) { - let current_os = ''; - switch (os.platform()) - { - case 'darwin': - current_os = "download-os-mac-osx"; - break; - case 'linux': - current_os = "download-os-source"; - break; - case 'win32': - current_os = "download-os-windows"; - break; - default: - current_os = "download-os-source"; - break; - } - - let current_download_start = body.indexOf("href=",body.indexOf(current_os)) + 6; - let current_download_end = body.indexOf('">', current_download_start); - let current_download = body.substring(current_download_start, current_download_end); - let url = current_download; + if (version !== "") { + console.log(await pyversion.getDownloadLink(version)); + } - resolve(url); - }); - }); + console.log(url); + // let url = await getPythonDownloadLink(); + // let filename = path.parse(url).base; + // try { + // fs.mkdirSync('Python-Installer'); + // } catch(e) {'';} + // try { + // fs.mkdirSync('Python'); + // } catch(e) {'';} + // try { + // fs.mkdirSync('Temp-Python'); + // } catch(e) {'';} + // try { + // fs.writeFileSync('.installerLocation', filename); + // } catch(e) {'';} + // // let installSettings = fs.readFileSync('unattend.xml'); -} \ No newline at end of file + // let out_file = `Python-Installer/${filename}` + + // await new Promise(resolve => { + // request({ + // uri: url, + // encoding: null + // }, function (error, response, body) { + // fs.writeFileSync(out_file, body, {}); + // resolve(); + // }); + // }); + + // console.log('Download Complete!'); + + // switch (os.platform()) + // { + // case 'win32': { + // try { + // let installerPath = path.join(__dirname, '..', 'Python-Installer/', filename); + // let tempPath = path.join(__dirname, '..', 'Temp-Python/'); + // let targetPath = path.join(__dirname, '..', 'Python/'); + // execSync(`${installerPath} /passive DefaultJustForMeTargetDir=${tempPath}`, { + // stdio: "inherit" + // }); + + // console.log("Creating Portable Python Directory"); + + // copydir.sync(tempPath, targetPath); + // console.log("Portable Directory Created!"); + + // console.log("Uninstalling Unnecessary Python Files"); + + // execSync(`${installerPath} /passive /uninstall`, { + // stdio: 'inherit' + // }); + + // fs.rmdirSync(tempPath); + + // console.log("PordaPy Installed!"); + // } catch (err) { + // console.log(err); + // } + // break; + // } + // } +} +download('2.7.14'); diff --git a/util/getpythonversions.js b/util/getpythonversions.js index baee48b..cd4aa71 100644 --- a/util/getpythonversions.js +++ b/util/getpythonversions.js @@ -1,13 +1,31 @@ -module.exports = { - versions -} +// module.exports = { THIS IS AT THE BOTTOM SO NO ERROREROS WHILE TESTING +// versions +// } const request = require('request'); +const os = require('os'); // let matches = []; -let versions = function() { - - new Promise(resolve => { +async function validateVersion(v) { + let availVer = await versions; + return availVer.includes(v); +} + +async function getDownloadLink(v) { + switch (os.platform()) + { + case 'darwin': + break; + case 'linux': + break; + case 'win32': + return 'https://www.python.org/ftp/python/' + v.toString() + '/python-' + v.toString() + '.exe'; + default: + break; + } +} + +let versions = new Promise(resolve => { request({ uri: "https://www.python.org/ftp/python/", }, function (error, response, body) { @@ -16,7 +34,59 @@ let versions = function() { matches = matches.map((value) => { return value.slice(1, -2); }); + resolve(matches); }); - }) -} +}) + +let current = new Promise(resolve => { + request({ + uri: "https://www.python.org/downloads/", + }, function (error, response, body) { + let current_os = ''; + switch (os.platform()) + { + case 'darwin': + current_os = "download-os-mac-osx"; + break; + case 'linux': + current_os = "download-os-source"; + break; + case 'win32': + current_os = "download-os-windows"; + break; + default: + current_os = "download-os-source"; + break; + } + + let current_download_start = body.indexOf("Download Python ",body.indexOf(current_os)) + 16; + let current_download_end = body.indexOf('', current_download_start); + let current_download = body.substring(current_download_start, current_download_end); + + let ver = current_download; + + resolve(ver); + }); + }); + +current.then(value => { + console.log(value); +}) + + +// versions.then(value => { + +// let i = 0; +// for (i = 0; i < value.length; i++){ +// console.log(value[i]); +// } +// }) + + +module.exports = { + versions, + current, + validateVersion, + getDownloadLink +} \ No newline at end of file