GodsDevProject commited on
Commit
7b326b8
·
verified ·
1 Parent(s): 1791953

Create saved_searches.py

Browse files
Files changed (1) hide show
  1. saved_searches.py +63 -6
saved_searches.py CHANGED
@@ -1,10 +1,67 @@
1
- from collections import deque
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
- MAX_SAVED = 20
4
- _saved = deque(maxlen=MAX_SAVED)
5
 
6
  def save(query: str, extended: bool):
7
- _saved.appendleft({"query": query, "extended": extended})
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
- def list_saved():
10
- return list(_saved)
 
1
+ import json
2
+ import os
3
+ from datetime import datetime
4
+ from typing import List, Dict
5
+
6
+ SAVE_PATH = "saved_searches.json"
7
+ MAX_SAVED = 25
8
+
9
+
10
+ def _load() -> List[Dict]:
11
+ if not os.path.exists(SAVE_PATH):
12
+ return []
13
+ try:
14
+ with open(SAVE_PATH, "r") as f:
15
+ return json.load(f)
16
+ except Exception:
17
+ return []
18
+
19
+
20
+ def _save(data: List[Dict]):
21
+ try:
22
+ with open(SAVE_PATH, "w") as f:
23
+ json.dump(data, f, indent=2)
24
+ except Exception:
25
+ pass
26
 
 
 
27
 
28
  def save(query: str, extended: bool):
29
+ """
30
+ Persist a saved search (privacy-safe, local only).
31
+ """
32
+ if not query.strip():
33
+ return
34
+
35
+ data = _load()
36
+
37
+ entry = {
38
+ "query": query,
39
+ "extended": bool(extended),
40
+ "timestamp": datetime.utcnow().isoformat() + "Z",
41
+ }
42
+
43
+ data.insert(0, entry)
44
+ data = data[:MAX_SAVED]
45
+
46
+ _save(data)
47
+
48
+
49
+ def render() -> str:
50
+ """
51
+ Render saved searches as markdown for Gradio.
52
+ """
53
+ data = _load()
54
+
55
+ if not data:
56
+ return "_No saved searches yet._"
57
+
58
+ lines = ["### 💾 Saved Searches\n"]
59
+
60
+ for i, s in enumerate(data, start=1):
61
+ mode = "Extended" if s["extended"] else "Standard"
62
+ lines.append(
63
+ f"{i}. **{s['query']}** \n"
64
+ f" _Mode:_ {mode} · _Saved:_ {s['timestamp']}"
65
+ )
66
 
67
+ return "\n\n".join(lines)