File size: 4,034 Bytes
ccc5ec3
 
 
 
 
 
 
 
 
 
8e229a3
 
ccc5ec3
 
c543299
 
 
 
 
 
 
 
 
 
ccc5ec3
 
 
 
 
782def4
ccc5ec3
 
 
 
 
8e229a3
ccc5ec3
 
c543299
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ccc5ec3
 
 
 
 
 
 
 
 
 
 
 
 
c543299
ccc5ec3
 
 
 
c543299
ccc5ec3
c543299
ccc5ec3
 
 
 
 
 
 
 
 
c543299
 
 
 
 
 
 
 
ccc5ec3
c543299
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import os
import csv
import gradio as gr
from gradio import components
from huggingface_hub import Repository, hf_hub_download
from datetime import datetime

DATASET_REPO_URL = "https://huggingface.co/datasets/sjw/data.csv"
DATASET_REPO_ID = "sjw/data.csv"
DATA_FILENAME = "data.csv"
DIRNAME = "data"
DATA_FILE = os.path.join(DIRNAME, DATA_FILENAME)
HF_TOKEN = os.environ.get("HF_TOKEN")

# # overriding/appending to the gradio template
# SCRIPT = """
# <script>
# if (!window.hasBeenRun) {
#     window.hasBeenRun = true;
#     console.log("should only happen once");
#     document.querySelector("button.submit").click();
# }
# </script>
# """

try:
    hf_hub_download(
        repo_id=DATASET_REPO_ID,
        filename=DATA_FILENAME,
        force_filename=DATA_FILENAME
    )
except:
    print("file not found")

repo = Repository(
    local_dir = DIRNAME, clone_from=DATASET_REPO_URL, use_auth_token=HF_TOKEN
)

# def generate_html() -> str:
#     with open(DATA_FILE) as csvfile:
#         reader = csv.DictReader(csvfile)
#         rows = []
#         for row in reader:
#             rows.append(row)
#         rows.reverse()
#         if len(rows) == 0:
#             return "no messages yet"
#         else:
#             html = "<div class='chatbot'>"
#             for row in rows:
#                 html += "<div>"
#                 html += f"<span>{row['name']}</span>"
#                 html += f"<span class='message'>{row['message']}</span>"
#                 html += "</div>"
#             html += "</div>"
#             return html

# def store_message(name: str, message: str):
#     if name and message:
#         with open(DATA_FILE, "a") as csvfile:
#             writer = csv.DictWriter(csvfile, fieldnames=["name", "message", "time"])
#             writer.writerow(
#                 {"name": name, "message": message, "time": str(datetime.now())}
#             )
#         commit_url = repo.push_to_hub()
#     return generate_html()

# iface = gr.Interface(
#     store_message,
#     [
#         components.Textbox(placeholder="Your name"),
#         components.Textbox(placeholder="Your message", lines=2),
#     ],
#     "html",
#     css="""
#     .name {background-color:cornflowerblue;color:white; padding:4px;margin:4px;border-radius:4px; }
#     """,
#     title="Reading/writing to a HuggingFace dataset repo from Spaces",
#     description=f"This is a demo of how to do simple *shared data persistence* in a Gradio Space, backed by a dataset repo.",
#     article=f"The dataset repo is [{DATASET_REPO_URL}]({DATASET_REPO_URL})",
#     allow_flagging="never"
# )

# iface.launch()
def generate_html() -> str:
    with open(DATA_FILE) as csvfile:
        reader = csv.DictReader(csvfile)
        rows = []
        for row in reader:
            rows.append(row)
        rows.reverse()
        if len(rows) == 0:
            return "no messages yet"
        else:
            html = "<div class='chatbot'>"
            for row in rows:
                html += "<div>"
                html += f"<span><b>{row['name']}</b></span> "  # Make the name bold and add a space after it
                html += f"<span class='message'>{row['message']}</span>"
                html += "</div>"
            html += "</div>"
            return html
        
def store_message(name: str, message: str):

    if name and message:
        with open(DATA_FILE, "a") as csvfile:
            writer = csv.DictWriter(csvfile, fieldnames=["name", "message", "time"])
            writer.writerow(
                {"name": name, "message": message, "time": str(datetime.now())}
            )
        commit_url = repo.push_to_hub()
    return generate_html()

with gr.Blocks() as demo:
    gr.Markdown("# Title")
    name_input = components.Textbox(label="Your Username")
    message_input = components.Textbox(label="Your Feedback", lines=2)
    output_html = gr.HTML()
    submit_button = gr.Button("Submit")

    submit_button.click(store_message, inputs=[name_input, message_input], outputs=output_html)

demo.launch()