aboutsummaryrefslogtreecommitdiffstats
path: root/chocula/common.py
diff options
context:
space:
mode:
Diffstat (limited to 'chocula/common.py')
-rw-r--r--chocula/common.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/chocula/common.py b/chocula/common.py
new file mode 100644
index 0000000..54856c9
--- /dev/null
+++ b/chocula/common.py
@@ -0,0 +1,35 @@
+
+import sys
+from typing import Iterable, Optional
+from collections import Counter
+
+from chocula.config import ChoculaConfig
+from chocula.database import DirectoryInfo
+
+
+class DirectoryLoader():
+
+ source_slug: str = "GENERIC"
+
+ def __init__(self, config: ChoculaConfig):
+ self.config = config
+
+ def open_file(self) -> Iterable:
+ raise NotImplementedError()
+
+ def parse_record(self, record) -> Optional[DirectoryInfo]:
+ raise NotImplementedError()
+
+ def index_file(self, db) -> Counter:
+ print(f"##### Loading {self.source_slug}...", file=sys.stderr)
+ counts: Counter = Counter()
+ cur = db.db.cursor()
+ for record in self.open_file():
+ counts['total'] += 1
+ info = self.parse_record(record)
+ if info:
+ status = db.insert_directory(info, cur=cur)
+ counts[status] += 1
+ cur.close()
+ db.db.commit()
+ return counts