Spaces:
Sleeping
Sleeping
File size: 2,126 Bytes
5460b58 2f63946 5da1fd3 2b75953 81b18bf 2b75953 0fbb97c 2b75953 60fbdb7 ba5148a 2b75953 0fbb97c 2f63946 2b75953 2f63946 2b75953 2f63946 2b75953 447fa92 2b75953 2f63946 5460b58 2b75953 2f63946 5460b58 2f63946 2b75953 2f63946 2b75953 60fbdb7 2f63946 2282ec1 2b75953 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
from pathlib import Path
import gradio as gr
from datetime import datetime
import sys
import os
import spaces # necessary to run on Zero.
from spaces.zero.client import _get_token
# create a static directory to store the static files
static_dir = Path('./static')
static_dir.mkdir(parents=True, exist_ok=True)
#os.environ["GRADIO_ALLOWED_PATHS"] = str(static_dir.resolve())
export GRADIO_ALLOWED_PATHS="/static"
print(os.environ["GRADIO_ALLOWED_PATHS"] )
@spaces.GPU(duration=10)
def predict(request: gr.Request,text_input):
token = _get_token(request)
file_name = f"{datetime.utcnow().strftime('%s')}.html"
file_path = static_dir / file_name
print(file_path)
with open(file_path, "w") as f:
f.write(f"""
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-200 dark:text-white dark:bg-gray-900">
<h1 class="text-3xl font-bold">
Hello <i>{text_input}</i> From Gradio Iframe
</h1>
<h3>Filename: {file_name}</h3>
</body>
</html>
""")
file_path = static_dir / file_name
os.chmod(file_path, 0o644)
iframe = f'<iframe src="/file=static/{file_name}" width="100%" height="500px"></iframe>'
link = f'<a href="/file=static/{file_name}" target="_blank">{file_name}</a>'
print("Serving file at:", f"/file={file_path}")
return link, iframe
with gr.Blocks() as block:
gr.Markdown("""
## Gradio + FastAPI + Static Server
This is a demo of how to use Gradio with FastAPI and a static server.
The Gradio app generates dynamic HTML files and stores them in a static directory. FastAPI serves the static files.
""")
with gr.Row():
with gr.Column():
text_input = gr.Textbox(label="Name")
markdown = gr.Markdown(label="Output Box")
new_btn = gr.Button("New")
with gr.Column():
html = gr.HTML(label="HTML preview", show_label=True)
new_btn.click(fn=predict, inputs=[text_input], outputs=[markdown, html])
block.launch(debug=True, share=False, ssr_mode=False)#,ssr_mode=False |