Source code for arxiv.canonical.domain.person
"""Provide person-related domain concepts and logic."""
from typing import Any, Dict, Iterable, List, Optional
from .base import CanonicalBase
[docs]class Person(CanonicalBase):
"""Represents an human person in the canonical record."""
full_name: str
last_name: Optional[str] = None
first_name: Optional[str] = None
suffix: Optional[str] = None
orcid: Optional[str] = None
author_id: Optional[str] = None
affiliation: Optional[List[str]] = None
def __init__(self, full_name: str,
last_name: Optional[str] = None,
first_name: Optional[str] = None,
suffix: Optional[str] = None,
orcid: Optional[str] = None,
author_id: Optional[str] = None,
affiliation: Optional[List[str]] = None) -> None:
self.full_name = full_name
self.last_name = last_name
self.first_name = first_name
self.suffix = suffix
self.orcid = orcid
self.author_id = author_id
self.affiliation = affiliation
[docs] @classmethod
def from_dict(cls, data: Dict[str, Any]) -> 'Person':
"""Reconstitute from a native dict."""
return cls(
full_name=data['full_name'],
last_name=data.get('last_name'),
first_name=data.get('first_name'),
suffix=data.get('suffix'),
orcid=data.get('orcid'),
author_id=data.get('author_id'),
affiliation=data.get('affiliation', []),
)
[docs] def to_dict(self) -> Dict[str, Any]:
"""Generate a native dict representation."""
return {
'full_name': self.full_name,
'last_name': self.last_name,
'first_name': self.first_name,
'suffix': self.suffix,
'orcid': self.orcid,
'author_id': self.author_id,
'affiliation': self.affiliation
}