akhaliq HF Staff commited on
Commit
2e25e84
·
verified ·
1 Parent(s): 3497525

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -10
app.py CHANGED
@@ -10,14 +10,26 @@ class PaperManager:
10
  self.current_page = 1
11
  self.papers = []
12
  self.total_pages = 0
 
13
 
14
  def fetch_papers(self, page=1):
15
  try:
16
  response = requests.get(f"{API_URL}?page={page}&limit={self.papers_per_page}")
17
  response.raise_for_status()
18
  data = response.json()
19
- self.papers = sorted(data, key=lambda x: x.get('paper', {}).get('upvotes', 0), reverse=True)
20
- self.total_pages = (len(self.papers) + self.papers_per_page - 1) // self.papers_per_page
 
 
 
 
 
 
 
 
 
 
 
21
  return True
22
  except requests.RequestException as e:
23
  print(f"Error fetching papers: {e}")
@@ -40,7 +52,7 @@ class PaperManager:
40
  </div>"""
41
 
42
  def render_papers(self):
43
- if not self.papers:
44
  if not self.fetch_papers(self.current_page):
45
  return "<div>Failed to fetch papers. Please try again later.</div>"
46
 
@@ -55,22 +67,21 @@ class PaperManager:
55
 
56
  def search_papers(self, query):
57
  if not query:
 
58
  return self.render_papers()
59
 
60
  filtered_papers = [paper for paper in self.papers if query.lower() in paper.get('title', '').lower()]
61
  return "".join([self.format_paper(paper) for paper in filtered_papers[:self.papers_per_page]])
62
 
63
  def next_page(self):
64
- if self.current_page < self.total_pages:
65
  self.current_page += 1
66
- self.fetch_papers(self.current_page)
67
- return self.render_papers(), f"Page {self.current_page} of {self.total_pages}"
68
 
69
  def prev_page(self):
70
  if self.current_page > 1:
71
  self.current_page -= 1
72
- self.fetch_papers(self.current_page)
73
- return self.render_papers(), f"Page {self.current_page} of {self.total_pages}"
74
 
75
  css = """
76
  body {
@@ -97,8 +108,11 @@ paper_manager = PaperManager()
97
 
98
  def refresh_papers():
99
  paper_manager.current_page = 1
 
 
 
100
  paper_manager.fetch_papers()
101
- return paper_manager.render_papers(), f"Page {paper_manager.current_page} of {paper_manager.total_pages}"
102
 
103
  demo = gr.Blocks(css=css)
104
 
@@ -112,7 +126,7 @@ with demo:
112
  with gr.Row():
113
  prev_button = gr.Button("Previous Page")
114
  next_button = gr.Button("Next Page")
115
- page_info = gr.Markdown(f"Page {paper_manager.current_page} of {paper_manager.total_pages}")
116
 
117
  search_input.change(paper_manager.search_papers, inputs=[search_input], outputs=[paper_list])
118
  refresh_button.click(refresh_papers, outputs=[paper_list, page_info])
 
10
  self.current_page = 1
11
  self.papers = []
12
  self.total_pages = 0
13
+ self.last_fetched_page = 0
14
 
15
  def fetch_papers(self, page=1):
16
  try:
17
  response = requests.get(f"{API_URL}?page={page}&limit={self.papers_per_page}")
18
  response.raise_for_status()
19
  data = response.json()
20
+ new_papers = sorted(data, key=lambda x: x.get('paper', {}).get('upvotes', 0), reverse=True)
21
+
22
+ if page > self.last_fetched_page:
23
+ self.papers.extend(new_papers)
24
+ self.last_fetched_page = page
25
+ elif page < self.last_fetched_page:
26
+ self.papers = new_papers + self.papers
27
+ self.last_fetched_page = page
28
+
29
+ self.total_pages = max(self.total_pages, page)
30
+ if len(new_papers) < self.papers_per_page:
31
+ self.total_pages = page
32
+
33
  return True
34
  except requests.RequestException as e:
35
  print(f"Error fetching papers: {e}")
 
52
  </div>"""
53
 
54
  def render_papers(self):
55
+ if not self.papers or self.current_page > self.last_fetched_page:
56
  if not self.fetch_papers(self.current_page):
57
  return "<div>Failed to fetch papers. Please try again later.</div>"
58
 
 
67
 
68
  def search_papers(self, query):
69
  if not query:
70
+ self.current_page = 1
71
  return self.render_papers()
72
 
73
  filtered_papers = [paper for paper in self.papers if query.lower() in paper.get('title', '').lower()]
74
  return "".join([self.format_paper(paper) for paper in filtered_papers[:self.papers_per_page]])
75
 
76
  def next_page(self):
77
+ if self.current_page < self.total_pages or len(self.papers) >= self.current_page * self.papers_per_page:
78
  self.current_page += 1
79
+ return self.render_papers(), f"Page {self.current_page} of {self.total_pages}+"
 
80
 
81
  def prev_page(self):
82
  if self.current_page > 1:
83
  self.current_page -= 1
84
+ return self.render_papers(), f"Page {self.current_page} of {self.total_pages}+"
 
85
 
86
  css = """
87
  body {
 
108
 
109
  def refresh_papers():
110
  paper_manager.current_page = 1
111
+ paper_manager.papers = []
112
+ paper_manager.last_fetched_page = 0
113
+ paper_manager.total_pages = 0
114
  paper_manager.fetch_papers()
115
+ return paper_manager.render_papers(), f"Page {paper_manager.current_page} of {paper_manager.total_pages}+"
116
 
117
  demo = gr.Blocks(css=css)
118
 
 
126
  with gr.Row():
127
  prev_button = gr.Button("Previous Page")
128
  next_button = gr.Button("Next Page")
129
+ page_info = gr.Markdown(f"Page {paper_manager.current_page} of {paper_manager.total_pages}+")
130
 
131
  search_input.change(paper_manager.search_papers, inputs=[search_input], outputs=[paper_list])
132
  refresh_button.click(refresh_papers, outputs=[paper_list, page_info])