aboutsummaryrefslogtreecommitdiffstats
path: root/chocula/directories/road.py
diff options
context:
space:
mode:
Diffstat (limited to 'chocula/directories/road.py')
-rw-r--r--chocula/directories/road.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/chocula/directories/road.py b/chocula/directories/road.py
new file mode 100644
index 0000000..66bd7d0
--- /dev/null
+++ b/chocula/directories/road.py
@@ -0,0 +1,52 @@
+
+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 RoadLoader(DirectoryLoader):
+ """
+ CSV Columns:
+
+ - ISSN
+ - ISSN-L
+ - Short Title
+ - Title
+ - Publisher
+ - URL1
+ - URL2
+ - Region
+ - Lang1
+ - Lang2
+ """
+
+ source_slug = "road"
+
+ def open_file(self) -> Iterable:
+ return csv.DictReader(open(self.config.ROAD_FILE), delimiter='\t',
+ fieldnames=("ISSN", "ISSN-L", "Short Title", "Title", "Publisher", "URL1", "URL2", "Region", "Lang1", "Lang2")
+ )
+
+ def parse_record(self, row) -> Optional[DirectoryInfo]:
+ info = DirectoryInfo(
+ directory_slug=self.source_slug,
+ raw_issn=row['ISSN-L'],
+ name=clean_str(row['Short Title']),
+ publisher=clean_str(row['Publisher']),
+ langs=[l for l in (row['Lang1'], row['Lang2']) if l],
+ )
+
+ # TODO: region mapping: "Europe and North America"
+ # TODO: lang mapping: already alpha-3
+
+ # homepages
+ for url in [u for u in (row['URL1'], row['URL2']) if u]:
+ homepage = HomepageUrl.from_url(url)
+ if homepage:
+ info.homepage_urls.append(homepage)
+
+ return info
+