autoverse-cli 0.29.1.dev409__tar.gz → 0.29.1.dev410__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/PKG-INFO +1 -1
  2. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/pyproject.toml +1 -1
  3. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/autoverse_cli.egg-info/PKG-INFO +1 -1
  4. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/app_version.py +1 -1
  5. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/race_cloud.py +0 -13
  6. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/race_cloud_util.py +22 -31
  7. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/LICENSE +0 -0
  8. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/README.md +0 -0
  9. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/setup.cfg +0 -0
  10. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/autoverse_cli.egg-info/SOURCES.txt +0 -0
  11. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/autoverse_cli.egg-info/dependency_links.txt +0 -0
  12. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/autoverse_cli.egg-info/entry_points.txt +0 -0
  13. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/autoverse_cli.egg-info/requires.txt +0 -0
  14. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/autoverse_cli.egg-info/top_level.txt +0 -0
  15. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/__init__.py +0 -0
  16. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/argparse_help.py +0 -0
  17. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/avrs.py +0 -0
  18. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/can_tool.py +0 -0
  19. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/can_tool_util.py +0 -0
  20. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/cfg.py +0 -0
  21. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/launcher.py +0 -0
  22. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/launcher_util.py +0 -0
  23. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/race_cloud_bridge_can.py +0 -0
  24. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/race_cloud_cfg_util.py +0 -0
  25. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/race_cloud_fwd_api.py +0 -0
  26. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/change_camera.py +0 -0
  27. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/code_booz.py +0 -0
  28. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/demo.py +0 -0
  29. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/dump_sim_config.py +0 -0
  30. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/environment.py +0 -0
  31. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/fault_injection.py +0 -0
  32. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/get_object_config.py +0 -0
  33. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/get_web_viz_meta.py +0 -0
  34. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/leaderboard.py +0 -0
  35. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/list_sim_objects.py +0 -0
  36. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/log_path.py +0 -0
  37. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/misc.py +0 -0
  38. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/move_to_landmark.py +0 -0
  39. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/npc.py +0 -0
  40. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/race_control.py +0 -0
  41. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/request.py +0 -0
  42. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/reset_to_track.py +0 -0
  43. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/rest_request.py +0 -0
  44. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/restart.py +0 -0
  45. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/scenario_control.py +0 -0
  46. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/spawn_object.py +0 -0
  47. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/teleport.py +0 -0
  48. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/toggle_hud.py +0 -0
  49. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/vd.py +0 -0
  50. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/vehicle_input.py +0 -0
  51. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/requests/vehicle_replay.py +0 -0
  52. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/shell_completion.py +0 -0
  53. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/simconfig.py +0 -0
  54. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/simconfig_util.py +0 -0
  55. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/tests.py +0 -0
  56. {autoverse_cli-0.29.1.dev409 → autoverse_cli-0.29.1.dev410}/src/avrs/util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autoverse-cli
3
- Version: 0.29.1.dev409
3
+ Version: 0.29.1.dev410
4
4
  Summary: The Autoverse CLI
5
5
  Author-email: Dan Kamrath <dan.kamrath@autonomalabs.com>
6
6
  License: # End-User License Agreement (EULA) of the Autonoma AutoVerse CLI
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "autoverse-cli"
3
- version = "0.29.1.dev409"
3
+ version = "0.29.1.dev410"
4
4
  dependencies = [
5
5
  "boto3",
6
6
  "cantools",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autoverse-cli
3
- Version: 0.29.1.dev409
3
+ Version: 0.29.1.dev410
4
4
  Summary: The Autoverse CLI
5
5
  Author-email: Dan Kamrath <dan.kamrath@autonomalabs.com>
6
6
  License: # End-User License Agreement (EULA) of the Autonoma AutoVerse CLI
@@ -2,7 +2,7 @@ import http.client
2
2
  import json
3
3
 
4
4
  def get_app_version():
5
- return '0.29.1.dev409'
5
+ return '0.29.1.dev410'
6
6
 
7
7
  def check_app_is_latest():
8
8
  pass
@@ -209,13 +209,8 @@ class AvrsRaceCloud(AvrsApiRequest):
209
209
  def race_connect(self, args):
210
210
  logger = logging.getLogger('avrs')
211
211
 
212
- print('[DEBUG] ===== RACE CONNECT START =====')
213
- print('[DEBUG] sim_target argument: {}'.format(args.sim_target))
214
-
215
212
  # Validate sim_target (can be legacy index 0-5 or public IP only)
216
213
  is_valid, parsed_value, is_ip = parse_sim_target(args.sim_target)
217
- print('[DEBUG] parse_sim_target result: is_valid={}, parsed_value={}, is_ip={}'.format(
218
- is_valid, parsed_value, is_ip))
219
214
 
220
215
  if not is_valid:
221
216
  print('invalid sim_target: {}'.format(parsed_value))
@@ -223,7 +218,6 @@ class AvrsRaceCloud(AvrsApiRequest):
223
218
 
224
219
  # make api call to begin connection
225
220
  our_ip = get_local_instance_ip()
226
- print('[DEBUG] Local instance IP (our_ip): {}'.format(our_ip))
227
221
 
228
222
  if our_ip == '127.0.0.1':
229
223
  print('this machines IP was returned as localhost. was this run on the cloud instance?')
@@ -280,18 +274,11 @@ class AvrsRaceCloud(AvrsApiRequest):
280
274
  'config_data': vcfg_data
281
275
  }
282
276
 
283
- print('[DEBUG] ===== CONNECTION REQUEST =====')
284
- print('[DEBUG] sim_id (parsed): {}'.format(parsed_value))
285
- print('[DEBUG] our_ip: {}'.format(our_ip))
286
- print('[DEBUG] team_name: {}'.format(args.team_name))
287
- print('[DEBUG] instance_id override: {}'.format(args.instance_id))
288
-
289
277
  ok, response = call_race_cloud_api(connection_request)
290
278
  if not ok:
291
279
  print('connect api error: {}'.format(response))
292
280
  return
293
281
 
294
- print('[DEBUG] API call succeeded, parsing response...')
295
282
  ok, rbody, sim_ip = get_api_script_response(response)
296
283
  if not ok:
297
284
  print(rbody)
@@ -366,21 +366,13 @@ def call_race_cloud_api(body):
366
366
  url = 'https://9gca6018p0.execute-api.us-east-1.amazonaws.com/backend/race-connect'
367
367
  region = 'us-east-1'
368
368
 
369
- print('[DEBUG] ===== RACE CLOUD API CALL =====')
370
- print('[DEBUG] URL: {}'.format(url))
371
- print('[DEBUG] Request body: {}'.format(json.dumps(body, indent=2)))
372
-
373
369
  # Get credentials from boto3 session (uses IAM role on EC2)
374
370
  session = boto3.Session()
375
371
  credentials = session.get_credentials()
376
372
 
377
373
  if credentials is None:
378
- print('[DEBUG] ERROR: No AWS credentials found!')
379
374
  return (False, 'No AWS credentials available')
380
375
 
381
- print('[DEBUG] AWS credentials found: access_key={}...'.format(
382
- credentials.access_key[:10] if credentials.access_key else 'None'))
383
-
384
376
  # Prepare the request body
385
377
  body_json = json.dumps(body)
386
378
 
@@ -395,14 +387,6 @@ def call_race_cloud_api(body):
395
387
  # Sign the request with SigV4
396
388
  SigV4Auth(credentials, 'execute-api', region).add_auth(request)
397
389
 
398
- print('[DEBUG] Request headers after signing:')
399
- for k, v in request.headers.items():
400
- # Don't print full auth header for security
401
- if k.lower() == 'authorization':
402
- print('[DEBUG] {}: {}...'.format(k, v[:50]))
403
- else:
404
- print('[DEBUG] {}: {}'.format(k, v))
405
-
406
390
  # Make the request using urllib
407
391
  try:
408
392
  req = urllib.request.Request(
@@ -411,35 +395,42 @@ def call_race_cloud_api(body):
411
395
  headers=dict(request.headers),
412
396
  method='POST'
413
397
  )
414
- print('[DEBUG] Sending request...')
415
398
  with urllib.request.urlopen(req) as response:
416
399
  response_body = response.read().decode('utf-8')
417
- print('[DEBUG] Response status: {}'.format(response.status))
418
- print('[DEBUG] Response body (first 500 chars): {}'.format(response_body[:500]))
419
400
  return (True, response_body)
420
401
  except urllib.error.HTTPError as e:
421
402
  error_body = e.read().decode('utf-8')
422
- print('[DEBUG] HTTP ERROR!')
423
- print('[DEBUG] Status code: {}'.format(e.code))
424
- print('[DEBUG] Reason: {}'.format(e.reason))
425
- print('[DEBUG] Headers: {}'.format(dict(e.headers)))
426
- print('[DEBUG] Body: {}'.format(error_body))
427
403
  logger.error('API error - status: {}, body: {}'.format(e.code, error_body))
428
404
  return (False, 'response had status code {} - {}'.format(e.code, error_body))
429
405
  except Exception as e:
430
- print('[DEBUG] EXCEPTION: {} - {}'.format(type(e).__name__, str(e)))
431
406
  logger.error('API request failed: {}'.format(str(e)))
432
407
  return (False, 'request failed: {}'.format(str(e)))
433
408
 
434
409
  def get_api_script_response(raw):
435
410
  logger = logging.getLogger('avrs')
436
- # Parse API Gateway response, then parse the body which is also JSON string
411
+
412
+ # Parse the raw JSON response
437
413
  api_response = json.loads(raw)
438
- body_str = api_response['body']
439
- # Body is a JSON string from Lambda Proxy integration
440
- decoded = json.loads(body_str) if isinstance(body_str, str) else body_str
414
+
415
+ # Handle different response formats from API Gateway
416
+ # Format 1: {"body": "{...}"} - Lambda Proxy integration with string body
417
+ # Format 2: {"script_response": {...}, "sim_private_ip": ...} - Direct response
418
+ if 'body' in api_response:
419
+ body_str = api_response['body']
420
+ # Body is a JSON string from Lambda Proxy integration
421
+ decoded = json.loads(body_str) if isinstance(body_str, str) else body_str
422
+ else:
423
+ # Response came directly without body wrapper
424
+ decoded = api_response
425
+
441
426
  logger.info('race cloud api response: {}'.format(decoded))
427
+
442
428
  if decoded['script_response']['statusCode'] != 200:
443
429
  return (False, 'inner response had bad status code {}'.format(decoded))
444
- #print(decoded)
445
- return (True, json.loads(decoded['script_response']['body']), decoded['sim_private_ip'])
430
+
431
+ # Parse the script_response body
432
+ script_body = decoded['script_response']['body']
433
+ if isinstance(script_body, str):
434
+ script_body = json.loads(script_body)
435
+
436
+ return (True, script_body, decoded['sim_private_ip'])