import os from loguru import logger from csv import DictWriter from dataclasses import asdict from . import Database from ..core import Metadata class CSVDb(Database): """ Outputs results to a CSV file """ name = "csv_db" def __init__(self, config: dict) -> None: # without this STEP.__init__ is not called super().__init__(config) self.assert_valid_string("csv_file") @staticmethod def configs() -> dict: return { "csv_file": {"default": "db.csv", "help": "CSV file name"} } def done(self, item: Metadata, cached: bool=False) -> None: """archival result ready - should be saved to DB""" logger.success(f"DONE {item}") is_empty = not os.path.isfile(self.csv_file) or os.path.getsize(self.csv_file) == 0 with open(self.csv_file, "a", encoding="utf-8") as outf: writer = DictWriter(outf, fieldnames=asdict(Metadata())) if is_empty: writer.writeheader() writer.writerow(asdict(item))