from typing import Iterable, Optional import csv from chocula.util import clean_str from chocula.common import DirectoryLoader from chocula.database import DirectoryInfo, HomepageUrl class OpenAPCLoader(DirectoryLoader): """ CSV Columns: # "institution","period","euro","doi","is_hybrid","publisher","journal_full_title","issn","issn_print","issn_electronic","issn_l","license_ref","indexed_in_crossref","pmid","pmcid","ut","url","doaj" """ source_slug = "openapc" def open_file(self) -> Iterable: return csv.DictReader(open(self.config.openapc.filepath)) def parse_record(self, row) -> Optional[DirectoryInfo]: if not row.get('issn'): return None info = DirectoryInfo( directory_slug=self.source_slug, issne=row['issn_electronic'], issnp=row['issn_print'], raw_issn=row['issn_l'] or row['issn'], name=clean_str(row['journal_full_title']), publisher=clean_str(row['publisher']), ) info.extra['is_hybrid'] = bool(row['is_hybrid']) homepage = HomepageUrl.from_url(row['url']) if homepage: info.homepage_urls.append(homepage) return info