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 EzbLoader(DirectoryLoader): """ CSV Columns: """ source_slug = "ezb" def open_file(self) -> Iterable: return open(self.config.ezb.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'), custom_id=row['ezb_id'], name=clean_str(row['title']), publisher=clean_str(row.get('publisher')), ) info.extra = dict() for k in ('ezb_color', 'subjects', 'keywords', 'zdb_id', 'first_volume', 'first_issue', 'first_year', 'appearance', 'costs'): if row.get(k): info.extra[k] = row[k] url = HomepageUrl.from_url(row.get('url')) if url: info.homepage_urls.append(url) return info