Update app.py
Browse files
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 |
-
|
20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
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 |
-
|
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])
|