autoverse-cli 0.21.1__tar.gz → 0.23.1__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 (54) hide show
  1. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/PKG-INFO +1 -1
  2. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/pyproject.toml +1 -1
  3. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/autoverse_cli.egg-info/PKG-INFO +1 -1
  4. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/autoverse_cli.egg-info/SOURCES.txt +1 -0
  5. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/app_version.py +1 -1
  6. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/avrs.py +2 -1
  7. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/launcher.py +1 -1
  8. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/launcher_util.py +50 -25
  9. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/race_cloud_cfg_util.py +10 -2
  10. autoverse_cli-0.23.1/src/avrs/requests/leaderboard.py +74 -0
  11. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/teleport.py +5 -5
  12. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/simconfig_util.py +20 -1
  13. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/LICENSE +0 -0
  14. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/README.md +0 -0
  15. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/setup.cfg +0 -0
  16. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/autoverse_cli.egg-info/dependency_links.txt +0 -0
  17. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/autoverse_cli.egg-info/entry_points.txt +0 -0
  18. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/autoverse_cli.egg-info/requires.txt +0 -0
  19. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/autoverse_cli.egg-info/top_level.txt +0 -0
  20. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/__init__.py +0 -0
  21. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/argparse_help.py +0 -0
  22. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/can_tool.py +0 -0
  23. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/can_tool_util.py +0 -0
  24. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/cfg.py +0 -0
  25. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/race_cloud.py +0 -0
  26. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/race_cloud_bridge_can.py +0 -0
  27. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/race_cloud_fwd_api.py +0 -0
  28. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/race_cloud_util.py +0 -0
  29. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/change_camera.py +0 -0
  30. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/code_booz.py +0 -0
  31. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/demo.py +0 -0
  32. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/dump_sim_config.py +0 -0
  33. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/environment.py +0 -0
  34. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/fault_injection.py +0 -0
  35. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/get_object_config.py +0 -0
  36. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/list_sim_objects.py +0 -0
  37. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/log_path.py +0 -0
  38. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/misc.py +0 -0
  39. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/move_to_landmark.py +0 -0
  40. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/npc.py +0 -0
  41. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/race_control.py +0 -0
  42. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/request.py +0 -0
  43. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/reset_to_track.py +0 -0
  44. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/rest_request.py +0 -0
  45. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/restart.py +0 -0
  46. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/scenario_control.py +0 -0
  47. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/spawn_object.py +0 -0
  48. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/toggle_hud.py +0 -0
  49. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/vd.py +0 -0
  50. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/vehicle_input.py +0 -0
  51. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/vehicle_replay.py +0 -0
  52. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/simconfig.py +0 -0
  53. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/tests.py +0 -0
  54. {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autoverse-cli
3
- Version: 0.21.1
3
+ Version: 0.23.1
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.21.1"
3
+ version = "0.23.1"
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.21.1
3
+ Version: 0.23.1
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
@@ -32,6 +32,7 @@ src/avrs/requests/dump_sim_config.py
32
32
  src/avrs/requests/environment.py
33
33
  src/avrs/requests/fault_injection.py
34
34
  src/avrs/requests/get_object_config.py
35
+ src/avrs/requests/leaderboard.py
35
36
  src/avrs/requests/list_sim_objects.py
36
37
  src/avrs/requests/log_path.py
37
38
  src/avrs/requests/misc.py
@@ -2,7 +2,7 @@ import http.client
2
2
  import json
3
3
 
4
4
  def get_app_version():
5
- return '0.21.1'
5
+ return '0.23.1'
6
6
 
7
7
  def check_app_is_latest():
8
8
  pass
@@ -34,7 +34,7 @@ from avrs.requests.get_object_config import *
34
34
  from avrs.requests.misc import *
35
35
  from avrs.requests.spawn_object import *
36
36
  from avrs.requests.dump_sim_config import *
37
-
37
+ from avrs.requests.leaderboard import AvrsLeaderboardRequest
38
38
 
39
39
  def get_version():
40
40
  return get_app_version()
@@ -120,6 +120,7 @@ def main():
120
120
  AvrsSimConfig(sps, cfg)
121
121
  AvrsScenarioRequests(sps, cfg)
122
122
  AvrsListSimObjectsRequest(sps, cfg)
123
+ AvrsLeaderboardRequest(sps, cfg)
123
124
  AvrsFaultInjectionRequests(sps, cfg)
124
125
  AvrsChangeCameraRequest(sps, cfg)
125
126
  AvrsToggleHudRequest(sps, cfg)
@@ -91,7 +91,7 @@ class AvrsLauncher:
91
91
 
92
92
  def get_variants(self, args):
93
93
  if 'license' not in self.cfg:
94
- status += 'no license has been registered\n'
94
+ print('no license has been registered\n')
95
95
  return
96
96
 
97
97
  (dl_keys_ok, dl_keys_status, self.cfg) = try_get_launcher_download_keys(self.cfg)
@@ -51,18 +51,41 @@ def try_get_launcher_download_keys(cfg):
51
51
  }).encode('utf-8')
52
52
  connection.request('POST', '/test', body, headers)
53
53
  response = connection.getresponse()
54
- if response.status != 200:
55
- status = 'response had status code {}'.format(response)
56
- return (False, status, out_cfg)
57
- dlinfo = json.loads(json.loads(response.read().decode('utf-8'))['body'])
58
-
59
- out_cfg['dlkey_id'] = dlinfo['dlkey_id']
60
- out_cfg['dlkey'] = dlinfo['dlkey']
61
- out_cfg['variants'] = dlinfo['variants']
62
-
63
- # set available variants here as well
64
54
 
65
- return (True, status, out_cfg)
55
+ api_ok = False
56
+ api_status = ""
57
+
58
+ if response.status == 200:
59
+ res_full = json.loads(response.read().decode('utf-8'))
60
+ status += "primary api response: {}".format(res_full)
61
+ dlinfo = json.loads(res_full['body'])
62
+ code = res_full['statusCode']
63
+ if code == 200:
64
+ api_ok = True
65
+ for k, v in dlinfo.items():
66
+ out_cfg[k] = v
67
+
68
+ if not api_ok:
69
+ #try other api
70
+ alt_api_url = 'uu6fmbvrhk.execute-api.us-east-1.amazonaws.com'
71
+ connection = http.client.HTTPSConnection(alt_api_url)
72
+ connection.request('POST', '/test/alt', body, headers)
73
+ response = connection.getresponse()
74
+ if response.status == 200:
75
+ res_full = json.loads(response.read().decode('utf-8'))
76
+ status += "alt api response: {}".format(res_full)
77
+ dlinfo = json.loads(res_full.get('body', "{}"))
78
+ code = res_full['statusCode']
79
+ if code == 200:
80
+ api_ok = True
81
+ for k, v in dlinfo.items():
82
+ out_cfg[k] = v
83
+ else:
84
+ status += "primary and alt returned non 200"
85
+ else:
86
+ status += "primary and alt returned non 200"
87
+
88
+ return (api_ok, status, out_cfg)
66
89
 
67
90
  def has_launcher_download_keys(cfg):
68
91
  """
@@ -100,23 +123,25 @@ def get_launcher_build_info(cfg):
100
123
  """
101
124
  Contacts API to discover the current latest build version
102
125
  """
103
- status = ''
104
- db_resource = boto3.resource(
105
- 'dynamodb',
106
- 'us-east-1',
107
- aws_access_key_id=cfg['dlkey_id'],
108
- aws_secret_access_key=cfg['dlkey'])
109
126
 
110
- table = db_resource.Table('autoverse-ci-meta')
111
- item = table.get_item(Key={'package-name': 'autoverse'})
127
+ api_url = 'zn5boqqk60.execute-api.us-east-1.amazonaws.com'
128
+ connection = http.client.HTTPSConnection(api_url)
129
+ headers = {'Content-type': 'application/json'}
130
+ connection.request('POST', '/test', {}, headers)
131
+ response = connection.getresponse()
132
+
133
+ if response.status != 200:
134
+ return (False, "get build info api returned {}".format(response.status), "", "")
112
135
 
113
- if not 'Item' in item or 'prod' not in item['Item'] or 'staging' not in item['Item']:
114
- status = 'Unable to Retrieve Latest Version'
115
- return (False, status, '', '')
136
+ res_full = json.loads(response.read().decode('utf-8'))
137
+ info = json.loads(res_full['body'])
138
+ code = res_full['statusCode']
139
+ if code != 200:
140
+ return (False, "get build info api returned {}".format(code), "", "")
116
141
 
117
- latest_version = item['Item']['prod']
118
- staged_version = item.get('Item', {}).get('staging', latest_version)
119
- return (True, status, latest_version, staged_version)
142
+ latest_version = info['prod']
143
+ staged_version = info.get('staging', latest_version)
144
+ return (True, "ok", latest_version, staged_version)
120
145
 
121
146
  def download_simulator_archive(cfg, source_path, target_path):
122
147
  """
@@ -13,7 +13,8 @@ from avrs.simconfig_util import *
13
13
  # inside SimConfigFiles instead of doing it manually
14
14
  EXPECTED_ENV_NAMES = [
15
15
  "yas",
16
- "adrome"
16
+ "adrome",
17
+ "suzuka"
17
18
  ]
18
19
 
19
20
  def get_payload(cfg_object, payload_name):
@@ -24,7 +25,6 @@ def get_payload(cfg_object, payload_name):
24
25
 
25
26
  def clear_autospawns():
26
27
  logger = logging.getLogger('avrs')
27
- # also need to edit the yas_marina_env.json to have autospawn for this config
28
28
  sim_path = os.environ.get('AVRS_INSTALL_PATH',
29
29
  os.path.join(os.environ['HOME'], 'autoverse-linux'))
30
30
  sim_saved = os.path.join(sim_path, 'Linux', 'Autoverse', 'Saved')
@@ -53,6 +53,10 @@ def clear_autospawns():
53
53
 
54
54
  # keep the default!
55
55
  cfg_files.files['main']['objectTemplatePaths'] = ['Objects/Eav24_default.json']
56
+
57
+ # we want splitscreen in cloud
58
+ cfg_files.files['main']['bEnableSplitscreen'] = True
59
+
56
60
  cfg_files.save()
57
61
 
58
62
  def register_received_vehicle(team_name, slot, cfg_data, bsu_vcan, kistler_vcan, badenia_vcan):
@@ -226,6 +230,10 @@ def register_received_vehicle(team_name, slot, cfg_data, bsu_vcan, kistler_vcan,
226
230
 
227
231
  for ee in EXPECTED_ENV_NAMES:
228
232
  entry_exists = False
233
+
234
+ # we want logging on for all environments
235
+ cfg_files.files[ee]['bAutoRecordVehicles'] = True
236
+
229
237
  for i in cfg_files.files[ee]['autoSpawnObjects']:
230
238
  if 'objectSpec' in i and i['objectSpec'] == cfg_object['specName']:
231
239
  entry_exists = True
@@ -0,0 +1,74 @@
1
+ from avrs.requests.request import AvrsApiRequest
2
+
3
+ class AvrsLeaderboardRequest():
4
+ def __init__(self, parser, cfg):
5
+ psr = parser.add_parser('leaderboard', help='utilities for leaderboard management')
6
+ sps = psr.add_subparsers(required= True, help='sub-command of leaderboard')
7
+ ToggleLeaderboard(sps, cfg)
8
+ ChronoLeaderboard(sps, cfg)
9
+ LapsLeaderboard(sps, cfg)
10
+ ResetLeaderboard(sps, cfg)
11
+
12
+ class ToggleLeaderboard(AvrsApiRequest):
13
+ def __init__(self, parser, cfg):
14
+ AvrsApiRequest.__init__(self, parser, cfg, 'ToggleLeaderboard', '')
15
+ psr = parser.add_parser('toggle', help='Toggles the leaderboard on or off')
16
+
17
+ psr.set_defaults(func=self.send_request)
18
+
19
+ def get_request_body(self, args):
20
+ self.target_object_id = ''
21
+ return {
22
+ }
23
+
24
+ class ChronoLeaderboard(AvrsApiRequest):
25
+ def __init__(self, parser, cfg):
26
+ AvrsApiRequest.__init__(self, parser, cfg, 'ChronoLeaderboard', '')
27
+ psr = parser.add_parser('chrono', help='Displays some options for the chrono in free practice and qualifying')
28
+
29
+ group = psr.add_mutually_exclusive_group()
30
+ group.add_argument('--start', action='store_true', help="Start the timer")
31
+ group.add_argument('--stop', action='store_true', help="Stop the timer")
32
+ group.add_argument('--reset', action='store_true', help="Reset the timer to its initial value")
33
+
34
+ psr.add_argument('--set', type=int, help="Set a new initial value for the timer")
35
+
36
+ psr.set_defaults(func=self.send_request)
37
+
38
+ def get_request_body(self, args):
39
+ self.target_object_id = ''
40
+ return {
41
+ 'Start': args.start,
42
+ 'Stop': args.stop,
43
+ 'Reset': args.reset,
44
+ 'Set': args.set
45
+ }
46
+
47
+ class LapsLeaderboard(AvrsApiRequest):
48
+ def __init__(self, parser, cfg):
49
+ AvrsApiRequest.__init__(self, parser, cfg, 'LapsLeaderboard', '')
50
+ psr = parser.add_parser('set-laps', help='Set the number of laps to complete the race')
51
+
52
+ psr.add_argument('laps', type=int, help='Number of laps')
53
+
54
+ psr.set_defaults(func=self.send_request)
55
+
56
+ def get_request_body(self, args):
57
+ self.target_object_id = ''
58
+ return {
59
+ 'Laps': args.laps
60
+ }
61
+
62
+ class ResetLeaderboard(AvrsApiRequest):
63
+ def __init__(self, parser, cfg):
64
+ AvrsApiRequest.__init__(self, parser, cfg, 'ResetLeaderboard', '')
65
+ psr = parser.add_parser('reset', help='Reset all the leaderboard data')
66
+
67
+ psr.set_defaults(func=self.send_request)
68
+
69
+ def get_request_body(self, args):
70
+ self.target_object_id = ''
71
+ return {
72
+ }
73
+
74
+
@@ -5,21 +5,21 @@ class Teleport(AvrsApiRequest):
5
5
  AvrsApiRequest.__init__(self, parser, cfg, 'Teleport', "Ego")
6
6
 
7
7
  psr = parser.add_parser('teleport',
8
- help='Teleports the car to the given x,y,z in either enu or lla.')
8
+ help='Teleports the car to the given x,y,z in either NED or LLA.')
9
9
 
10
10
  psr.add_argument('x', type=float,
11
- help='new x position (NED meters) or latitude (if frame is set to lla)')
11
+ help='new x position (NED meters) or latitude (if frame is set to LLA)')
12
12
 
13
13
  psr.add_argument('y', type=float,
14
- help='new y position (NED meters) or longitude (if frame is set to lla)')
14
+ help='new y position (NED meters) or longitude (if frame is set to LLA)')
15
15
 
16
16
  psr.add_argument('z', type=float,
17
- help='new z position (NED meters) or altitude (if frame is set to lla)')
17
+ help='new z position (NED meters) or altitude (if frame is set to LLA)')
18
18
 
19
19
  psr.add_argument('--yaw', type=float, default=0.0,
20
20
  help='the yaw in degrees (0 north, + CW) to apply post teleport')
21
21
 
22
- psr.add_argument('--frame', choices=['lla', 'ned'], default='ned', help='LLA or NED coordinate system.')
22
+ psr.add_argument('--frame', choices=['LLA', 'ned'], default='ned', help='LLA or NED coordinate system.')
23
23
 
24
24
  psr.add_argument(
25
25
  '--object-name',
@@ -8,8 +8,27 @@ class SimConfigFiles():
8
8
  'main': os.path.join(saved_dir, 'simconfig.json'),
9
9
  'eav24': os.path.join(saved_dir, 'Objects', 'Eav24_default.json'),
10
10
  'yas': os.path.join(saved_dir, 'Environments', 'yasmarina_env.json'),
11
- 'adrome': os.path.join(saved_dir, 'Environments', 'autonodrome.json')
11
+ 'adrome': os.path.join(saved_dir, 'Environments', 'autonodrome.json'),
12
+ 'suzuka': os.path.join(saved_dir, "Environments", "Suzuka", "suzuka.json")
12
13
  }
14
+
15
+ self.alt_paths = {
16
+ "main": [],
17
+ "eav24": [],
18
+ "yas": [os.path.join(saved_dir, 'Environments', "YasMarina", 'yasmarina_env.json')],
19
+ "adrome": [os.path.join(saved_dir, 'Environments', "Autonodrome", 'autonodrome.json')],
20
+ "suzuka": [os.path.join(saved_dir, "Environments", "Suzuka", "suzuka.json")]
21
+ }
22
+
23
+ # support alternative paths for new directory structure, but retain backward compat
24
+ for k, v in self.required_files.items():
25
+ if not os.path.exists(v):
26
+ for alt_path in self.alt_paths.get(k, []):
27
+ if os.path.exists(alt_path):
28
+ print("could not find file under {} but found under alt path {}".format(
29
+ v, alt_path))
30
+ self.required_files[k] = alt_path
31
+
13
32
  self.files = {}
14
33
 
15
34
  ok, status = self.validate()
File without changes
File without changes
File without changes