1
0
crypto-seller/crypto_seller/order_csv.py

44 lines
1.2 KiB
Python
Raw Normal View History

2024-07-22 13:48:55 +00:00
import csv
2024-07-22 22:15:01 +00:00
import dataclasses
2024-07-22 13:48:55 +00:00
from pathlib import Path
import fin_depo
2024-07-22 22:15:01 +00:00
@dataclasses.dataclass(frozen=True)
2024-07-22 13:48:55 +00:00
class CsvFileLogger:
2024-07-22 22:15:01 +00:00
"""Outputs the given `TradeOrderDetails` to the CSV file at the specified
path.
"""
path: Path
2024-07-22 13:48:55 +00:00
def __call__(self, trade_order: fin_depo.data.TradeOrderDetails):
fieldnames: list[str] = [
2024-07-22 14:05:42 +00:00
'executed_time',
2024-07-22 13:48:55 +00:00
'input_asset',
'input_amount',
'output_asset',
'output_amount',
'fee_asset',
'fee_amount',
'order_id',
'raw_order_details',
]
2024-07-22 22:15:01 +00:00
# Ensure that directory exists
self.path.parent.mkdir(parents=True, exist_ok=True)
# Write row in CSV file
2024-07-22 13:48:55 +00:00
with open(self.path, 'a') as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
d = trade_order.__dict__
d['input_asset'] = d['input'].asset
d['input_amount'] = d['input'].amount
d['output_asset'] = d['output'].asset
d['output_amount'] = d['output'].amount
d['fee_asset'] = d['fee'].asset
d['fee_amount'] = d['fee'].amount
del d['fee'], d['input'], d['output']
writer.writerow(d)