auspice
Version:
Web app for visualizing pathogen evolution
64 lines (56 loc) • 1.98 kB
JavaScript
const utils = require("../utils");
const fs = require('fs');
const { promisify } = require('util');
const readdir = promisify(fs.readdir);
const getAvailableDatasets = async (localDataPath) => {
let datasets = [];
try {
/* currently only for version 1.0 JSONs... */
datasets = await readdir(localDataPath);
datasets = datasets
.filter((file) => file.endsWith("_tree.json"))
.map((file) => file
.replace("_tree.json", "")
.split("_")
.join("/")
)
.map((filepath) => ({request: filepath}));
} catch (err) {
utils.warn(`Couldn't collect available dataset files (path searched: ${localDataPath})`);
utils.verbose(err);
}
return datasets;
};
const getAvailableNarratives = async (localNarrativesPath) => {
let narratives = [];
try {
narratives = await readdir(localNarrativesPath);
narratives = narratives
.filter((file) => file.endsWith(".md") && file!=="README.md")
.map((file) => file.replace(".md", ""))
.map((file) => file.split("_").join("/"))
.map((filepath) => `narratives/${filepath}`)
.map((filepath) => ({request: filepath}));
} catch (err) {
utils.warn(`Couldn't collect available narratives (path searched: ${localNarrativesPath})`);
utils.verbose(err);
}
return narratives;
};
const setUpGetAvailableHandler = ({datasetsPath, narrativesPath}) => {
/* return Auspice's default handler for "/charon/getAvailable" requests.
* Remember that auspice itself only serves local files.
* Servers often use their own handler instead of this.
*/
return async (req, res) => {
utils.verbose("Returning locally available datasets & narratives");
const datasets = await getAvailableDatasets(datasetsPath);
const narratives = await getAvailableNarratives(narrativesPath);
res.json({datasets, narratives});
};
};
module.exports = {
setUpGetAvailableHandler,
getAvailableDatasets,
getAvailableNarratives
};