Source code for pybliometrics.sciencedirect.article_entitlement
"""Module for retrieving article entitlement information from ScienceDirect."""
from pybliometrics.superclasses import Retrieval
from pybliometrics.utils import chained_get, check_parameter_value, detect_id_type, VIEWS
[docs]
class ArticleEntitlement(Retrieval):
"""Class to retrieve the entitlement status for a document from ScienceDirect."""
@property
def status(self) -> str | None:
"""Status of whether a document has been found"""
return self._json.get("@status")
@property
def identifier(self) -> str | None:
"""Identifier of a document."""
return self._json.get("dc:identifier")
@property
def eid(self) -> str | None:
"The EID of a document."
return self._json.get("eid")
@property
def entitled(self) -> str | None:
"""Entitlement status of a document."""
return self._json.get("entitled")
@property
def link(self) -> str | None:
"""ScienceDirect canonical URL."""
return chained_get(self._json, ['link', '@href'])
@property
def message(self) -> str | None:
"""Entitlement status message."""
return self._json.get("message")
@property
def pii(self) -> str | None:
"""The PII of a document."""
return self._json.get("pii")
@property
def pii_norm(self) -> str | None:
"""The PII-norm of a document."""
return self._json.get("pii-norm")
@property
def doi(self) -> str | None:
"""The DOI of a document."""
return self._json.get("prism:doi")
@property
def pubmed_id(self) -> str | None:
"""The Pubmed ID of a document (when used in the request)."""
return self._json.get("pubmed_id")
@property
def url(self) -> str | None:
"""API URL used to check entitlement."""
return self._json.get("prism:url")
@property
def scopus_id(self) -> str | None:
"""The Scopus ID of a document (when used in the request)."""
return self._json.get("scopus_id")
def __init__(self,
identifier: int | str,
view: str = "FULL",
id_type: str | None = None,
refresh: bool | int = False,
**kwds: str) -> None:
# Checks
identifier = str(identifier)
check_parameter_value(view, VIEWS["ArticleEntitlement"], "view")
if not id_type:
id_type = detect_id_type(identifier)
else:
allowed_id_types = ("eid", "pii", "scopus_id", "pubmed_id", "doi", "pui")
check_parameter_value(id_type, allowed_id_types, "id_type")
self._view = view
self._refresh = refresh
# Retrieve and get content
Retrieval.__init__(self, identifier=identifier, id_type=id_type, **kwds)
self._json = chained_get(self._json, ["entitlement-response", "document-entitlement"])
def __str__(self) -> str:
s = self.message
s += f' with doi: {self.doi}'
return s