Exemplo n.º 1
0
def canonicalize(curie: str):
    """Return the best CURIE."""
    # TODO maybe normalize the curie first?
    norm_prefix, norm_identifier = normalize_curie(curie)
    if norm_prefix is None or norm_identifier is None:
        return jsonify(
            query=curie,
            normalizable=False,
        )

    norm_curie = f'{norm_prefix}:{norm_identifier}'

    rv = dict(query=curie)
    if norm_curie != curie:
        rv['norm_curie'] = norm_curie

    if norm_curie not in graph:
        rv['found'] = False
    else:
        result_curie = canonicalizer.canonicalize(norm_curie)
        rv.update(
            found=True,
            result=result_curie,
            mappings=url_for(
                f'.{all_mappings.__name__}',
                source_curie=norm_curie,
                target_curie=result_curie,
            ),
        )

    return jsonify(rv)
Exemplo n.º 2
0
def _process_interactor(s: str) -> Optional[str]:
    prefix, identifier = normalize_curie(s)
    if prefix is None:
        logger.warning('could not parse %s', s)
        return

    if prefix == 'ncbigene':
        return identifier
    elif prefix == 'biogrid':
        ncbigene_identifier = _map_ncbigene(identifier)
        if ncbigene_identifier is not None:
            return ncbigene_identifier
        elif identifier in BIOGRID_NCBIGENE_REMAPPING:
            remapped = BIOGRID_NCBIGENE_REMAPPING[identifier]
            if not remapped:
                logger.debug('tried but failed curation on %s', s)
            return remapped
        else:
            logger.warning('need to curate: %s', s)
            return
    elif prefix == 'uniprot':
        if identifier in UNIPROT_NCBIGENE_REMAPPING:
            remapped = UNIPROT_NCBIGENE_REMAPPING[identifier]
            if not remapped:
                logger.debug('tried but failed curation on %s', s)
            return remapped
        else:
            logger.warning('need to curate: %s', s)
            return
    else:
        logger.warning('unhandled interactor: %s (%s:%s)', s, prefix,
                       identifier)
Exemplo n.º 3
0
    def test_strip_prefix(self):
        """Test stripping prefixes works."""
        self.assertEqual(("go", "1234"), normalize_curie("GO:1234"))
        self.assertEqual(("go", "1234"), normalize_curie("go:1234"))

        self.assertEqual((None, None), normalize_curie("1234"))
        self.assertEqual(("go", "1234"), normalize_curie("GO:GO:1234"))

        self.assertEqual(("pubmed", "1234"), normalize_curie("pubmed:1234"))
        # Test remapping
        self.assertEqual(("pubmed", "1234"), normalize_curie("pmid:1234"))
        self.assertEqual(("pubmed", "1234"), normalize_curie("PMID:1234"))
Exemplo n.º 4
0
    def test_strip_prefix(self):
        """Test stripping prefixes works."""
        self.assertEqual(('go', '1234'), normalize_curie('GO:1234'))
        self.assertEqual(('go', '1234'), normalize_curie('go:1234'))

        self.assertEqual((None, None), normalize_curie('1234'))
        self.assertEqual(('go', 'GO:1234'), normalize_curie('GO:GO:1234'))

        self.assertEqual(('pubmed', '1234'), normalize_curie('pubmed:1234'))
        # Test remapping
        self.assertEqual(('pubmed', '1234'), normalize_curie('pmid:1234'))
        self.assertEqual(('pubmed', '1234'), normalize_curie('PMID:1234'))
Exemplo n.º 5
0
def _help_resolve(curie: str) -> Mapping[str, Any]:
    prefix, identifier = normalize_curie(curie)
    if prefix is None:
        return dict(
            query=curie,
            success=False,
            message='Could not identify prefix',
        )

    miriam = get_identifiers_org_link(prefix, identifier)

    id_name_mapping = get_id_name_mapping(prefix)
    if id_name_mapping is None:
        rv = dict(
            query=curie,
            prefix=prefix,
            identifier=identifier,
            success=False,
        )
        if miriam:
            rv.update(
                dict(
                    miriam=miriam,
                    message=
                    'Could not find id->name mapping for prefix, but still able to report Identifiers.org link',
                ))
        else:
            rv['message'] = 'Could not find id->name mapping for prefix'
        return rv

    name = id_name_mapping.get(identifier)
    if name is None:
        return dict(
            query=curie,
            prefix=prefix,
            identifier=identifier,
            success=False,
            message='Could not look up identifier',
        )

    return dict(
        query=curie,
        prefix=prefix,
        identifier=identifier,
        name=name,
        success=True,
        miriam=miriam,
    )
Exemplo n.º 6
0
def _iter_process_xrefs(s: str) -> Iterable[Tuple[str, str]]:
    """Take a string with pipe-delimited curies and split/normalize them.

    Compact Uniform Identfiers (CURIE) examples:
    - hgnc:12345
    - ncbigene:12345
    - uniprot:P12345
    - ec-code:1.2.3.15

    Goal:
    make hgnc:1234|ncbigene:1245|uniprot...:12345" into a list of tuples
    """
    for curie in s.split('|'):
        curie = curie.strip()
        prefix, identifier = normalize_curie(curie)
        if prefix is not None:
            yield prefix, identifier
Exemplo n.º 7
0
    def resolve(self, curie: str, resolve_alternate: bool = False) -> Mapping[str, Any]:
        """Return the results and summary when resolving a CURIE string."""
        prefix, identifier = normalize_curie(curie)
        if prefix is None:
            return dict(
                query=curie,
                success=False,
                message='Could not identify prefix',
            )

        miriam_link = get_identifiers_org_link(prefix, identifier)
        obofoundry_link = get_obofoundry_link(prefix, identifier)
        ols_link = get_ols_link(prefix, identifier)
        if not self.has_prefix(prefix):
            rv = dict(
                query=curie,
                prefix=prefix,
                identifier=identifier,
                success=False,
                message=f'Could not find id->name mapping for {prefix}',
            )
            if miriam_link:
                rv['miriam'] = miriam_link
            if obofoundry_link:
                rv['obofoundry'] = obofoundry_link
            if ols_link:
                rv['ols'] = ols_link
            return rv

        name = self.get_name(prefix, identifier)

        if name is None and resolve_alternate:
            primary_id = self.get_primary_id(prefix, identifier)
            if primary_id != identifier:
                miriam_link = get_identifiers_org_link(prefix, primary_id)
                obofoundry_link = get_obofoundry_link(prefix, primary_id)
                ols_link = get_ols_link(prefix, primary_id)
                name = self.get_name(prefix, primary_id)

        if name is None:
            return dict(
                query=curie,
                prefix=prefix,
                identifier=identifier,
                success=False,
                miriam=miriam_link,
                obofoundry=obofoundry_link,
                ols=ols_link,
                message='Could not look up identifier',
            )

        return dict(
            query=curie,
            prefix=prefix,
            identifier=identifier,
            name=name,
            success=True,
            miriam=miriam_link,
            obofoundry=obofoundry_link,
            ols=ols_link,
        )