Compare commits
3 Commits
master
...
downloader
| Author | SHA1 | Date |
|---|---|---|
|
|
94cba09fbb | |
|
|
2e032f95a3 | |
|
|
37ad03d9d5 |
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
Reference in New Issue