from typing import Iterable, Optional import csv from chocula.util import clean_str from chocula.common import DirectoryLoader from chocula.database import DirectoryInfo class CrossrefLoader(DirectoryLoader): """ CSV Columns: #"JournalTitle","JournalID","Publisher","pissn","eissn","additionalIssns","doi","(year1)[volume1]issue1,issue2,issue3(year2)[volume2]issue4,issues5" """ source_slug = "crossref" def open_file(self) -> Iterable: return csv.DictReader(open(self.config.crossref.filepath)) def parse_record(self, record) -> Optional[DirectoryInfo]: info = DirectoryInfo( directory_slug=self.source_slug, issne=record["eissn"], issnp=record["pissn"], custom_id=record.get("doi").strip() or None, name=clean_str(record.get("JournalTitle")), publisher=clean_str(record.get("Publisher")), ) if record["additionalIssns"]: info.raw_issn = record["additionalIssns"][0] return info