Source code for bridge.builders.europe_pmc.europe_pmc_composer
"""
High-level coroutine that chains EuropePMCIngestor and EuropePMCTransformer
to produce a Publication model from a Europe PMC ID.
"""
import logging
from bridge.core import Publication
from bridge.services import EuropePMCIngestor
from .europe_pmc_transformer import EuropePMCTransformer
logger = logging.getLogger(__name__)
[docs]
async def compose_europe_pmc_metadata(
pmid: str | None = None, pmcid: str | None = None, doi: str | None = None
) -> Publication:
"""
Fetch and transform Europe PMC entry into a Publication model.
Parameters
----------
pmid : str, optional
PubMed identifier (e.g., "36173614").
pmcid : str, optional
PubMed Central identifier (e.g., "PMC9903320").
doi : str, optional
Digital Object Identifier (e.g., "10.1021/acs.jproteome.2c00457").
Returns
-------
Publication
A Publication model representing the Europe PMC metadata.
Raises
------
Exception
If there is an error during ingestion or transformation.
"""
logger.info(f"Composing Europe PMC metadata model for ID {pmid or pmcid or doi}")
try:
europe_pmc_ingestor = EuropePMCIngestor(pmid=pmid, pmcid=pmcid, doi=doi)
europe_pmc_transformer = EuropePMCTransformer(europe_pmc_ingestor)
europe_pmc_metadata = await europe_pmc_transformer.transform()
logger.info(f"Composed Europe PMC metadata model for ID {pmid or pmcid or doi} successfully")
return europe_pmc_metadata
except Exception as e:
logger.exception(f"Error composing Europe PMC metadata model for ID {pmid or pmcid or doi}: {e}")
raise