Abhishek Thakur commited on
Commit
f6ae029
·
1 Parent(s): b8f5110

add submission selection

Browse files
competitions/__init__.py CHANGED
@@ -3,7 +3,7 @@ import os
3
  from .info import CompetitionInfo
4
 
5
 
6
- __version__ = "0.0.7"
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"] is True]["submission_id"].values.tolist()
39
  if len(selected_submission_ids) > 0:
40
  return [
41
  gr.Markdown.update(visible=True),
42
- gr.DataFrame.update(visible=True, data=df),
43
- gr.TextArea.update(visible=False, value="\n".join(selected_submission_ids)),
 
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(visible=False, label="Selected Submissions")
 
 
 
 
 
 
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"]