Abhishek Thakur
commited on
Commit
·
f6ae029
1
Parent(s):
b8f5110
add submission selection
Browse files- competitions/__init__.py +1 -1
- competitions/competitions.py +31 -6
- competitions/submissions.py +32 -0
competitions/__init__.py
CHANGED
@@ -3,7 +3,7 @@ import os
|
|
3 |
from .info import CompetitionInfo
|
4 |
|
5 |
|
6 |
-
__version__ = "0.0.
|
7 |
|
8 |
MOONLANDING_URL = os.getenv("MOONLANDING_URL")
|
9 |
COMPETITION_ID = os.getenv("COMPETITION_ID")
|
|
|
3 |
from .info import CompetitionInfo
|
4 |
|
5 |
|
6 |
+
__version__ = "0.0.8"
|
7 |
|
8 |
MOONLANDING_URL = os.getenv("MOONLANDING_URL")
|
9 |
COMPETITION_ID = os.getenv("COMPETITION_ID")
|
competitions/competitions.py
CHANGED
@@ -34,21 +34,35 @@ def _my_submissions(user_token):
|
|
34 |
gr.Markdown.update(visible=True, value=NO_SUBMISSIONS),
|
35 |
gr.DataFrame.update(visible=False),
|
36 |
gr.TextArea.update(visible=False),
|
|
|
37 |
]
|
38 |
-
selected_submission_ids = df[df["selected"]
|
39 |
if len(selected_submission_ids) > 0:
|
40 |
return [
|
41 |
gr.Markdown.update(visible=True),
|
42 |
-
gr.DataFrame.update(visible=True,
|
43 |
-
gr.TextArea.update(visible=
|
|
|
44 |
]
|
45 |
return [
|
46 |
gr.Markdown.update(visible=False),
|
47 |
gr.DataFrame.update(visible=True, value=df),
|
48 |
-
gr.TextArea.update(visible=True),
|
|
|
49 |
]
|
50 |
|
51 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
with gr.Blocks() as demo:
|
53 |
with gr.Tabs() as tab_container:
|
54 |
with gr.TabItem("Overview", id="overview"):
|
@@ -84,12 +98,23 @@ with gr.Blocks() as demo:
|
|
84 |
)
|
85 |
output_text = gr.Markdown(visible=True, show_label=False)
|
86 |
output_df = gr.DataFrame(visible=False)
|
87 |
-
selected_submissions = gr.TextArea(
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
my_subs_button = gr.Button("Fetch Submissions")
|
89 |
my_subs_button.click(
|
90 |
fn=_my_submissions,
|
91 |
inputs=[user_token],
|
92 |
-
outputs=[output_text, output_df, selected_submissions],
|
|
|
|
|
|
|
|
|
|
|
93 |
)
|
94 |
|
95 |
fetch_lb_partial = partial(leaderboard.fetch, private=False)
|
|
|
34 |
gr.Markdown.update(visible=True, value=NO_SUBMISSIONS),
|
35 |
gr.DataFrame.update(visible=False),
|
36 |
gr.TextArea.update(visible=False),
|
37 |
+
gr.Button.update(visible=False),
|
38 |
]
|
39 |
+
selected_submission_ids = df[df["selected"] == True]["submission_id"].values.tolist()
|
40 |
if len(selected_submission_ids) > 0:
|
41 |
return [
|
42 |
gr.Markdown.update(visible=True),
|
43 |
+
gr.DataFrame.update(visible=True, value=df),
|
44 |
+
gr.TextArea.update(visible=True, value="\n".join(selected_submission_ids), interactive=True),
|
45 |
+
gr.Button.update(visible=True),
|
46 |
]
|
47 |
return [
|
48 |
gr.Markdown.update(visible=False),
|
49 |
gr.DataFrame.update(visible=True, value=df),
|
50 |
+
gr.TextArea.update(visible=True, interactive=True),
|
51 |
+
gr.Button.update(visible=True),
|
52 |
]
|
53 |
|
54 |
|
55 |
+
def _update_selected_submissions(user_token, submission_ids):
|
56 |
+
submission_ids = submission_ids.split("\n")
|
57 |
+
submission_ids = [sid.strip() for sid in submission_ids]
|
58 |
+
if len(submission_ids) > competition_info.selection_limit:
|
59 |
+
raise ValueError(
|
60 |
+
f"You can select only {competition_info.selection_limit} submissions. You selected {len(submission_ids)} submissions."
|
61 |
+
)
|
62 |
+
submissions.update_selected_submissions(user_token, submission_ids)
|
63 |
+
return _my_submissions(user_token)
|
64 |
+
|
65 |
+
|
66 |
with gr.Blocks() as demo:
|
67 |
with gr.Tabs() as tab_container:
|
68 |
with gr.TabItem("Overview", id="overview"):
|
|
|
98 |
)
|
99 |
output_text = gr.Markdown(visible=True, show_label=False)
|
100 |
output_df = gr.DataFrame(visible=False)
|
101 |
+
selected_submissions = gr.TextArea(
|
102 |
+
visible=False,
|
103 |
+
label="Selected Submissions (one submission id per line)",
|
104 |
+
max_lines=competition_info.selection_limit,
|
105 |
+
lines=competition_info.selection_limit,
|
106 |
+
)
|
107 |
+
update_selected_submissions = gr.Button("Update Selected Submissions", visible=False)
|
108 |
my_subs_button = gr.Button("Fetch Submissions")
|
109 |
my_subs_button.click(
|
110 |
fn=_my_submissions,
|
111 |
inputs=[user_token],
|
112 |
+
outputs=[output_text, output_df, selected_submissions, update_selected_submissions],
|
113 |
+
)
|
114 |
+
update_selected_submissions.click(
|
115 |
+
fn=_update_selected_submissions,
|
116 |
+
inputs=[user_token, selected_submissions],
|
117 |
+
outputs=[output_text, output_df, selected_submissions, update_selected_submissions],
|
118 |
)
|
119 |
|
120 |
fetch_lb_partial = partial(leaderboard.fetch, private=False)
|
competitions/submissions.py
CHANGED
@@ -156,6 +156,38 @@ class Submissions:
|
|
156 |
user_submission_info = json.load(f)
|
157 |
return user_submission_info["submissions"]
|
158 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
159 |
def _get_user_subs(self, user_info, private=False):
|
160 |
# get user submissions
|
161 |
user_id = user_info["id"]
|
|
|
156 |
user_submission_info = json.load(f)
|
157 |
return user_submission_info["submissions"]
|
158 |
|
159 |
+
def update_selected_submissions(self, user_token, selected_submission_ids):
|
160 |
+
user_info = self._get_user_info(user_token)
|
161 |
+
user_id = user_info["id"]
|
162 |
+
|
163 |
+
user_fname = hf_hub_download(
|
164 |
+
repo_id=self.competition_id,
|
165 |
+
filename=f"{user_id}.json",
|
166 |
+
use_auth_token=self.autotrain_token,
|
167 |
+
repo_type="dataset",
|
168 |
+
)
|
169 |
+
with open(user_fname, "r") as f:
|
170 |
+
user_submission_info = json.load(f)
|
171 |
+
|
172 |
+
for sub in user_submission_info["submissions"]:
|
173 |
+
if sub["submission_id"] in selected_submission_ids:
|
174 |
+
sub["selected"] = True
|
175 |
+
else:
|
176 |
+
sub["selected"] = False
|
177 |
+
|
178 |
+
# convert user_submission_info to BufferedIOBase file object
|
179 |
+
user_submission_info_json = json.dumps(user_submission_info)
|
180 |
+
user_submission_info_json_bytes = user_submission_info_json.encode("utf-8")
|
181 |
+
user_submission_info_json_buffer = io.BytesIO(user_submission_info_json_bytes)
|
182 |
+
api = HfApi()
|
183 |
+
api.upload_file(
|
184 |
+
path_or_fileobj=user_submission_info_json_buffer,
|
185 |
+
path_in_repo=f"{user_id}.json",
|
186 |
+
repo_id=self.competition_id,
|
187 |
+
repo_type="dataset",
|
188 |
+
token=self.autotrain_token,
|
189 |
+
)
|
190 |
+
|
191 |
def _get_user_subs(self, user_info, private=False):
|
192 |
# get user submissions
|
193 |
user_id = user_info["id"]
|