Source code for pybliometrics.sciencedirect.object_metadata

"""Module with the ObjectMetadata class."""

from typing import NamedTuple

from pybliometrics.superclasses import Retrieval
from pybliometrics.utils import chained_get, check_parameter_value, detect_id_type, make_int_if_possible, VIEWS


class Metadata(NamedTuple):
    """Named tuple representing metadata of a document object."""
    eid: str
    filename: str | None
    height: int | None
    mimetype: str | None
    ref: str | None
    size: int | None
    type: str | None
    url: str | None
    width: int | None


[docs] class ObjectMetadata(Retrieval): """Class to retrieve a the metadata of all objects of a document.""" @property def results(self) -> list[Metadata]: """Metadata of the objects in a document. List of namedtuples in the form `eid`, `filename`, `height`, `mimetype`, `ref`, `size`, `type`, `url` and `width`. """ refs = chained_get(self._json, ['attachment-metadata-response', 'attachment'], []) out = [] for ref in refs: out.append( Metadata( eid=ref["eid"], filename=ref.get("filename"), height=make_int_if_possible(ref.get("height")), mimetype=ref.get("mimetype"), ref=ref.get("ref"), size=make_int_if_possible(ref.get("size")), type=ref.get("type"), url=ref.get("prism:url"), width=make_int_if_possible(ref.get("width")), ) ) return out def __init__(self, identifier: int | str, view: str = 'META', id_type: str | None = None, refresh: bool | int = False, **kwds: str ): """Class to retrieve the metadata of all objects of a document. :param identifier: The indentifier of an article. :param view: The view of the object. Allowed value: `META`. :param id_type: The type of identifier supplied. Allowed values: `doi`, `pii`, `scopus_id`, `pubmed_id`, `eid`. :param refresh: Whether to refresh the cached file if it exists. Default: `False`. """ self.identifier = str(identifier) check_parameter_value(view, VIEWS['ObjectMetadata'], "view") self.id_type = id_type if self.id_type is None: self.id_type = detect_id_type(self.identifier) else: allowed_id_types = ('doi', 'pii', 'scopus_id', 'pubmed_id', 'eid') check_parameter_value(id_type, allowed_id_types, "id_type") self._view = view self._refresh = refresh super().__init__(self.identifier, self.id_type, **kwds) def __str__(self): return (f'Document with {self.id_type} {self.identifier} contains ' f'{len(self.results)} objects.')