Source code for pybliometrics.sciencedirect.nonserial_title

"""Nonserial title class."""

from pybliometrics.superclasses import Retrieval

from pybliometrics.utils import chained_get, check_parameter_value, VIEWS



[docs] class NonserialTitle(Retrieval): @property def aggregation_type(self) -> str: """The type of the source.""" return self._entry['prism:aggregationType'] @property def authors(self) -> str | None: """The authors of the book.""" return self._entry.get('authors') @property def description(self) -> str | None: """The description of the book.""" return self._entry.get('description') @property def edition(self) -> str | None: """The edition of the book.""" return self._entry.get('prism:edition') @property def editors(self) -> str | None: """The editors of the book.""" return self._entry.get('editors') @property def isbn(self) -> str: """The ISBN of the book.""" return self._entry['prism:isbn'] @property def link_coverimage(self) -> str: """The link to the cover image of the book.""" links = self._entry.get('link') return [link['@href'] for link in links if link['@rel'] == 'coverimage'][0] @property def link_homepage(self) -> str: """The link to the homepage of the book.""" links = self._entry.get('link') return [link['@href'] for link in links if link['@rel'] == 'homepage'][0] @property def link_search(self) -> str: """The link to search for the book.""" links = self._entry.get('link') return [link['@href'] for link in links if link['@rel'] == 'search'][0] @property def publisher_id(self) -> str: """The publisher id of the book.""" return chained_get(self._entry, ['dc:publisher', '@id']) @property def publisher_name(self) -> str: """The publisher of the book.""" return chained_get(self._entry, ['dc:publisher', '$']) @property def self_link(self) -> str: """URL to the source's API page.""" return self._entry['prism:url'] @property def title(self) -> str: """The title of the book.""" return self._entry['dc:title'] def __init__(self, isbn: int | str, view: str = "STANDARD", refresh: bool | int = False, **kwds: str ) -> None: """Interaction with the ScienceDirect Nonserial Title API. :param isbn: The ISBN of the book. :param view: The view of the file that should be downloaded. Allowed value: "STANDARD". For details see `the documentation <https://dev.elsevier.com/sd_nonserial_title_views.html>`_. Note that although the "BASIC" view is documented, the API does not support it. :param refresh: Whether to refresh the cached file if it exists or not. If int is passed, cached file will be refreshed if the number of days since last modification exceeds that value. :param kwds: Keywords passed on as query parameters. Must contain fields and values mentioned in the `API specification <https://dev.elsevier.com/documentation/NonSerialTitleAPI.wadl>`_. :raises ValueError: If any of the parameters `refresh` or `view` is not one of the allowed values. .. note:: The directory for cached results is ``{path}/{view}/{source_id}``, where `path` is specified in your configuration file. """ # Checks check_parameter_value(view, VIEWS['NonserialTitle'], "view") self._view = view self._refresh = refresh self._id = str(isbn) # Load json Retrieval.__init__(self, identifier=self._id, **kwds) # Parse json self._json = self._json['nonserial-metadata-response'] self._entry = self._json['entry'][0] def __str__(self) -> str: """Return a citation string for the Nonserial Title.""" if self.authors: authors = f"{self.authors}." elif self.editors: authors = f"{self.editors} (ed.)." else: authors = "" edition = f", {self.edition}." if self.edition else "." publisher = f" {self.publisher_name}." if self.publisher_name else "." title = f" {self.title}" isbn = self.isbn return f"{authors}{title}{edition}{publisher} ISBN: {isbn}"