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