Spaces:
Sleeping
Sleeping
fix timestamp, pagination
Browse files
app.py
CHANGED
|
@@ -3,6 +3,7 @@ from datetime import datetime, timedelta
|
|
| 3 |
import requests
|
| 4 |
from datetime import datetime
|
| 5 |
import json
|
|
|
|
| 6 |
|
| 7 |
from dotenv import load_dotenv
|
| 8 |
|
|
@@ -17,10 +18,14 @@ css_content = open("styles.css").read()
|
|
| 17 |
|
| 18 |
app, rt = fast_app(hdrs=(Style(css_content),))
|
| 19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
def date_range_inputs(start_date, end_date):
|
| 21 |
return Div(
|
| 22 |
-
Input(type="date", name="start_date", value=start_date.strftime("%Y-%m-%d")),
|
| 23 |
-
Input(type="date", name="end_date", value=end_date.strftime("%Y-%m-%d")),
|
| 24 |
cls="date-range"
|
| 25 |
)
|
| 26 |
|
|
@@ -38,9 +43,9 @@ def iso_to_unix_timestamp(iso_string):
|
|
| 38 |
dt = datetime.fromisoformat(iso_string)
|
| 39 |
return int(dt.timestamp())
|
| 40 |
|
| 41 |
-
def
|
| 42 |
dt = datetime.fromtimestamp(timestamp)
|
| 43 |
-
return dt.
|
| 44 |
|
| 45 |
def make_query(query, start_date, end_date, page=1, limit=10):
|
| 46 |
url = f"{API_URL}/indexes/comments/search"
|
|
@@ -90,13 +95,13 @@ def make_results_bar(results):
|
|
| 90 |
def make_card(result):
|
| 91 |
result = result["_formatted"]
|
| 92 |
url = f"https://hf.co/{result['repo_id']}/discussions/{result['discussion_num']}"
|
| 93 |
-
date =
|
| 94 |
|
| 95 |
return Div(
|
| 96 |
Div(
|
| 97 |
Strong(NotStr(result["discussion_title"])),
|
| 98 |
P(NotStr(result["comment_text"]), cls="comment-text"),
|
| 99 |
-
Span(date),
|
| 100 |
A(url, href=url, target="_blank"),
|
| 101 |
),
|
| 102 |
cls="card-item"
|
|
@@ -104,30 +109,29 @@ def make_card(result):
|
|
| 104 |
|
| 105 |
def make_pagination(query, start_date, end_date, current_page, total_hits, limit=10):
|
| 106 |
total_pages = -(-total_hits // limit) # Ceiling division
|
| 107 |
-
|
| 108 |
-
|
| 109 |
|
| 110 |
if current_page > 1:
|
| 111 |
-
|
| 112 |
Button("Previous",
|
| 113 |
hx_post=f"/search?page={current_page-1}",
|
| 114 |
hx_target="#search-results",
|
| 115 |
hx_include="[name='query'], [name='start_date'], [name='end_date']")
|
| 116 |
)
|
| 117 |
|
| 118 |
-
|
| 119 |
|
| 120 |
if current_page < total_pages:
|
| 121 |
-
|
| 122 |
Button("Next",
|
| 123 |
hx_post=f"/search?page={current_page+1}",
|
| 124 |
hx_target="#search-results",
|
| 125 |
hx_include="[name='query'], [name='start_date'], [name='end_date']",
|
| 126 |
-
|
| 127 |
)
|
| 128 |
)
|
| 129 |
|
| 130 |
-
return pagination
|
| 131 |
|
| 132 |
@rt("/")
|
| 133 |
def get():
|
|
|
|
| 3 |
import requests
|
| 4 |
from datetime import datetime
|
| 5 |
import json
|
| 6 |
+
from markdown import markdown
|
| 7 |
|
| 8 |
from dotenv import load_dotenv
|
| 9 |
|
|
|
|
| 18 |
|
| 19 |
app, rt = fast_app(hdrs=(Style(css_content),))
|
| 20 |
|
| 21 |
+
|
| 22 |
+
md_exts='codehilite', 'smarty', 'extra', 'sane_lists'
|
| 23 |
+
def Markdown(s, exts=md_exts, **kw): return Div(NotStr(markdown(s, extensions=exts)), **kw)
|
| 24 |
+
|
| 25 |
def date_range_inputs(start_date, end_date):
|
| 26 |
return Div(
|
| 27 |
+
Input(type="date", name="start_date", value=start_date.strftime("%Y-%m-%d"), title="Start date"),
|
| 28 |
+
Input(type="date", name="end_date", value=end_date.strftime("%Y-%m-%d"), title="End date"),
|
| 29 |
cls="date-range"
|
| 30 |
)
|
| 31 |
|
|
|
|
| 43 |
dt = datetime.fromisoformat(iso_string)
|
| 44 |
return int(dt.timestamp())
|
| 45 |
|
| 46 |
+
def unix_timestamp_to_nice_format(timestamp):
|
| 47 |
dt = datetime.fromtimestamp(timestamp)
|
| 48 |
+
return dt.strftime("%b %d, %Y")
|
| 49 |
|
| 50 |
def make_query(query, start_date, end_date, page=1, limit=10):
|
| 51 |
url = f"{API_URL}/indexes/comments/search"
|
|
|
|
| 95 |
def make_card(result):
|
| 96 |
result = result["_formatted"]
|
| 97 |
url = f"https://hf.co/{result['repo_id']}/discussions/{result['discussion_num']}"
|
| 98 |
+
date = unix_timestamp_to_nice_format(int(result["comment_updatedAt_timestamp"]))
|
| 99 |
|
| 100 |
return Div(
|
| 101 |
Div(
|
| 102 |
Strong(NotStr(result["discussion_title"])),
|
| 103 |
P(NotStr(result["comment_text"]), cls="comment-text"),
|
| 104 |
+
Div(Span(date)),
|
| 105 |
A(url, href=url, target="_blank"),
|
| 106 |
),
|
| 107 |
cls="card-item"
|
|
|
|
| 109 |
|
| 110 |
def make_pagination(query, start_date, end_date, current_page, total_hits, limit=10):
|
| 111 |
total_pages = -(-total_hits // limit) # Ceiling division
|
| 112 |
+
|
| 113 |
+
children = []
|
| 114 |
|
| 115 |
if current_page > 1:
|
| 116 |
+
children.append(
|
| 117 |
Button("Previous",
|
| 118 |
hx_post=f"/search?page={current_page-1}",
|
| 119 |
hx_target="#search-results",
|
| 120 |
hx_include="[name='query'], [name='start_date'], [name='end_date']")
|
| 121 |
)
|
| 122 |
|
| 123 |
+
children.append(Span(f"Page {current_page} of {total_pages}"))
|
| 124 |
|
| 125 |
if current_page < total_pages:
|
| 126 |
+
children.append(
|
| 127 |
Button("Next",
|
| 128 |
hx_post=f"/search?page={current_page+1}",
|
| 129 |
hx_target="#search-results",
|
| 130 |
hx_include="[name='query'], [name='start_date'], [name='end_date']",
|
|
|
|
| 131 |
)
|
| 132 |
)
|
| 133 |
|
| 134 |
+
return Div(*children, cls="pagination")
|
| 135 |
|
| 136 |
@rt("/")
|
| 137 |
def get():
|