Source code for pacifica.metadata.orm.citations

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""Citations model for tracking journal articles."""
from peewee import IntegerField, TextField, CharField, ForeignKeyField
from .journals import Journals
from ..rest.orm import CherryPyAPI
from .utils import unicode_type


# Citations has too many attributes...
# pylint: disable=too-many-instance-attributes
[docs]class Citations(CherryPyAPI): """ Citations model tracks metadata for a journal article. Attributes: +--------------------------+-----------------------------------------+ | Name | Description | +==========================+=========================================+ | article_title | The title of the article | +--------------------------+-----------------------------------------+ | journal | Link to the journal it was published in | +--------------------------+-----------------------------------------+ | journal_volume | Journal volume for the publication | +--------------------------+-----------------------------------------+ | journal_issue | Journal issue for the publication | +--------------------------+-----------------------------------------+ | page_range | Pages in issue/volume was the article | +--------------------------+-----------------------------------------+ | abstract_text | Abstract from the article in the | | | journal | +--------------------------+-----------------------------------------+ | xml_text | xml blob for the citation | +--------------------------+-----------------------------------------+ | release_authorization_id | External link to authorization metadata | | | about the released article | +--------------------------+-----------------------------------------+ | doi_reference | Digital Object Identifier for the | | | citation | +--------------------------+-----------------------------------------+ | encoding | Language this metadata is in not the | | | article itself | +-------------------+------------------------------------------------+ """ article_title = TextField(default='') journal = ForeignKeyField(Journals, backref='citations') journal_volume = IntegerField(default=-1) journal_issue = IntegerField(default=-1) page_range = CharField(default='') abstract_text = TextField(default='') xml_text = TextField(default='') release_authorization_id = CharField(default='') doi_reference = CharField(default='') encoding = CharField(default='UTF8')
[docs] def to_hash(self, **flags): """Convert the citation fields to a serializable hash.""" exclude_text = flags.get('exclude_text', False) obj = super(Citations, self).to_hash(**flags) obj['_id'] = int(self.id) obj['article_title'] = unicode_type(self.article_title) if not exclude_text: obj['abstract_text'] = unicode_type(self.abstract_text) obj['xml_text'] = unicode_type(self.xml_text) # pylint: disable=no-member obj['journal'] = int(self.__data__['journal']) # pylint: enable=no-member obj['journal_volume'] = int(self.journal_volume) obj['journal_issue'] = int(self.journal_issue) obj['page_range'] = str(self.page_range) obj['doi_reference'] = str(self.doi_reference) obj['release_authorization_id'] = str(self.release_authorization_id) obj['encoding'] = str(self.encoding) return obj
[docs] def from_hash(self, obj): """Convert the object into the citation object fields.""" super(Citations, self).from_hash(obj) self._set_only_if('_id', obj, 'id', lambda: int(obj['_id'])) self._set_only_if( 'journal', obj, 'journal', lambda: Journals.get(Journals.id == int(obj['journal'])) ) for key in ['journal_volume', 'journal_issue']: self._set_only_if(key, obj, key, lambda k=key: int(obj[k])) for key in ['page_range', 'release_authorization_id', 'encoding', 'doi_reference']: self._set_only_if(key, obj, key, lambda k=key: str(obj[k])) for key in ['article_title', 'xml_text', 'abstract_text']: self._set_only_if( key, obj, key, lambda k=key: unicode_type(obj[k]))
[docs] @classmethod def where_clause(cls, kwargs): """Generate the PeeWee where clause used in searching.""" where_clause = super(Citations, cls).where_clause(kwargs) return cls._where_attr_clause( where_clause, kwargs, [ 'journal', 'article_title', 'journal_volume', 'journal_issue', 'page_range', 'doi_reference', 'encoding' ] )