import csv import dataclasses from pathlib import Path import fin_depo @dataclasses.dataclass(frozen=True) class CsvFileLogger: """Outputs the given `TradeOrderDetails` to the CSV file at the specified path. """ path: Path def __call__(self, trade_order: fin_depo.data.TradeOrderDetails): fieldnames: list[str] = [ 'executed_time', 'input_asset', 'input_amount', 'output_asset', 'output_amount', 'fee_asset', 'fee_amount', 'order_id', 'raw_order_details', ] # Ensure that directory exists self.path.parent.mkdir(parents=True, exist_ok=True) # Write row in CSV file with open(self.path, 'a') as f: writer = csv.DictWriter(f, fieldnames=fieldnames) writer.writerow(trade_order.__dict__)