Skip to content

Commit

Permalink
Revert parseVariantDecorator and use jsonifyVariant instead
Browse files Browse the repository at this point in the history
  • Loading branch information
mathieulemieux committed Jan 3, 2025
1 parent e23f2d0 commit b70cc9a
Show file tree
Hide file tree
Showing 12 changed files with 45 additions and 117 deletions.
8 changes: 2 additions & 6 deletions src/PMC4232638/index.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
const readXlsxFile = require('read-excel-file/node');

const { parseVariant: parseVariantOriginal } = require('@bcgsc-pori/graphkb-parser');
const { jsonifyVariant, parseVariant } = require('@bcgsc-pori/graphkb-parser');
const { logger } = require('../logging');
const { rid } = require('../graphkb');
const _pubmed = require('../entrez/pubmed');
const _entrezGene = require('../entrez/gene');
const { PMC4232638: SOURCE_DEFN } = require('../sources');

const { parseVariantDecorator } = require('../util');

const parseVariant = parseVariantDecorator(parseVariantOriginal);

const TP53_COLS = {
DOM: 'Functional categories for TP53 - Dominant negative activity',
GOF: 'Functional categories for TP53 - Gain of function',
Expand Down Expand Up @@ -137,7 +133,7 @@ const uploadFile = async ({ conn, filename }) => {
logger.info(`loading: ${row.Gene}:${row['Amino acid change']}`);

try {
const parsed = parseVariant(`p.${row['Amino acid change']}`, false).toJSON();
const parsed = jsonifyVariant(parseVariant(`p.${row['Amino acid change']}`, false));
const [gene] = await _entrezGene.fetchAndLoadBySymbol(conn, row.Gene);
const relevance = await conn.getVocabularyTerm(row.relevance);
const evidence = await _pubmed.fetchAndLoadByIds(conn, row.evidence);
Expand Down
13 changes: 5 additions & 8 deletions src/cancergenomeinterpreter/index.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
const fs = require('fs');

const { parseVariant: parseVariantOriginal } = require('@bcgsc-pori/graphkb-parser');
const { parseVariantDecorator } = require('../util');

const parseVariant = parseVariantDecorator(parseVariantOriginal);
const { jsonifyVariant, parseVariant } = require('@bcgsc-pori/graphkb-parser');

const {
loadDelimToJson,
Expand Down Expand Up @@ -220,7 +217,7 @@ const processVariants = async ({ conn, row, source }) => {
}

if (genomic && !isCat) {
const parsed = parseVariant(genomic).toJSON();
const parsed = jsonifyVariant(parseVariant(genomic));
const reference1 = await conn.getUniqueRecordBy({
filters: {
AND: [
Expand All @@ -245,7 +242,7 @@ const processVariants = async ({ conn, row, source }) => {
}

if (protein && !isCat) {
const parsed = parseVariant(`${gene}:${protein.split(':')[1]}`).toJSON();
const parsed = jsonifyVariant(parseVariant(`${gene}:${protein.split(':')[1]}`));
const type = await conn.getVocabularyTerm(parsed.type);
proteinVariant = await conn.addVariant({
content: { ...parsed, reference1: rid(gene1Record), type },
Expand All @@ -254,7 +251,7 @@ const processVariants = async ({ conn, row, source }) => {
});
}
if (transcript && cds && !isCat) {
const parsed = parseVariant(`${transcript}:${cds}`).toJSON();
const parsed = jsonifyVariant(parseVariant(`${transcript}:${cds}`));
const reference1 = await conn.getUniqueRecordBy({
filters: { AND: [{ biotype: 'transcript' }, { sourceId: transcript }, { sourceIdVersion: null }] },
sort: orderPreferredOntologyTerms,
Expand All @@ -268,7 +265,7 @@ const processVariants = async ({ conn, row, source }) => {
});
}
if (exonic && !isCat) {
const parsed = parseVariant(`${gene}:${exonic}`).toJSON();
const parsed = jsonifyVariant(parseVariant(`${gene}:${exonic}`));
const type = await conn.getVocabularyTerm(parsed.type);
exonicVariant = await conn.addVariant({
content: { ...parsed, reference1: rid(gene1Record), type },
Expand Down
13 changes: 5 additions & 8 deletions src/cancerhotspots/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@ const fs = require('fs');

const csv = require('fast-csv');

const { parseVariant: parseVariantOriginal } = require('@bcgsc-pori/graphkb-parser');
const { parseVariantDecorator } = require('../util');

const parseVariant = parseVariantDecorator(parseVariantOriginal);
const { jsonifyVariant, parseVariant } = require('@bcgsc-pori/graphkb-parser');

const {
convertRowFields,
Expand Down Expand Up @@ -104,7 +101,7 @@ const processVariants = async ({ conn, record, source }) => {
// deletion
notation = `${notation}${start}_${stop}del${refSeq}`;
}
const variant = parseVariant(notation).toJSON();
const variant = jsonifyVariant(parseVariant(notation));

variant.reference1 = rid(reference1);
variant.type = rid(await conn.getVocabularyTerm(variant.type));
Expand All @@ -128,10 +125,10 @@ const processVariants = async ({ conn, record, source }) => {
[reference1] = await _entrezGene.fetchAndLoadByIds(conn, [geneId]);
featureCache[geneId] = reference1;
}
const variant = parseVariant(
const variant = jsonifyVariant(parseVariant(
protein.replace(/fs\*\?$/, 'fs'), // ignore uncertain truncations
false,
).toJSON();
));
variant.reference1 = rid(reference1);
variant.type = rid(await conn.getVocabularyTerm(variant.type));
proteinVariant = rid(await conn.addVariant({
Expand Down Expand Up @@ -166,7 +163,7 @@ const processVariants = async ({ conn, record, source }) => {
featureCache[transcriptId] = reference1;
}
// parse the cds variant
const variant = parseVariant(cds, false).toJSON();
const variant = jsonifyVariant(parseVariant(cds, false));

variant.reference1 = reference1;
variant.type = rid(await conn.getVocabularyTerm(variant.type));
Expand Down
8 changes: 4 additions & 4 deletions src/cgl/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const fs = require('fs');

const { parseVariant } = require('@bcgsc-pori/graphkb-parser');
const { jsonifyVariant, parseVariant } = require('@bcgsc-pori/graphkb-parser');

const {
loadDelimToJson,
Expand Down Expand Up @@ -50,7 +50,7 @@ const loadCdsVariant = async (graphkbConn, transcriptId, cdsNotation) => {
variant.reference1 = reference1;
variant.type = rid(await graphkbConn.getVocabularyTerm(variant.type));
const cds = rid(await graphkbConn.addVariant({
content: { ...variant },
content: { ...jsonifyVariant(variant) },
existsOk: true,
target: 'PositionalVariant',
}));
Expand Down Expand Up @@ -91,7 +91,7 @@ const loadProteinVariant = async (graphkbConn, gene, proteinNotation) => {
variant.reference1 = reference1;
variant.type = rid(await graphkbConn.getVocabularyTerm(variant.type));
const protein = rid(await graphkbConn.addVariant({
content: { ...variant },
content: { ...jsonifyVariant(variant) },
existsOk: true,
target: 'PositionalVariant',
}));
Expand Down Expand Up @@ -167,7 +167,7 @@ const loadGenomicVariant = async (graphkbConn, chromosome, position, ref, alt) =
variant.reference1 = reference1;
variant.type = rid(await graphkbConn.getVocabularyTerm(variant.type));
const genomic = rid(await graphkbConn.addVariant({
content: { ...variant, assembly: 'hg19' },
content: { ...jsonifyVariant(variant), assembly: 'hg19' },
existsOk: true,
target: 'PositionalVariant',
}));
Expand Down
14 changes: 8 additions & 6 deletions src/civic/variant.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
const { ErrorMixin, ParsingError, parseVariant: parseVariantOriginal } = require('@bcgsc-pori/graphkb-parser');
const {
ErrorMixin,
jsonifyVariant,
parseVariant,
ParsingError,
} = require('@bcgsc-pori/graphkb-parser');

const { rid } = require('../graphkb');
const _entrezGene = require('../entrez/gene');
const _snp = require('../entrez/snp');
const { civic: SOURCE_DEFN } = require('../sources');
const { logger } = require('../logging');

const { parseVariantDecorator } = require('../util');

const parseVariant = parseVariantDecorator(parseVariantOriginal);

class NotImplementedError extends ErrorMixin { }

const VARIANT_CACHE = new Map();
Expand Down Expand Up @@ -523,7 +525,7 @@ const uploadVariant = async (conn, normalizedVariant) => {
let content = {};

if (normalizedVariant.positional) {
content = parseVariant(normalizedVariant.variant, false).toJSON();
content = jsonifyVariant(parseVariant(normalizedVariant.variant, false));
}

// Variant type
Expand Down
11 changes: 4 additions & 7 deletions src/cosmic/resistance.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@
*/
const fs = require('fs');

const { parseVariant: parseVariantOriginal } = require('@bcgsc-pori/graphkb-parser');
const { parseVariantDecorator } = require('../util');

const parseVariant = parseVariantDecorator(parseVariantOriginal);
const { jsonifyVariant, parseVariant } = require('@bcgsc-pori/graphkb-parser');

const {
loadDelimToJson,
Expand Down Expand Up @@ -80,7 +77,7 @@ const processVariants = async ({ conn, record, source }) => {

try {
// add the protein variant with its protein translation
const variant = parseVariant(record.protein, false).toJSON();
const variant = jsonifyVariant(parseVariant(record.protein, false));
variant.type = rid(await conn.getVocabularyTerm(variant.type));

const reference1 = rid(await _ensembl.fetchAndLoadById(
Expand Down Expand Up @@ -116,7 +113,7 @@ const processVariants = async ({ conn, record, source }) => {
// create the cds variant
if (record.cds && record.cds.trim()) {
try {
const variant = parseVariant(record.cds, false).toJSON();
const variant = jsonifyVariant(parseVariant(record.cds, false));
// get the ensembl transcript
const reference1 = rid(await _ensembl.fetchAndLoadById(
conn,
Expand Down Expand Up @@ -146,7 +143,7 @@ const processVariants = async ({ conn, record, source }) => {
// add the genomic representation
if (record.genomic) {
try {
const variant = parseVariant(record.genomic, false).toJSON();
const variant = jsonifyVariant(parseVariant(record.genomic, false));
// get the chromosome
const reference1 = rid(await conn.getUniqueRecordBy({
filters: {
Expand Down
9 changes: 3 additions & 6 deletions src/docm/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@
const Ajv = require('ajv');
const fs = require('fs');

const { parseVariant: parseVariantOriginal } = require('@bcgsc-pori/graphkb-parser');
const { parseVariantDecorator } = require('../util');

const parseVariant = parseVariantDecorator(parseVariantOriginal);
const { jsonifyVariant, parseVariant } = require('@bcgsc-pori/graphkb-parser');

const { checkSpec, request } = require('../util');
const {
Expand Down Expand Up @@ -110,7 +107,7 @@ const processVariants = async ({ conn, source, record: docmRecord }) => {
try {
// create the protein variant
const [reference1] = await _gene.fetchAndLoadBySymbol(conn, gene);
let variant = parseVariant(parseDocmVariant(aminoAcid), false).toJSON();
let variant = jsonifyVariant(parseVariant(parseDocmVariant(aminoAcid), false));
const type = await conn.getVocabularyTerm(variant.type);
protein = variant = await conn.addVariant({
content: { ...variant, reference1: rid(reference1), type: rid(type) },
Expand All @@ -124,7 +121,7 @@ const processVariants = async ({ conn, source, record: docmRecord }) => {

try {
// create the genomic variant
let variant = parseVariant(buildGenomicVariant(docmRecord), false).toJSON();
let variant = jsonifyVariant(parseVariant(buildGenomicVariant(docmRecord), false));
const type = await conn.getVocabularyTerm(variant.type);
const reference1 = await conn.getUniqueRecordBy({
filters: {
Expand Down
10 changes: 3 additions & 7 deletions src/entrez/snp.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const Ajv = require('ajv');

const { parseVariant: parseVariantOriginal } = require('@bcgsc-pori/graphkb-parser');
const { jsonifyVariant, parseVariant } = require('@bcgsc-pori/graphkb-parser');
const { checkSpec } = require('../util');
const {
fetchByIdList, uploadRecord, preLoadCache: preLoadAnyCache, BASE_FETCH_URL,
Expand All @@ -10,10 +10,6 @@ const entrezGene = require('./gene');
const { rid } = require('../graphkb');
const { logger } = require('../logging');

const { parseVariantDecorator } = require('../util');

const parseVariant = parseVariantDecorator(parseVariantOriginal);

const ajv = new Ajv();

const { dbSnp: SOURCE_DEFN } = require('../sources');
Expand Down Expand Up @@ -52,7 +48,7 @@ const loadFromDocsumHgvs = async (api, hgvsVariants) => {

try {
if (hgvsVariants.cds) {
const parsed = parseVariant(hgvsVariants.cds.split('|')[0], true).toJSON();
const parsed = jsonifyVariant(parseVariant(hgvsVariants.cds.split('|')[0], true));
const [transcript] = await refseq.fetchAndLoadByIds(api, [parsed.reference1]);
const type = await api.getVocabularyTerm(parsed.type);
cds = await api.addVariant({
Expand All @@ -68,7 +64,7 @@ const loadFromDocsumHgvs = async (api, hgvsVariants) => {
try {
if (hgvsVariants.protein) {
const gene = hgvsVariants.protein.split('|').find(p => p.startsWith('GENE='));
const parsed = parseVariant(hgvsVariants.protein.split('|')[0], true).toJSON();
const parsed = jsonifyVariant(parseVariant(hgvsVariants.protein.split('|')[0], true));
const [reference1] = await refseq.fetchAndLoadByIds(api, [parsed.reference1]);
const type = await api.getVocabularyTerm(parsed.type);
protein = await api.addVariant({
Expand Down
13 changes: 5 additions & 8 deletions src/moa/index.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
const Ajv = require('ajv');

const { parseVariant: parseVariantOriginal } = require('@bcgsc-pori/graphkb-parser');
const { parseVariantDecorator } = require('../util');

const parseVariant = parseVariantDecorator(parseVariantOriginal);
const { jsonifyVariant, parseVariant } = require('@bcgsc-pori/graphkb-parser');

const { checkSpec, requestWithRetry } = require('../util');
const { moa: SOURCE_DEFN } = require('../sources');
Expand Down Expand Up @@ -62,7 +59,7 @@ const loadSmallMutation = async (conn, gene, moaVariant) => {

// create the genomic variant if we have the appropriate fields
if (!['reference_allele', 'alternate_allele', 'start_position', 'end_position', 'chromosome'].some(v => moaVariant[v] === null)) {
const hgvsg = parseVariant(composeGenomicHgvs(moaVariant), false).toJSON();
const hgvsg = jsonifyVariant(parseVariant(composeGenomicHgvs(moaVariant), false));
const chromosome = await conn.getUniqueRecordBy({
filters: {
AND: [
Expand All @@ -88,7 +85,7 @@ const loadSmallMutation = async (conn, gene, moaVariant) => {

// create the cds variant
if (moaVariant.cdna_change !== null && moaVariant.cdna_change !== '') {
const hgvsc = parseVariant(moaVariant.cdna_change, false).toJSON();
const hgvsc = jsonifyVariant(parseVariant(moaVariant.cdna_change, false));
const cdsType = rid(await conn.getVocabularyTerm(hgvsc.type));
cdsVariant = rid(await conn.addVariant({
content: {
Expand All @@ -101,7 +98,7 @@ const loadSmallMutation = async (conn, gene, moaVariant) => {

// create the protein variant
if (moaVariant.protein_change !== null && moaVariant.protein_change !== '') {
const hgvsp = parseVariant(moaVariant.protein_change, false).toJSON();
const hgvsp = jsonifyVariant(parseVariant(moaVariant.protein_change, false));
const proteinType = rid(await conn.getVocabularyTerm(hgvsp.type));
proteinVariant = rid(await conn.addVariant({
content: {
Expand Down Expand Up @@ -132,7 +129,7 @@ const loadSmallMutation = async (conn, gene, moaVariant) => {
} else {
variantType = await conn.getVocabularyTerm('mutation');
}
const parsed = parseVariant(`e.${exonNumber}mut`, false).toJSON();
const parsed = jsonifyVariant(parseVariant(`e.${exonNumber}mut`, false));
exonVariant = await conn.addVariant({
content: {
...parsed,
Expand Down
11 changes: 4 additions & 7 deletions src/oncokb/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@ const Ajv = require('ajv');
const fs = require('fs');
const path = require('path');

const { ParsingError, parseVariant: parseVariantOriginal } = require('@bcgsc-pori/graphkb-parser');
const { parseVariantDecorator } = require('../util');

const parseVariant = parseVariantDecorator(parseVariantOriginal);
const { jsonifyVariant, parseVariant, ParsingError } = require('@bcgsc-pori/graphkb-parser');

const {
checkSpec,
Expand Down Expand Up @@ -279,11 +276,11 @@ const processVariant = async (conn, {

if (!variant) {
try {
variant = parseVariant(type, false).toJSON();
variant = jsonifyVariant(parseVariant(type, false));
} catch (err) {
try {
// try with adding a p prefix also
variant = parseVariant(`p.${type}`, false).toJSON();
variant = jsonifyVariant(parseVariant(`p.${type}`, false));
} catch (err2) { }
logger.warn(`failed to parse the variant (${type}) for record (gene=${gene}, variant=${variantName})`);
throw err;
Expand Down Expand Up @@ -330,7 +327,7 @@ const processVariant = async (conn, {

try {
// try with adding a p prefix also
const parsed = parseVariant(altVariantName, false).toJSON();
const parsed = jsonifyVariant(parseVariant(altVariantName, false));
parsed.reference1 = rid(reference1);
parsed.type = rid(await getVocabulary(conn, parsed.type));
const altVariant = rid(await conn.addVariant({
Expand Down
Loading

0 comments on commit b70cc9a

Please sign in to comment.