from typing import Iterable, Optional import json from chocula.util import clean_str from chocula.common import DirectoryLoader from chocula.database import DirectoryInfo, HomepageUrl class SzczepanskiLoader(DirectoryLoader): """ CSV Columns: """ source_slug = "szczepanski" def open_file(self) -> Iterable: return open(self.config.szczepanski.filepath, 'r') def parse_record(self, row) -> Optional[DirectoryInfo]: if not row: return None row = json.loads(row) info = DirectoryInfo( directory_slug=self.source_slug, issne=row.get('issne'), issnp=row.get('issnp'), raw_issn=row.get('issn'), name=clean_str(row['title']), publisher=clean_str(row.get('ed')), ) info.extra['szczepanski'] = dict(as_of=self.config.szczepanski.date) if row.get('extra'): info.extra['szczepanski']['notes'] = row.get('extra') for k in ('other_titles', 'year_spans', 'ed'): if row.get(k): info.extra['szczepanski'][k] = row[k] url = HomepageUrl.from_url(row.get('url')) if url: info.homepage_urls.append(url) return info