Spaces:
Sleeping
Sleeping
| import sqlite3 | |
| from pathlib import Path | |
| from typing import List, Tuple | |
| import json | |
| class Database: | |
| def __init__(self, db_path=None): | |
| if db_path is None: | |
| raise ValueError("db_path must be provided") | |
| self.db_path = db_path | |
| self.db_file = self.db_path / "cache.db" | |
| if not self.db_file.exists(): | |
| print("Creating database") | |
| print("DB_FILE", self.db_file) | |
| db = sqlite3.connect(self.db_file) | |
| with open(Path("schema.sql"), "r") as f: | |
| db.executescript(f.read()) | |
| db.commit() | |
| db.close() | |
| def get_db(self): | |
| db = sqlite3.connect(self.db_file, check_same_thread=False) | |
| db.row_factory = sqlite3.Row | |
| return db | |
| def __enter__(self): | |
| self.db = self.get_db() | |
| return self.db | |
| def __exit__(self, exc_type, exc_value, traceback): | |
| self.db.close() | |
| def __call__(self): | |
| return self | |
| def insert(self, data: List[Tuple[str, str, str]]): | |
| with self() as db: | |
| cursor = db.cursor() | |
| try: | |
| for entry in data: | |
| url, title, entries = entry | |
| cursor.execute( | |
| "INSERT OR REPLACE INTO cache (url, title, entries) VALUES (?, ?, ?)", | |
| (url, title, entries), | |
| ) | |
| except Exception as e: | |
| print(e) | |
| db.commit() | |
| def filter(self, category: str): | |
| with self() as db: | |
| entries = db.execute("SELECT url, title, entries FROM cache").fetchall() | |
| out = [] | |
| for row in entries: | |
| # parse json | |
| data = json.loads(row["entries"]) | |
| try: | |
| data = [ | |
| { | |
| "title": entry["title"], | |
| "link": entry["link"], | |
| "published": entry["published"] | |
| if "published" in entry | |
| else entry["pubDate"] | |
| if "pubDate" in entry | |
| else "", | |
| "summary": entry["summary"] if "summary" in entry else "", | |
| } | |
| for entry in data["entries"] | |
| ] | |
| if len(data) > 0: | |
| out.append( | |
| { | |
| "entries": data, | |
| "url": row["url"], | |
| "title": row["title"], | |
| } | |
| ) | |
| except Exception as e: | |
| print(f"Errro on {row['url']}: {e}") | |
| return out | |