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.
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/PKG-INFO +1 -1
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/pyproject.toml +1 -1
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/autoverse_cli.egg-info/PKG-INFO +1 -1
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/autoverse_cli.egg-info/SOURCES.txt +1 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/app_version.py +1 -1
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/avrs.py +2 -1
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/launcher.py +1 -1
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/launcher_util.py +50 -25
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/race_cloud_cfg_util.py +10 -2
- autoverse_cli-0.23.1/src/avrs/requests/leaderboard.py +74 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/teleport.py +5 -5
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/simconfig_util.py +20 -1
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/LICENSE +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/README.md +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/setup.cfg +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/autoverse_cli.egg-info/dependency_links.txt +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/autoverse_cli.egg-info/entry_points.txt +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/autoverse_cli.egg-info/requires.txt +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/autoverse_cli.egg-info/top_level.txt +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/__init__.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/argparse_help.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/can_tool.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/can_tool_util.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/cfg.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/race_cloud.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/race_cloud_bridge_can.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/race_cloud_fwd_api.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/race_cloud_util.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/change_camera.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/code_booz.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/demo.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/dump_sim_config.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/environment.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/fault_injection.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/get_object_config.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/list_sim_objects.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/log_path.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/misc.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/move_to_landmark.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/npc.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/race_control.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/request.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/reset_to_track.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/rest_request.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/restart.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/scenario_control.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/spawn_object.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/toggle_hud.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/vd.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/vehicle_input.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/requests/vehicle_replay.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/simconfig.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/tests.py +0 -0
- {autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/avrs/util.py +0 -0
@@ -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
|
@@ -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
|
-
|
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
|
-
|
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
|
-
|
111
|
-
|
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
|
-
|
114
|
-
|
115
|
-
|
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 =
|
118
|
-
staged_version =
|
119
|
-
return (True,
|
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
|
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
|
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
|
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
|
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=['
|
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
|
{autoverse_cli-0.21.1 → autoverse_cli-0.23.1}/src/autoverse_cli.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|