diff options
Diffstat (limited to 'chocula/common.py')
-rw-r--r-- | chocula/common.py | 35 |
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 |