Skip to content

Commit

Permalink
Deploying to gh-pages from @ beec196 🚀
Browse files Browse the repository at this point in the history
  • Loading branch information
nleanba committed Feb 12, 2024
1 parent f25b00b commit e284577
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 32 deletions.
69 changes: 49 additions & 20 deletions SynonymGroup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -254,10 +254,11 @@ export class SparqlEndpoint {
}
async getSparqlResultSet(
query: string,
fetchOptions: { headers?: Record<string, string> } = {},
fetchOptions: RequestInit = {},
) {
fetchOptions.headers = fetchOptions.headers || {};
fetchOptions.headers["Accept"] = "application/sparql-results+json";
(fetchOptions.headers as Record<string, string>)["Accept"] =
"application/sparql-results+json";
let retryCount = 0;
// deno-lint-ignore no-explicit-any
const sendRequest = async (): Promise<any> => {
Expand All @@ -271,15 +272,16 @@ export class SparqlEndpoint {
}
return await response.json();
} catch (error) {
if (
if (error instanceof DOMException) {
// i.e. signal is aborted
throw error;
} else if (
error instanceof Error &&
retryCount < 5 /* && error.message.endsWith("502") */
) {
++retryCount;
console.warn(
`!! Fetch Error. Retrying in ${
retryCount * 50
}ms (${retryCount})`,
`!! Fetch Error. Retrying in ${retryCount * 50}ms (${retryCount})`,
);
await sleep(retryCount * 50);
return await sendRequest();
Expand Down Expand Up @@ -307,6 +309,8 @@ export default class SynonymGroup implements AsyncIterable<JustifiedSynonym> {
isFinished = false;
isAborted = false;

private controller = new AbortController();

constructor(
sparqlEndpoint: SparqlEndpoint,
taxonName: string,
Expand All @@ -324,10 +328,13 @@ export default class SynonymGroup implements AsyncIterable<JustifiedSynonym> {
this.monitor.dispatchEvent(new CustomEvent("updated"));
};

const fetchInit = { signal: this.controller.signal };

const build = async () => {
function getStartingPoints(
taxonName: string,
): Promise<JustifiedSynonym[]> {
if (fetchInit.signal.aborted) return new Promise((r) => r([]));
const [genus, species, subspecies] = taxonName.split(" ");
// subspecies could also be variety
// ignoreRank has no effect when there is a 'subspecies', as this is assumed to be the lowest rank & should thus not be able to return results in another rank
Expand All @@ -346,7 +353,8 @@ export default class SynonymGroup implements AsyncIterable<JustifiedSynonym> {
a <http://filteredpush.org/ontologies/oa/dwcFP#TaxonConcept>.
}`;
// console.info('%cREQ', 'background: red; font-weight: bold; color: white;', `getStartingPoints('${taxonName}')`)
return sparqlEndpoint.getSparqlResultSet(query)
if (fetchInit.signal.aborted) return new Promise((r) => r([]));
return sparqlEndpoint.getSparqlResultSet(query, fetchInit)
.then((json: SparqlJson) =>
json.results.bindings.map((t) => {
return {
Expand All @@ -364,8 +372,10 @@ export default class SynonymGroup implements AsyncIterable<JustifiedSynonym> {
},
loading: true,
};
})
);
}), (error) => {
console.warn("SPARQL Error: " + error);
return [];
});
}

const synonymFinders = [
Expand All @@ -385,7 +395,8 @@ export default class SynonymGroup implements AsyncIterable<JustifiedSynonym> {
return Promise.resolve([]);
}
expandedTaxonNames.add(taxon.taxonNameUri);
return sparqlEndpoint.getSparqlResultSet(query).then((
if (fetchInit.signal.aborted) return new Promise((r) => r([]));
return sparqlEndpoint.getSparqlResultSet(query, fetchInit).then((
json: SparqlJson,
) =>
json.results.bindings.filter((t) => t.tc).map((t) => {
Expand All @@ -404,8 +415,10 @@ export default class SynonymGroup implements AsyncIterable<JustifiedSynonym> {
},
loading: true,
};
})
);
}), (error) => {
console.warn("SPARQL Error: " + error);
return [];
});
},
/** Get the Synonyms deprecating {taxon} */
(taxon: JustifiedSynonym): Promise<JustifiedSynonym[]> => {
Expand All @@ -425,7 +438,9 @@ export default class SynonymGroup implements AsyncIterable<JustifiedSynonym> {
}
GROUP BY ?tc ?tn ?treat ?date`;
// console.info('%cREQ', 'background: red; font-weight: bold; color: white;', `synonymFinder[1]( ${taxon.taxonConceptUri} )`)
return sparqlEndpoint.getSparqlResultSet(query).then((

if (fetchInit.signal.aborted) return new Promise((r) => r([]));
return sparqlEndpoint.getSparqlResultSet(query, fetchInit).then((
json: SparqlJson,
) =>
json.results.bindings.filter((t) => t.tc).map((t) => {
Expand All @@ -450,8 +465,10 @@ export default class SynonymGroup implements AsyncIterable<JustifiedSynonym> {
},
loading: true,
};
})
);
}), (error) => {
console.warn("SPARQL Error: " + error);
return [];
});
},
/** Get the Synonyms deprecated by {taxon} */
(taxon: JustifiedSynonym): Promise<JustifiedSynonym[]> => {
Expand All @@ -471,7 +488,8 @@ export default class SynonymGroup implements AsyncIterable<JustifiedSynonym> {
}
GROUP BY ?tc ?tn ?treat ?date`;
// console.info('%cREQ', 'background: red; font-weight: bold; color: white;', `synonymFinder[2]( ${taxon.taxonConceptUri} )`)
return sparqlEndpoint.getSparqlResultSet(query).then((
if (fetchInit.signal.aborted) return new Promise((r) => r([]));
return sparqlEndpoint.getSparqlResultSet(query, fetchInit).then((
json: SparqlJson,
) =>
json.results.bindings.filter((t) => t.tc).map((t) => {
Expand All @@ -496,8 +514,10 @@ export default class SynonymGroup implements AsyncIterable<JustifiedSynonym> {
},
loading: true,
};
})
);
}), (error) => {
console.warn("SPARQL Error: " + error);
return [];
});
},
];

Expand Down Expand Up @@ -531,7 +551,9 @@ export default class SynonymGroup implements AsyncIterable<JustifiedSynonym> {
}
GROUP BY ?treat ?how ?date`;
// console.info('%cREQ', 'background: red; font-weight: bold; color: white;', `getTreatments('${uri}')`)
return sparqlEndpoint.getSparqlResultSet(query).then(

if (fetchInit.signal.aborted) return new Promise((r) => r());
return sparqlEndpoint.getSparqlResultSet(query, fetchInit).then(
(json: SparqlJson) => {
json.results.bindings.forEach((t) => {
if (!t.treat) return;
Expand All @@ -554,6 +576,7 @@ export default class SynonymGroup implements AsyncIterable<JustifiedSynonym> {
}
});
},
(error) => console.warn("SPARQL Error: " + error),
);
}

Expand Down Expand Up @@ -583,7 +606,8 @@ export default class SynonymGroup implements AsyncIterable<JustifiedSynonym> {
OPTIONAL { ?mc trt:gbifSpecimenId ?gbifSpecimenId . }
OPTIONAL { ?mc trt:httpUri ?httpUri . }
}`;
return sparqlEndpoint.getSparqlResultSet(query).then(
if (fetchInit.signal.aborted) return new Promise((r) => r([]));
return sparqlEndpoint.getSparqlResultSet(query, fetchInit).then(
(json: SparqlJson) => {
const resultArray: MaterialCitation[] = [];
json.results.bindings.forEach((t) => {
Expand Down Expand Up @@ -612,6 +636,10 @@ export default class SynonymGroup implements AsyncIterable<JustifiedSynonym> {
});
return resultArray;
},
(error) => {
console.warn("SPARQL Error: " + error);
return [];
},
);
}

Expand Down Expand Up @@ -681,6 +709,7 @@ export default class SynonymGroup implements AsyncIterable<JustifiedSynonym> {

abort() {
this.isAborted = true;
this.controller.abort();
}

[Symbol.asyncIterator]() {
Expand Down
53 changes: 41 additions & 12 deletions synonym-group.js
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,9 @@ class SparqlEndpoint {
}
return await response.json();
} catch (error) {
if (error instanceof Error && retryCount < 5) {
if (error instanceof DOMException) {
throw error;
} else if (error instanceof Error && retryCount < 5) {
++retryCount;
console.warn(`!! Fetch Error. Retrying in ${retryCount * 50}ms (${retryCount})`);
await sleep(retryCount * 50);
Expand All @@ -208,6 +210,7 @@ class SynonymGroup {
monitor = new EventTarget();
isFinished = false;
isAborted = false;
controller = new AbortController();
constructor(sparqlEndpoint, taxonName, ignoreRank = false){
const justifiedSynonyms = new Map();
const expandedTaxonNames = new Set();
Expand All @@ -217,8 +220,12 @@ class SynonymGroup {
}
this.monitor.dispatchEvent(new CustomEvent("updated"));
};
const fetchInit = {
signal: this.controller.signal
};
const build = async ()=>{
function getStartingPoints(taxonName) {
if (fetchInit.signal.aborted) return new Promise((r)=>r([]));
const [genus, species, subspecies] = taxonName.split(" ");
const query = `PREFIX dwc: <http://rs.tdwg.org/dwc/terms/>
PREFIX treat: <http://plazi.org/vocab/treatment#>
Expand All @@ -230,7 +237,8 @@ class SynonymGroup {
${ignoreRank || !!subspecies ? "" : `dwc:rank "${species ? "species" : "genus"}";`}
a <http://filteredpush.org/ontologies/oa/dwcFP#TaxonConcept>.
}`;
return sparqlEndpoint.getSparqlResultSet(query).then((json)=>json.results.bindings.map((t)=>{
if (fetchInit.signal.aborted) return new Promise((r)=>r([]));
return sparqlEndpoint.getSparqlResultSet(query, fetchInit).then((json)=>json.results.bindings.map((t)=>{
return {
taxonConceptUri: t.tc.value,
taxonNameUri: t.tn.value,
Expand All @@ -244,7 +252,10 @@ class SynonymGroup {
},
loading: true
};
}));
}), (error)=>{
console.warn("SPARQL Error: " + error);
return [];
});
}
const synonymFinders = [
(taxon)=>{
Expand All @@ -260,7 +271,8 @@ class SynonymGroup {
return Promise.resolve([]);
}
expandedTaxonNames.add(taxon.taxonNameUri);
return sparqlEndpoint.getSparqlResultSet(query).then((json)=>json.results.bindings.filter((t)=>t.tc).map((t)=>{
if (fetchInit.signal.aborted) return new Promise((r)=>r([]));
return sparqlEndpoint.getSparqlResultSet(query, fetchInit).then((json)=>json.results.bindings.filter((t)=>t.tc).map((t)=>{
return {
taxonConceptUri: t.tc.value,
taxonNameUri: taxon.taxonNameUri,
Expand All @@ -277,7 +289,10 @@ class SynonymGroup {
},
loading: true
};
}));
}), (error)=>{
console.warn("SPARQL Error: " + error);
return [];
});
},
(taxon)=>{
const query = `PREFIX dc: <http://purl.org/dc/elements/1.1/>
Expand All @@ -295,7 +310,8 @@ class SynonymGroup {
}
}
GROUP BY ?tc ?tn ?treat ?date`;
return sparqlEndpoint.getSparqlResultSet(query).then((json)=>json.results.bindings.filter((t)=>t.tc).map((t)=>{
if (fetchInit.signal.aborted) return new Promise((r)=>r([]));
return sparqlEndpoint.getSparqlResultSet(query, fetchInit).then((json)=>json.results.bindings.filter((t)=>t.tc).map((t)=>{
return {
taxonConceptUri: t.tc.value,
taxonNameUri: t.tn.value,
Expand All @@ -318,7 +334,10 @@ class SynonymGroup {
},
loading: true
};
}));
}), (error)=>{
console.warn("SPARQL Error: " + error);
return [];
});
},
(taxon)=>{
const query = `PREFIX dc: <http://purl.org/dc/elements/1.1/>
Expand All @@ -336,7 +355,8 @@ class SynonymGroup {
}
}
GROUP BY ?tc ?tn ?treat ?date`;
return sparqlEndpoint.getSparqlResultSet(query).then((json)=>json.results.bindings.filter((t)=>t.tc).map((t)=>{
if (fetchInit.signal.aborted) return new Promise((r)=>r([]));
return sparqlEndpoint.getSparqlResultSet(query, fetchInit).then((json)=>json.results.bindings.filter((t)=>t.tc).map((t)=>{
return {
taxonConceptUri: t.tc.value,
taxonNameUri: t.tn.value,
Expand All @@ -359,7 +379,10 @@ class SynonymGroup {
},
loading: true
};
}));
}), (error)=>{
console.warn("SPARQL Error: " + error);
return [];
});
}
];
async function lookUpRound(taxon) {
Expand All @@ -383,7 +406,8 @@ class SynonymGroup {
}
}
GROUP BY ?treat ?how ?date`;
return sparqlEndpoint.getSparqlResultSet(query).then((json)=>{
if (fetchInit.signal.aborted) return new Promise((r)=>r());
return sparqlEndpoint.getSparqlResultSet(query, fetchInit).then((json)=>{
json.results.bindings.forEach((t)=>{
if (!t.treat) return;
const treatment = {
Expand All @@ -404,7 +428,7 @@ class SynonymGroup {
break;
}
});
});
}, (error)=>console.warn("SPARQL Error: " + error));
}
function getMaterialCitations(uri) {
const query = `
Expand Down Expand Up @@ -432,7 +456,8 @@ class SynonymGroup {
OPTIONAL { ?mc trt:gbifSpecimenId ?gbifSpecimenId . }
OPTIONAL { ?mc trt:httpUri ?httpUri . }
}`;
return sparqlEndpoint.getSparqlResultSet(query).then((json)=>{
if (fetchInit.signal.aborted) return new Promise((r)=>r([]));
return sparqlEndpoint.getSparqlResultSet(query, fetchInit).then((json)=>{
const resultArray = [];
json.results.bindings.forEach((t)=>{
if (!t.mc || !t.catalogNumber) return;
Expand All @@ -459,6 +484,9 @@ class SynonymGroup {
resultArray.push(result);
});
return resultArray;
}, (error)=>{
console.warn("SPARQL Error: " + error);
return [];
});
}
const finish = (justsyn)=>{
Expand Down Expand Up @@ -509,6 +537,7 @@ class SynonymGroup {
}
abort() {
this.isAborted = true;
this.controller.abort();
}
[Symbol.asyncIterator]() {
let returnedSoFar = 0;
Expand Down

0 comments on commit e284577

Please sign in to comment.