gursi26 commited on
Commit
cd2b5b8
·
1 Parent(s): 5111218

refactor for better gradio api interface

Browse files
Files changed (1) hide show
  1. app.py +115 -31
app.py CHANGED
@@ -95,6 +95,98 @@ CSS = """
95
  }
96
  """
97
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  def handle_request(
99
  command, gripper_value, gripper_speed, angle1, angle2, angle3, angle4,
100
  angle5, angle6, angle_speed, xcoord, ycoord, zcoord, roll, pitch, yaw, coord_speed,image_box
@@ -242,52 +334,44 @@ with gr.Blocks(css=CSS) as app:
242
 
243
  # Queue-aware event handling
244
  angle_query_button.click(
245
- process_user_auth,
246
- inputs = [gr.Textbox(value="query/angles", visible=False), user_id, gripper_value, speed_gripper, angle1, angle2, angle3, angle4,
247
- angle5, angle6, speed_angles, xcoord, ycoord, zcoord, roll, pitch, yaw, speed_coords, response_image],
248
- outputs = [response, response_image, status_text]
249
  )
250
  coord_query_button.click(
251
- process_user_auth,
252
- inputs = [gr.Textbox(value="query/coords", visible=False), user_id, gripper_value, speed_gripper, angle1, angle2, angle3, angle4,
253
- angle5, angle6, speed_angles, xcoord, ycoord, zcoord, roll, pitch, yaw, speed_coords, response_image],
254
- outputs = [response, response_image, status_text]
255
  )
256
  gripper_query_button.click(
257
- process_user_auth,
258
- inputs = [gr.Textbox(value="query/gripper", visible=False), user_id, gripper_value, speed_gripper, angle1, angle2, angle3, angle4,
259
- angle5, angle6, speed_angles, xcoord, ycoord, zcoord, roll, pitch, yaw, speed_coords, response_image],
260
- outputs = [response, response_image, status_text]
261
  )
262
  camera_query_button.click(
263
- process_user_auth,
264
- inputs = [gr.Textbox(value="query/camera", visible=False), user_id, gripper_value, speed_gripper, angle1, angle2, angle3, angle4,
265
- angle5, angle6, speed_angles, xcoord, ycoord, zcoord, roll, pitch, yaw, speed_coords, response_image],
266
  outputs = [response, response_image, status_text]
267
  )
268
  gripper_control_button.click(
269
- process_user_auth,
270
- inputs = [gr.Textbox(value="control/gripper", visible=False), user_id, gripper_value, speed_gripper, angle1, angle2, angle3, angle4,
271
- angle5, angle6, speed_angles, xcoord, ycoord, zcoord, roll, pitch, yaw, speed_coords, response_image],
272
- outputs = [response, response_image, status_text]
273
  )
274
  angle_control_button.click(
275
- process_user_auth,
276
- inputs = [gr.Textbox(value="control/angles", visible=False), user_id, gripper_value, speed_gripper, angle1, angle2, angle3, angle4,
277
- angle5, angle6, speed_angles, xcoord, ycoord, zcoord, roll, pitch, yaw, speed_coords, response_image],
278
- outputs = [response, response_image, status_text]
279
  )
280
  coord_control_button.click(
281
- process_user_auth,
282
- inputs = [gr.Textbox(value="control/coords", visible=False), user_id, gripper_value, speed_gripper, angle1, angle2, angle3, angle4,
283
- angle5, angle6, speed_angles, xcoord, ycoord, zcoord, roll, pitch, yaw, speed_coords, response_image],
284
- outputs = [response, response_image, status_text]
285
  )
286
  enter_queue_button.click(
287
- process_user_auth,
288
- inputs = [gr.Textbox(value="enterqueue", visible=False), user_id, gripper_value, speed_gripper, angle1, angle2, angle3, angle4,
289
- angle5, angle6, speed_angles, xcoord, ycoord, zcoord, roll, pitch, yaw, speed_coords, response_image],
290
- outputs = [response, response_image, status_text]
291
  )
292
 
293
  app.load(
 
95
  }
96
  """
97
 
98
+ """
99
+ checks the user position on the queue and returns a message along with
100
+ whether the command should be executed.
101
+ """
102
+ def authenticate_user(user_id):
103
+ if queue_system.current_user is None:
104
+ queue_system.start_session(user_id)
105
+ queue_system.enqueue_user(user_id)
106
+ position, wait_time = queue_system.get_queue_info(user_id)
107
+
108
+ if position == 0:
109
+ remaining_time_msg = f"Your turn!\nTime remaining: {wait_time:.2f} seconds."
110
+ return True, remaining_time_msg
111
+ elif position is not None:
112
+ if position == 1:
113
+ wait_msg = f"You are next!\nWait time: {wait_time:.2f} seconds."
114
+ else:
115
+ wait_msg = f"There are {position - 1} people ahead of you in the queue.\nWait time: {wait_time:.2f} seconds."
116
+ return False, wait_msg
117
+ else:
118
+ return False, "Error: You are not in the queue."
119
+
120
+ def enter_queue(user_id):
121
+ _, msg = authenticate_user(user_id)
122
+ return msg
123
+
124
+ def query_angles(user_id):
125
+ to_execute, queue_status_msg = authenticate_user(user_id)
126
+ if to_execute:
127
+ resp = client.get_angles()
128
+ resp["command"] = "query/angles"
129
+ return json.dumps(resp, indent=4), queue_status_msg
130
+ else:
131
+ return None, queue_status_msg
132
+
133
+ def query_coords(user_id):
134
+ to_execute, queue_status_msg = authenticate_user(user_id)
135
+ if to_execute:
136
+ resp = client.get_coords()
137
+ resp["command"] = "query/coords"
138
+ return json.dumps(resp, indent=4), queue_status_msg
139
+ else:
140
+ return None, queue_status_msg
141
+
142
+ def query_gripper(user_id):
143
+ to_execute, queue_status_msg = authenticate_user(user_id)
144
+ if to_execute:
145
+ resp = client.get_gripper_value()
146
+ resp["command"] = "query/gripper"
147
+ return json.dumps(resp, indent=4), queue_status_msg
148
+ else:
149
+ return None, queue_status_msg
150
+
151
+ def query_camera(user_id):
152
+ to_execute, queue_status_msg = authenticate_user(user_id)
153
+ if to_execute:
154
+ resp = client.get_camera()
155
+ resp["command"] = "query/camera"
156
+ if not resp["success"]:
157
+ return json.dumps(resp, indent=4), None, queue_status_msg
158
+ img = resp.pop("image")
159
+ return json.dumps(resp, indent=4), gr.Image(visible=True, value=img), queue_status_msg
160
+ else:
161
+ return None, None, queue_status_msg
162
+
163
+ def control_angles(user_id, angle0, angle1, angle2, angle3, angle4, angle5, movement_speed):
164
+ to_execute, queue_status_msg = authenticate_user(user_id)
165
+ if to_execute:
166
+ resp = client.send_angles([angle0, angle1, angle2, angle3, angle4, angle5], movement_speed)
167
+ resp["command"] = "control/angles"
168
+ return json.dumps(resp, indent=4), queue_status_msg
169
+ else:
170
+ return None, queue_status_msg
171
+
172
+ def control_coords(user_id, x, y, z, roll, pitch, yaw, movement_speed):
173
+ to_execute, queue_status_msg = authenticate_user(user_id)
174
+ if to_execute:
175
+ resp = client.send_coords([x, y, z, roll, pitch, yaw], movement_speed)
176
+ resp["command"] = "control/coords"
177
+ return json.dumps(resp, indent=4), queue_status_msg
178
+ else:
179
+ return None, queue_status_msg
180
+
181
+ def control_gripper(user_id, gripper_value, movement_speed):
182
+ to_execute, queue_status_msg = authenticate_user(user_id)
183
+ if to_execute:
184
+ resp = client.send_gripper_value(gripper_value, movement_speed)
185
+ resp["command"] = "control/gripper"
186
+ return json.dumps(resp, indent=4), queue_status_msg
187
+ else:
188
+ return None, queue_status_msg
189
+
190
  def handle_request(
191
  command, gripper_value, gripper_speed, angle1, angle2, angle3, angle4,
192
  angle5, angle6, angle_speed, xcoord, ycoord, zcoord, roll, pitch, yaw, coord_speed,image_box
 
334
 
335
  # Queue-aware event handling
336
  angle_query_button.click(
337
+ query_angles,
338
+ inputs = [user_id],
339
+ outputs = [response, status_text]
 
340
  )
341
  coord_query_button.click(
342
+ query_coords,
343
+ inputs = [user_id],
344
+ outputs = [response, status_text]
 
345
  )
346
  gripper_query_button.click(
347
+ query_gripper,
348
+ inputs = [user_id],
349
+ outputs = [response, status_text]
 
350
  )
351
  camera_query_button.click(
352
+ query_camera,
353
+ inputs = [user_id],
 
354
  outputs = [response, response_image, status_text]
355
  )
356
  gripper_control_button.click(
357
+ control_gripper,
358
+ inputs = [user_id, gripper_value, speed_gripper],
359
+ outputs = [response, status_text]
 
360
  )
361
  angle_control_button.click(
362
+ control_angles,
363
+ inputs = [user_id, angle1, angle2, angle3, angle4, angle5, angle6, speed_angles],
364
+ outputs = [response, status_text]
 
365
  )
366
  coord_control_button.click(
367
+ control_coords,
368
+ inputs = [user_id, xcoord, ycoord, zcoord, roll, pitch, yaw, speed_coords],
369
+ outputs = [response, status_text]
 
370
  )
371
  enter_queue_button.click(
372
+ enter_queue,
373
+ inputs = [user_id],
374
+ outputs = [status_text]
 
375
  )
376
 
377
  app.load(