73 lines
2.0 KiB
JavaScript
73 lines
2.0 KiB
JavaScript
import express from "express";
|
|
import {Liquid} from 'liquidjs';
|
|
import path from "path";
|
|
|
|
const liquidEngine = new Liquid({root: path.resolve(__dirname, 'views/'), jsTruthy: true});
|
|
|
|
const app = express();
|
|
|
|
app.use(express.json()); // to support JSON-encoded bodies
|
|
app.use(express.urlencoded()); // to support URL-encoded bodies
|
|
app.engine('liquid', liquidEngine.express());
|
|
app.set('views', [path.join(__dirname, 'views')]);
|
|
app.set('view engine', 'liquid');
|
|
|
|
|
|
app.use('/static', express.static('static'));
|
|
|
|
app.get('/', (req, res) => {
|
|
res.render('index');
|
|
})
|
|
|
|
|
|
function extractInfoFromPythonDepString(depstring) {
|
|
const info = {
|
|
name: "",
|
|
version_operator: "",
|
|
version: "",
|
|
}
|
|
|
|
const parts = depstring.split(';');
|
|
|
|
const namever = parts[0];
|
|
// https://stackoverflow.com/questions/24470567/what-are-the-requirements-for-naming-python-modules
|
|
const match = namever.match(/^(?<name>[a-zA-Z_][a-zA-Z_0-9]*)(?<operator>.=)(?<version>[0-9.])/);
|
|
if(match !== null && match.groups !== undefined) {
|
|
info.name = match.groups['name'];
|
|
info.operator = match.groups['operator'];
|
|
info.version = match.groups['version'];
|
|
}
|
|
|
|
|
|
|
|
return info;
|
|
}
|
|
|
|
app.post('/api/dependency', async (req, res) => {
|
|
const packagename = req.body.package;
|
|
console.log(packagename)
|
|
|
|
const pypires = await fetch(`https://pypi.org/pypi/${packagename}/json`);
|
|
const json = await pypires.json();
|
|
|
|
const name = json.info.name;
|
|
const summary = json.info.summary;
|
|
|
|
const deps = json.info.requires_dist.map( e => extractInfoFromPythonDepString(e) );
|
|
|
|
const versions = json.releases;
|
|
const latestVersionNumber = Object.entries(versions).sort( ([k1, v1], [k2, v2]) => k2 - v2 )[0];
|
|
|
|
const latestVersion = versions[latestVersionNumber];
|
|
|
|
const size = latestVersion.sort((a, b) => b.size - a.size )[0].size;
|
|
|
|
res.render('dependency', {
|
|
name: name,
|
|
summary: summary,
|
|
weight: size,
|
|
dependencies: deps
|
|
})
|
|
});
|
|
|
|
app.listen(8080) |