Compare commits

...
This repository has been archived on 2023-11-14. You can view files and clone it, but cannot push or open issues/pull-requests.

3 Commits

Author SHA1 Message Date
BrOakes 94cba09fbb it works just breaks with msi varients because comands are differnet from cli 2020-01-05 14:17:33 -05:00
Bradley Oakes 2e032f95a3 I big dum dum better do thing another way 2020-01-05 10:02:01 -05:00
BrOakes 37ad03d9d5 half working 2020-01-04 21:47:03 -05:00
3 changed files with 175 additions and 79 deletions

62
package-lock.json generated
View File

@ -5,9 +5,9 @@
"requires": true,
"dependencies": {
"ajv": {
"version": "6.5.5",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz",
"integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==",
"version": "6.10.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
"integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
"requires": {
"fast-deep-equal": "^2.0.1",
"fast-json-stable-stringify": "^2.0.0",
@ -39,9 +39,9 @@
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
},
"aws4": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz",
"integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A=="
},
"bcrypt-pbkdf": {
"version": "1.0.2",
@ -57,9 +57,9 @@
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"combined-stream": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
"integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
@ -115,9 +115,9 @@
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
},
"fast-json-stable-stringify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
"forever-agent": {
"version": "0.6.1",
@ -208,16 +208,16 @@
}
},
"mime-db": {
"version": "1.37.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
"integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
"version": "1.42.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz",
"integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ=="
},
"mime-types": {
"version": "2.1.21",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
"integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
"version": "2.1.25",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz",
"integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==",
"requires": {
"mime-db": "~1.37.0"
"mime-db": "1.42.0"
}
},
"minimist": {
@ -241,9 +241,9 @@
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"psl": {
"version": "1.1.29",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
"integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ=="
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz",
"integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ=="
},
"punycode": {
"version": "2.1.1",
@ -283,9 +283,9 @@
}
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
"integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
},
"safer-buffer": {
"version": "2.1.2",
@ -293,9 +293,9 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"sshpk": {
"version": "1.15.2",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
"integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==",
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
@ -346,9 +346,9 @@
}
},
"uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
"integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
},
"verror": {
"version": "1.10.0",

View File

@ -1,6 +1,6 @@
module.exports = {
download
};
// module.exports = {
// download
// };
const request = require('request');
const fs = require('fs');
@ -8,11 +8,35 @@ 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 = "-";
let version = "";
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");
}
let url = await getPythonDownloadLink();
if (version !== "") {
console.log(version);
await pyversion.getDownloadLink(version).then(value => {
url = value;
console.log(url);
});
}
// console.log(url);
// // let url = await getPythonDownloadLink();
let filename = path.parse(url).base;
try {
fs.mkdirSync('Python-Installer');
@ -74,38 +98,4 @@ async function download() {
}
}
}
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;
resolve(url);
});
});
}
download('2.7.14');

View File

@ -1,13 +1,67 @@
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() {
async function validateVersion(v) {
let availVer = await versions;
return availVer.includes(v);
}
new Promise(resolve => {
async function getDownloadLink(v) {
let extArr = [];
switch (os.platform())
{
case 'darwin':
// extArr = ['.exe','.msi']
break;
case 'linux':
break;
case 'win32':
extArr = ['.exe','.msi']
break;
default:
break;
}
let available_download_links = await new Promise(resolve => {
request({
uri: "https://www.python.org/ftp/python/" + v.toString() + "/",
}, function (error, response, body) {
// const re = /"\n"/g;
tempArr = body.split(/\r?\n/);
let availLinks = [];
tempArr.forEach(function (item) {
if (item.includes('<a href="py')) {
let substr_start = item.indexOf('">', 0) + 2;
let substr_end = item.indexOf('</a>', substr_start);
let substr = item.substring(substr_start, substr_end);
availLinks.push(substr);
}
})
// console.log(availLinks);
resolve(availLinks);
})
});
let py_executable_link = await new Promise(resolve => {
extArr.forEach(function (item) {
let filename = "python-" + v.toString() + item.toString();
if (available_download_links.includes(filename)) {
resolve(filename);
}
})
})
return "https://www.python.org/ftp/python/" + v.toString() + "/" + py_executable_link.toString();
}
let versions = new Promise(resolve => {
request({
uri: "https://www.python.org/ftp/python/",
}, function (error, response, body) {
@ -16,7 +70,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('</a>', 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
}