molstar
Version:
A comprehensive macromolecular library.
116 lines • 4.81 kB
JavaScript
/**
* Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
import { __awaiter, __generator } from "tslib";
import fetch from 'node-fetch';
import * as fs from 'fs';
import * as path from 'path';
import * as argparse from 'argparse';
import { makeDir } from '../../../mol-util/make-dir';
import { now } from '../../../mol-util/now';
import { PerformanceMonitor } from '../../../mol-util/performance-monitor';
var cmdParser = new argparse.ArgumentParser({
add_help: true,
description: 'Download JSON data from PDBe API'
});
cmdParser.add_argument('--in', { help: 'Input folder', required: true });
cmdParser.add_argument('--out', { help: 'Output folder', required: true });
var cmdArgs = cmdParser.parse_args();
function getPDBid(name) {
var idx = name.indexOf('_');
if (idx < 0)
idx = name.indexOf('.');
return name.substr(0, idx).toLowerCase();
}
function findEntries() {
var files = fs.readdirSync(cmdArgs.in);
var cifTest = /\.cif$/;
var groups = new Map();
var keys = [];
for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
var f = files_1[_i];
if (!cifTest.test(f))
continue;
var id = getPDBid(f);
var groupId = "" + id[1] + id[2];
if (groups.has(groupId))
groups.get(groupId).push(id);
else {
keys.push(groupId);
groups.set(groupId, [id]);
}
}
var ret = [];
for (var _a = 0, keys_1 = keys; _a < keys_1.length; _a++) {
var key = keys_1[_a];
ret.push({ key: key, entries: groups.get(key) });
}
return ret;
}
function process() {
return __awaiter(this, void 0, void 0, function () {
var entries, started, prog, _i, entries_1, e, ts, data, _a, _b, ee, query, _c, _d, e_1, time;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
entries = findEntries();
makeDir(cmdArgs.out);
started = now();
prog = 0;
_i = 0, entries_1 = entries;
_e.label = 1;
case 1:
if (!(_i < entries_1.length)) return [3 /*break*/, 12];
e = entries_1[_i];
ts = now();
console.log(prog + "/" + entries.length + " " + e.entries.length + " entries.");
data = Object.create(null);
_a = 0, _b = e.entries;
_e.label = 2;
case 2:
if (!(_a < _b.length)) return [3 /*break*/, 10];
ee = _b[_a];
return [4 /*yield*/, fetch("https://www.ebi.ac.uk/pdbe/api/validation/residuewise_outlier_summary/entry/" + ee)];
case 3:
query = _e.sent();
_e.label = 4;
case 4:
_e.trys.push([4, 8, , 9]);
if (!(query.status === 200)) return [3 /*break*/, 6];
_c = data;
_d = ee;
return [4 /*yield*/, query.json()];
case 5:
_c[_d] = (_e.sent())[ee] || {};
return [3 /*break*/, 7];
case 6:
console.error(ee, query.status);
_e.label = 7;
case 7: return [3 /*break*/, 9];
case 8:
e_1 = _e.sent();
console.error(ee, '' + e_1);
return [3 /*break*/, 9];
case 9:
_a++;
return [3 /*break*/, 2];
case 10:
// const query = await fetch(`https://www.ebi.ac.uk/pdbe/api/validation/residuewise_outlier_summary/entry`, { method: 'POST', body });
// console.log(query.status);
// const data = await query.text();
fs.writeFileSync(path.join(cmdArgs.out, e.key + '.json'), JSON.stringify(data));
time = now() - started;
console.log(++prog + "/" + entries.length + " in " + PerformanceMonitor.format(time) + " (last " + PerformanceMonitor.format(now() - ts) + ", avg " + PerformanceMonitor.format(time / prog) + ")");
_e.label = 11;
case 11:
_i++;
return [3 /*break*/, 1];
case 12: return [2 /*return*/];
}
});
});
}
process();
//# sourceMappingURL=fetch-props-pdbe.js.map