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

128 lines
2.8 KiB
JavaScript
Raw Normal View History

2020-01-04 21:47:03 -05:00
// module.exports = { THIS IS AT THE BOTTOM SO NO ERROREROS WHILE TESTING
// versions
// }
2018-10-30 21:42:14 -04:00
const request = require('request');
2020-01-04 21:47:03 -05:00
const os = require('os');
2018-10-30 21:42:14 -04:00
2018-11-21 20:42:39 -05:00
// let matches = [];
2020-01-04 21:47:03 -05:00
async function validateVersion(v) {
let availVer = await versions;
return availVer.includes(v);
}
async function getDownloadLink(v) {
let extArr = [];
2020-01-04 21:47:03 -05:00
switch (os.platform())
{
case 'darwin':
// extArr = ['.exe','.msi']
2020-01-04 21:47:03 -05:00
break;
case 'linux':
break;
case 'win32':
extArr = ['.exe','.msi']
break;
2020-01-04 21:47:03 -05:00
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();
2020-01-04 21:47:03 -05:00
}
let versions = new Promise(resolve => {
2018-10-30 21:42:14 -04:00
request({
uri: "https://www.python.org/ftp/python/",
}, function (error, response, body) {
const re = /"[0-9]{1,}\.[0-9]{1,}(\.[0-9]{1,})*\/"/g;
2018-11-21 20:42:39 -05:00
matches = body.match(re)
2018-10-30 21:42:14 -04:00
matches = matches.map((value) => {
2018-11-21 20:42:39 -05:00
return value.slice(1, -2);
2018-10-30 21:42:14 -04:00
});
2020-01-04 21:47:03 -05:00
2018-11-21 20:42:39 -05:00
resolve(matches);
2018-10-30 21:42:14 -04:00
});
2020-01-04 21:47:03 -05:00
})
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);
// })
2020-01-04 21:47:03 -05:00
// versions.then(value => {
// let i = 0;
// for (i = 0; i < value.length; i++){
// console.log(value[i]);
// }
// })
module.exports = {
versions,
current,
validateVersion,
getDownloadLink
}