2023-06-10 14:49:33 +01:00

83 lines
2.4 KiB
Python

from typing import List
from mirri import rgetattr
from mirri.entities.publication import Publication
from mirri.biolomics.settings import PUB_MIRRI_FIELDS
RECORD_ID = 'RecordId'
RECORD_NAME = 'RecordName'
PUB_MAPPING = {
# 'record_id': 'RecordId',
# 'record_name': 'RecordName',
'strains': "Associated strains",
'taxa': "Associated taxa",
'authors': "Authors",
# 'sequneces': "Associated sequences",
# 'abstract': "Abstract",
# 'collection': "Collection",
'doi': "DOI number",
'editor': "Editor(s)",
# 'full_reference': "Full reference",
# 'link': "Hyperlink",
'isbn': "ISBN",
'issn': "ISSN",
'issue': "Issue",
'journal': "Journal",
'journal_book': "Journal-Book",
# 'keywords': "Keywords",
'first_page': "Page from",
'last_page': "Page to",
'publisher': "Publisher",
'pubmed_id': "PubMed ID",
'volume': "Volume",
'year': "Year",
}
REV_PUB_MAPPING = {v: k for k, v in PUB_MAPPING.items()}
def serializer_from_biolomics(ws_data, client=None) -> Publication:
pub = Publication()
pub.record_id = ws_data[RECORD_ID]
pub.record_name = ws_data[RECORD_NAME]
pub.title = ws_data[RECORD_NAME]
for field, value in ws_data['RecordDetails'].items():
value = value['Value']
if not value:
continue
attr = REV_PUB_MAPPING.get(field, None)
if not attr:
continue
if attr in ('year', 'first_page', 'last_page'):
value = int(value)
setattr(pub, attr, value)
return pub
def get_publication_record_name(publication):
if publication.record_name:
return publication.record_name
if publication.title:
return publication.title
if publication.pubmed_id:
return f'PUBMED:{publication.pubmed_id}'
if publication.doi:
return f'DOI:{publication.doi}'
def serializer_to_biolomics(publication: Publication, client=None, update=False):
ws_data = {}
if publication.record_id:
ws_data[RECORD_ID] = publication.record_id
ws_data[RECORD_NAME] = get_publication_record_name(publication)
details = {}
for attr, field in PUB_MAPPING.items():
value = getattr(publication, attr, None)
if value is None:
continue
field_type = 'D' if attr == 'year' else "E"
details[field] = {'Value': value, 'FieldType': field_type}
ws_data['RecordDetails'] = details
return ws_data