aboutsummaryrefslogtreecommitdiffstats
path: root/chocula/directories/openapc.py
diff options
context:
space:
mode:
Diffstat (limited to 'chocula/directories/openapc.py')
-rw-r--r--chocula/directories/openapc.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/chocula/directories/openapc.py b/chocula/directories/openapc.py
new file mode 100644
index 0000000..b5cc691
--- /dev/null
+++ b/chocula/directories/openapc.py
@@ -0,0 +1,44 @@
+
+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_FILE))
+
+ 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
+
+