throaway2854 commited on
Commit
7cf4a2b
·
verified ·
1 Parent(s): b2a5952

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -27
app.py CHANGED
@@ -135,9 +135,6 @@ with gr.Blocks() as demo:
135
  datasets = gr.State({})
136
  current_dataset_name = gr.State("")
137
  current_page_number = gr.State(0)
138
-
139
- # Define entry_selector here but do not place it in the interface yet
140
- entry_selector = gr.Dropdown(label="Select Entry to Edit/Delete")
141
 
142
  # Top-level components
143
  with gr.Column():
@@ -152,7 +149,7 @@ with gr.Blocks() as demo:
152
  prev_button = gr.Button("Previous Page")
153
  next_button = gr.Button("Next Page")
154
 
155
- # Tabs as before
156
  with gr.Tabs():
157
  with gr.TabItem("Create / Upload Dataset"):
158
  with gr.Row():
@@ -204,9 +201,9 @@ with gr.Blocks() as demo:
204
 
205
  def add_entry(image_data, prompt, current_dataset_name, datasets):
206
  if not current_dataset_name:
207
- return datasets, gr.update(), gr.update(), gr.update(), "No dataset selected."
208
  if image_data is None or not prompt:
209
- return datasets, gr.update(), gr.update(), gr.update(), "Please provide both an image and a prompt."
210
  # Convert image_data to base64
211
  image = Image.fromarray(image_data.astype('uint8'))
212
  buffered = BytesIO()
@@ -218,22 +215,20 @@ with gr.Blocks() as demo:
218
  # Reset page number to 0 when a new entry is added
219
  page_number = 0
220
  html_content = display_dataset_html(dataset, page_number=page_number)
221
- # Update entry_selector options
222
- entry_options = [f"{idx}: {entry['prompt'][:30]}" for idx, entry in enumerate(dataset)]
223
- return datasets, page_number, gr.update(value=html_content), gr.update(choices=entry_options), f"Entry added to dataset '{current_dataset_name}'."
224
 
225
  add_button.click(
226
  add_entry,
227
  inputs=[image_input, prompt_input, current_dataset_name, datasets],
228
- outputs=[datasets, current_page_number, dataset_html, entry_selector, message_box]
229
  )
230
 
231
  with gr.TabItem("Edit / Delete Entry"):
232
  with gr.Column():
233
  selected_image = gr.Image(label="Selected Image", interactive=False, type="numpy")
234
  selected_prompt = gr.Textbox(label="Current Prompt", interactive=False)
235
- # Include entry_selector in the layout
236
- entry_selector
237
  new_prompt_input = gr.Textbox(label="New Prompt (for Edit)")
238
  with gr.Row():
239
  edit_button = gr.Button("Edit Entry")
@@ -260,16 +255,16 @@ with gr.Blocks() as demo:
260
 
261
  def edit_entry(entry_option, new_prompt, current_dataset_name, datasets, current_page_number):
262
  if not current_dataset_name:
263
- return datasets, gr.update(), gr.update(), gr.update(), gr.update(), "No dataset selected."
264
  if not entry_option or not new_prompt.strip():
265
- return datasets, gr.update(), gr.update(), gr.update(), gr.update(), "Please select an entry and provide a new prompt."
266
  index = int(entry_option.split(":")[0])
267
  datasets[current_dataset_name][index]['prompt'] = new_prompt
268
  dataset = datasets[current_dataset_name]
269
  html_content = display_dataset_html(dataset, page_number=current_page_number)
270
  # Update entry_selector options
271
  entry_options = [f"{idx}: {entry['prompt'][:30]}" for idx, entry in enumerate(dataset)]
272
- return datasets, gr.update(value=html_content), gr.update(choices=entry_options), gr.update(value=""), gr.update(), f"Entry {index} updated."
273
 
274
  edit_button.click(
275
  edit_entry,
@@ -279,21 +274,44 @@ with gr.Blocks() as demo:
279
 
280
  def delete_entry(entry_option, current_dataset_name, datasets, current_page_number):
281
  if not current_dataset_name:
282
- return datasets, gr.update(), gr.update(), gr.update(), gr.update(), gr.update(), "No dataset selected."
283
  if not entry_option:
284
- return datasets, gr.update(), gr.update(), gr.update(), gr.update(), gr.update(), "Please select an entry to delete."
285
  index = int(entry_option.split(":")[0])
286
  del datasets[current_dataset_name][index]
287
  dataset = datasets[current_dataset_name]
288
  html_content = display_dataset_html(dataset, page_number=current_page_number)
289
  # Update entry_selector options
290
  entry_options = [f"{idx}: {entry['prompt'][:30]}" for idx, entry in enumerate(dataset)]
291
- return datasets, gr.update(value=html_content), gr.update(choices=entry_options), gr.update(value=None), gr.update(value=""), f"Entry {index} deleted."
292
 
293
  delete_button.click(
294
  delete_entry,
295
  inputs=[entry_selector, current_dataset_name, datasets, current_page_number],
296
- outputs=[datasets, dataset_html, entry_selector, selected_image, selected_prompt, message_box]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
297
  )
298
 
299
  with gr.TabItem("Download Dataset"):
@@ -323,16 +341,14 @@ with gr.Blocks() as demo:
323
  if dataset_name in datasets:
324
  dataset = datasets[dataset_name]
325
  html_content = display_dataset_html(dataset, page_number=0)
326
- # Update entry_selector options
327
- entry_options = [f"{idx}: {entry['prompt'][:30]}" for idx, entry in enumerate(dataset)]
328
- return dataset_name, 0, gr.update(value=html_content), gr.update(choices=entry_options), ""
329
  else:
330
- return "", 0, gr.update(value="<div>Select a dataset.</div>"), gr.update(choices=[]), ""
331
 
332
  dataset_selector.change(
333
  select_dataset,
334
  inputs=[dataset_selector, datasets],
335
- outputs=[current_dataset_name, current_page_number, dataset_html, entry_selector, message_box]
336
  )
337
 
338
  def change_page(action, current_page_number, datasets, current_dataset_name):
@@ -361,14 +377,14 @@ with gr.Blocks() as demo:
361
  outputs=[current_page_number, dataset_html, message_box]
362
  )
363
 
364
- # Initialize dataset_selector and entry_selector
365
  def initialize_components(datasets):
366
- return gr.update(choices=list(datasets.keys())), gr.update(choices=[])
367
 
368
  demo.load(
369
  initialize_components,
370
  inputs=[datasets],
371
- outputs=[dataset_selector, entry_selector]
372
  )
373
 
374
  demo.launch()
 
135
  datasets = gr.State({})
136
  current_dataset_name = gr.State("")
137
  current_page_number = gr.State(0)
 
 
 
138
 
139
  # Top-level components
140
  with gr.Column():
 
149
  prev_button = gr.Button("Previous Page")
150
  next_button = gr.Button("Next Page")
151
 
152
+ # Tabs
153
  with gr.Tabs():
154
  with gr.TabItem("Create / Upload Dataset"):
155
  with gr.Row():
 
201
 
202
  def add_entry(image_data, prompt, current_dataset_name, datasets):
203
  if not current_dataset_name:
204
+ return datasets, gr.update(), gr.update(), "No dataset selected."
205
  if image_data is None or not prompt:
206
+ return datasets, gr.update(), gr.update(), "Please provide both an image and a prompt."
207
  # Convert image_data to base64
208
  image = Image.fromarray(image_data.astype('uint8'))
209
  buffered = BytesIO()
 
215
  # Reset page number to 0 when a new entry is added
216
  page_number = 0
217
  html_content = display_dataset_html(dataset, page_number=page_number)
218
+ return datasets, page_number, gr.update(value=html_content), f"Entry added to dataset '{current_dataset_name}'."
 
 
219
 
220
  add_button.click(
221
  add_entry,
222
  inputs=[image_input, prompt_input, current_dataset_name, datasets],
223
+ outputs=[datasets, current_page_number, dataset_html, message_box]
224
  )
225
 
226
  with gr.TabItem("Edit / Delete Entry"):
227
  with gr.Column():
228
  selected_image = gr.Image(label="Selected Image", interactive=False, type="numpy")
229
  selected_prompt = gr.Textbox(label="Current Prompt", interactive=False)
230
+ # Define entry_selector here
231
+ entry_selector = gr.Dropdown(label="Select Entry to Edit/Delete")
232
  new_prompt_input = gr.Textbox(label="New Prompt (for Edit)")
233
  with gr.Row():
234
  edit_button = gr.Button("Edit Entry")
 
255
 
256
  def edit_entry(entry_option, new_prompt, current_dataset_name, datasets, current_page_number):
257
  if not current_dataset_name:
258
+ return datasets, gr.update(), gr.update(), gr.update(), f"No dataset selected."
259
  if not entry_option or not new_prompt.strip():
260
+ return datasets, gr.update(), gr.update(), gr.update(), f"Please select an entry and provide a new prompt."
261
  index = int(entry_option.split(":")[0])
262
  datasets[current_dataset_name][index]['prompt'] = new_prompt
263
  dataset = datasets[current_dataset_name]
264
  html_content = display_dataset_html(dataset, page_number=current_page_number)
265
  # Update entry_selector options
266
  entry_options = [f"{idx}: {entry['prompt'][:30]}" for idx, entry in enumerate(dataset)]
267
+ return datasets, gr.update(value=html_content), gr.update(choices=entry_options), gr.update(value=""), f"Entry {index} updated."
268
 
269
  edit_button.click(
270
  edit_entry,
 
274
 
275
  def delete_entry(entry_option, current_dataset_name, datasets, current_page_number):
276
  if not current_dataset_name:
277
+ return datasets, gr.update(), gr.update(), gr.update(), gr.update(), "No dataset selected."
278
  if not entry_option:
279
+ return datasets, gr.update(), gr.update(), gr.update(), gr.update(), "Please select an entry to delete."
280
  index = int(entry_option.split(":")[0])
281
  del datasets[current_dataset_name][index]
282
  dataset = datasets[current_dataset_name]
283
  html_content = display_dataset_html(dataset, page_number=current_page_number)
284
  # Update entry_selector options
285
  entry_options = [f"{idx}: {entry['prompt'][:30]}" for idx, entry in enumerate(dataset)]
286
+ return datasets, gr.update(value=html_content), gr.update(choices=entry_options), gr.update(value=None), f"Entry {index} deleted."
287
 
288
  delete_button.click(
289
  delete_entry,
290
  inputs=[entry_selector, current_dataset_name, datasets, current_page_number],
291
+ outputs=[datasets, dataset_html, entry_selector, selected_image, message_box]
292
+ )
293
+
294
+ # Function to update entry_selector options
295
+ def update_entry_selector(current_dataset_name, datasets):
296
+ if current_dataset_name in datasets:
297
+ dataset = datasets[current_dataset_name]
298
+ entry_options = [f"{idx}: {entry['prompt'][:30]}" for idx, entry in enumerate(dataset)]
299
+ return gr.update(choices=entry_options)
300
+ else:
301
+ return gr.update(choices=[])
302
+
303
+ # Update entry_selector when dataset is selected
304
+ dataset_selector.change(
305
+ update_entry_selector,
306
+ inputs=[current_dataset_name, datasets],
307
+ outputs=[entry_selector]
308
+ )
309
+
310
+ # Also update entry_selector when an entry is added in "Add Entry" tab
311
+ add_button.click(
312
+ update_entry_selector,
313
+ inputs=[current_dataset_name, datasets],
314
+ outputs=[entry_selector]
315
  )
316
 
317
  with gr.TabItem("Download Dataset"):
 
341
  if dataset_name in datasets:
342
  dataset = datasets[dataset_name]
343
  html_content = display_dataset_html(dataset, page_number=0)
344
+ return dataset_name, 0, gr.update(value=html_content), f"Dataset '{dataset_name}' selected."
 
 
345
  else:
346
+ return "", 0, gr.update(value="<div>Select a dataset.</div>"), ""
347
 
348
  dataset_selector.change(
349
  select_dataset,
350
  inputs=[dataset_selector, datasets],
351
+ outputs=[current_dataset_name, current_page_number, dataset_html, message_box]
352
  )
353
 
354
  def change_page(action, current_page_number, datasets, current_dataset_name):
 
377
  outputs=[current_page_number, dataset_html, message_box]
378
  )
379
 
380
+ # Initialize dataset_selector
381
  def initialize_components(datasets):
382
+ return gr.update(choices=list(datasets.keys()))
383
 
384
  demo.load(
385
  initialize_components,
386
  inputs=[datasets],
387
+ outputs=[dataset_selector]
388
  )
389
 
390
  demo.launch()