akhaliq HF staff commited on
Commit
c41eb9c
·
verified ·
1 Parent(s): 09d067e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +68 -1
app.py CHANGED
@@ -5,7 +5,74 @@ from datetime import datetime, timezone
5
  API_URL = "https://huggingface.co/api/daily_papers"
6
 
7
  class PaperManager:
8
- # ... [The PaperManager class remains unchanged] ...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
  css = """
11
  body {
 
5
  API_URL = "https://huggingface.co/api/daily_papers"
6
 
7
  class PaperManager:
8
+ def __init__(self, papers_per_page=10):
9
+ self.papers_per_page = papers_per_page
10
+ self.current_page = 1
11
+ self.papers = []
12
+ self.total_pages = 1
13
+
14
+ def fetch_papers(self):
15
+ try:
16
+ response = requests.get(f"{API_URL}?limit=50")
17
+ response.raise_for_status()
18
+ data = response.json()
19
+ # Sort papers by upvotes (descending order)
20
+ self.papers = sorted(data, key=lambda x: x.get('paper', {}).get('upvotes', 0), reverse=True)
21
+ self.total_pages = (len(self.papers) + self.papers_per_page - 1) // self.papers_per_page
22
+ self.current_page = 1 # Reset to first page after fetching
23
+ return True
24
+ except requests.RequestException as e:
25
+ print(f"Error fetching papers: {e}")
26
+ return False
27
+
28
+ def format_paper(self, paper):
29
+ title = paper.get('title', 'No title')
30
+ url = f"https://huggingface.co/papers/{paper['paper'].get('id', '')}"
31
+ authors = ', '.join([author.get('name', '') for author in paper['paper'].get('authors', [])])
32
+ upvotes = paper.get('paper', {}).get('upvotes', 0)
33
+ comments = paper.get('numComments', 0)
34
+ published_time = datetime.fromisoformat(paper.get('publishedAt', datetime.now(timezone.utc).isoformat()).replace('Z', '+00:00'))
35
+ time_ago = (datetime.now(timezone.utc) - published_time).days
36
+
37
+ return f"""
38
+ <div class="paper-item">
39
+ <h3><a href="{url}" target="_blank">{title}</a></h3>
40
+ <p class="paper-meta">
41
+ <span class="upvotes">{upvotes} upvotes</span> |
42
+ <span class="authors">by {authors}</span> |
43
+ <span class="time-ago">{time_ago} days ago</span> |
44
+ <span class="comments">{comments} comments</span>
45
+ </p>
46
+ </div>
47
+ """
48
+
49
+ def render_papers(self):
50
+ start = (self.current_page - 1) * self.papers_per_page
51
+ end = start + self.papers_per_page
52
+ current_papers = self.papers[start:end]
53
+
54
+ if not current_papers:
55
+ return "<div class='no-papers'>No papers available for this page.</div>"
56
+
57
+ return "".join([self.format_paper(paper) for paper in current_papers])
58
+
59
+ def search_papers(self, query):
60
+ if not query:
61
+ self.current_page = 1
62
+ return self.render_papers()
63
+
64
+ filtered_papers = [paper for paper in self.papers if query.lower() in paper.get('title', '').lower()]
65
+ return "".join([self.format_paper(paper) for paper in filtered_papers[:self.papers_per_page]])
66
+
67
+ def next_page(self):
68
+ if self.current_page < self.total_pages:
69
+ self.current_page += 1
70
+ return self.render_papers(), f"Page {self.current_page} of {self.total_pages}"
71
+
72
+ def prev_page(self):
73
+ if self.current_page > 1:
74
+ self.current_page -= 1
75
+ return self.render_papers(), f"Page {self.current_page} of {self.total_pages}"
76
 
77
  css = """
78
  body {