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