arxiv-cards / app.py
EliottZemour
update app
4c1af0e
raw
history blame
3.79 kB
import os
from jinja2 import Environment, FileSystemLoader, select_autoescape
from get_paperinfo_fromurls import get_paperinfo_fromurls
import gradio as gr
class CARDS_TEMPLATE(object):
def __init__(self, path_to_template, template_filename):
self.path_to_template = path_to_template
self.template_filename = template_filename
self.template = self._get_template()
self.rendered_html = None
def _get_template(self):
env = Environment(
autoescape=select_autoescape(
enabled_extensions=('html'),
default_for_string=True,
),
loader=FileSystemLoader(self.path_to_template)
)
return env.get_template(self.template_filename)
def render(self, paper_details_iterator):
self.rendered_html = self.template.render(paper_details=paper_details_iterator)
def save_html(self, output_dir=None, output_htmlfile=None):
with open(os.path.join(output_dir, output_htmlfile), "w") as f:
f.write(self.rendered_html)
template_file = "htmlcard.html"
template_path = ""
card_template = CARDS_TEMPLATE(
path_to_template = template_path,
template_filename = template_file,
)
CSS = """
#question input {
font-size: 16px;
}
#url-textbox {
padding: 0 !important;
}
#short-upload-box .w-full {
min-height: 10rem !important;
}
/* I think something like this can be used to re-shape
* the table
*/
/*
.gr-samples-table tr {
display: inline;
}
.gr-samples-table .p-2 {
width: 100px;
}
*/
#select-a-file {
width: 100%;
}
#file-clear {
padding-top: 2px !important;
padding-bottom: 2px !important;
padding-left: 8px !important;
padding-right: 8px !important;
margin-top: 10px;
}
.gradio-container .gr-button-primary {
background: linear-gradient(180deg, #CDF9BE 0%, #AFF497 100%);
border: 1px solid #B0DCCC;
border-radius: 8px;
color: #1B8700;
}
.gradio-container.dark button#submit-button {
background: linear-gradient(180deg, #CDF9BE 0%, #AFF497 100%);
border: 1px solid #B0DCCC;
border-radius: 8px;
color: #1B8700
}
table.gr-samples-table tr td {
border: none;
outline: none;
}
table.gr-samples-table tr td:first-of-type {
width: 0%;
}
div#short-upload-box div.absolute {
display: none !important;
}
gradio-app > div > div > div > div.w-full > div, .gradio-app > div > div > div > div.w-full > div {
gap: 0px 2%;
}
gradio-app div div div div.w-full, .gradio-app div div div div.w-full {
gap: 0px;
}
gradio-app h2, .gradio-app h2 {
padding-top: 10px;
}
#answer {
overflow-y: scroll;
color: white;
background: #666;
border-color: #666;
font-size: 20px;
font-weight: bold;
}
#answer span {
color: white;
}
#answer textarea {
color:white;
background: #777;
border-color: #777;
font-size: 18px;
}
#url-error input {
color: red;
}
"""
def create_html_card(arxiv_link):
paper_details = get_paperinfo_fromurls(arxiv_link)
card_template.render(paper_details_iterator=paper_details)
return card_template.rendered_html
demo = gr.Blocks(css=CSS)
with demo:
with gr.Row(equal_height=True):
with gr.Column():
with gr.Row():
text = gr.Textbox(
show_label=False,
placeholder="URL",
lines=1,
max_lines=1,
elem_id="url-textbox",
)
button = gr.Button("Get", variant="primary")
with gr.Row():
card = gr.HTML()
button.click(
fn=create_html_card,
inputs=[text],
outputs=[card]
)
demo.launch()