import os import json import aiofiles import bittensor as bt from .streamer import ProcessedStreamResponse class LogDatabase: def __init__(self, log_database_path: str): self.log_database_path = log_database_path self.ensure_db_exists(log_database_path) def ensure_db_exists(self, file_path): if not os.path.exists(file_path): # Create an empty JSONL file with open(file_path, 'w') as file: pass # TODO: change log to debug bt.logging.info(f"File '{file_path}' created.") else: bt.logging.info(f"File '{file_path}' already exists.") async def add_streams_to_db(self, stream_responses: ProcessedStreamResponse): bt.logging.info(f"Writing streams to the database...") try: stream_responses_dict = [dict(stream_response) for stream_response in stream_responses] await self.append_dicts_to_file(self.log_database_path, stream_responses_dict) except Exception as e: bt.logging.error(f"Error while adding streams to the database: {e}") raise e async def append_dicts_to_file(self, file_path, dictionaries): async with aiofiles.open(file_path, mode='a') as file: for dictionary in dictionaries: await file.write(json.dumps(dictionary) + '\n')