Add requirements.txt with essential dependencies for the project
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
import json
|
||||
import os
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime, timedelta
|
||||
from typing import List
|
||||
|
||||
|
||||
@dataclass
|
||||
class FeedbackLog:
|
||||
transaction_id: str
|
||||
original_match: str
|
||||
correction: str
|
||||
reason: str
|
||||
timestamp: datetime
|
||||
user_id: str
|
||||
|
||||
|
||||
class FeedbackLogger:
|
||||
def __init__(self, log_file: str = "feedback_logs.json"):
|
||||
self.log_file = log_file
|
||||
self.logs: List[FeedbackLog] = self._load_logs()
|
||||
|
||||
def _load_logs(self) -> List[FeedbackLog]:
|
||||
if not os.path.exists(self.log_file):
|
||||
return []
|
||||
|
||||
try:
|
||||
with open(self.log_file, "r") as f:
|
||||
data = json.load(f)
|
||||
return [FeedbackLog(**log) for log in data]
|
||||
except Exception:
|
||||
return []
|
||||
|
||||
def _save_logs(self):
|
||||
with open(self.log_file, "w") as f:
|
||||
json.dump(
|
||||
[
|
||||
{
|
||||
"transaction_id": log.transaction_id,
|
||||
"original_match": log.original_match,
|
||||
"correction": log.correction,
|
||||
"reason": log.reason,
|
||||
"timestamp": log.timestamp.isoformat(),
|
||||
"user_id": log.user_id,
|
||||
}
|
||||
for log in self.logs
|
||||
],
|
||||
f,
|
||||
indent=2,
|
||||
)
|
||||
|
||||
def log_override(
|
||||
self,
|
||||
transaction_id: str,
|
||||
original_match: str,
|
||||
correction: str,
|
||||
reason: str,
|
||||
user_id: str,
|
||||
):
|
||||
log = FeedbackLog(
|
||||
transaction_id=transaction_id,
|
||||
original_match=original_match,
|
||||
correction=correction,
|
||||
reason=reason,
|
||||
timestamp=datetime.now(),
|
||||
user_id=user_id,
|
||||
)
|
||||
self.logs.append(log)
|
||||
self._save_logs()
|
||||
|
||||
def get_logs_by_transaction(self, transaction_id: str) -> List[FeedbackLog]:
|
||||
return [log for log in self.logs if log.transaction_id == transaction_id]
|
||||
|
||||
def get_recent_logs(self, days: int = 30) -> List[FeedbackLog]:
|
||||
cutoff = datetime.now() - timedelta(days=days)
|
||||
return [log for log in self.logs if log.timestamp > cutoff]
|
||||
Reference in New Issue
Block a user