Spaces:
Runtime error
Runtime error
| """ | |
| Attack Logs to file | |
| ======================== | |
| """ | |
| import os | |
| import sys | |
| import terminaltables | |
| from textattack.shared import logger | |
| from .logger import Logger | |
| class FileLogger(Logger): | |
| """Logs the results of an attack to a file, or `stdout`.""" | |
| def __init__(self, filename="", stdout=False, color_method="ansi"): | |
| self.stdout = stdout | |
| self.filename = filename | |
| self.color_method = color_method | |
| if stdout: | |
| self.fout = sys.stdout | |
| elif isinstance(filename, str): | |
| directory = os.path.dirname(filename) | |
| directory = directory if directory else "." | |
| if not os.path.exists(directory): | |
| os.makedirs(directory) | |
| self.fout = open(filename, "w") | |
| logger.info(f"Logging to text file at path {filename}") | |
| else: | |
| self.fout = filename | |
| self.num_results = 0 | |
| def __getstate__(self): | |
| # Temporarily save file handle b/c we can't copy it | |
| state = {i: self.__dict__[i] for i in self.__dict__ if i != "fout"} | |
| return state | |
| def __setstate__(self, state): | |
| self.__dict__ = state | |
| if self.stdout: | |
| self.fout = sys.stdout | |
| else: | |
| self.fout = open(self.filename, "a") | |
| def log_attack_result(self, result): | |
| self.num_results += 1 | |
| # if self.stdout and sys.stdout.isatty(): | |
| self.fout.write( | |
| "-" * 45 + " Result " + str(self.num_results) + " " + "-" * 45 + "\n" | |
| ) | |
| self.fout.write(result.__str__(color_method=self.color_method)) | |
| self.fout.write("\n") | |
| def log_summary_rows(self, rows, title, window_id): | |
| if self.stdout: | |
| table_rows = [[title, ""]] + rows | |
| table = terminaltables.AsciiTable(table_rows) | |
| self.fout.write(table.table) | |
| else: | |
| for row in rows: | |
| self.fout.write(f"{row[0]} {row[1]}\n") | |
| def log_sep(self): | |
| self.fout.write("-" * 90 + "\n") | |
| def flush(self): | |
| self.fout.flush() | |
| def close(self): | |
| self.fout.close() | |