autoverse-cli 0.26.1__py3-none-any.whl → 0.28.0__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autoverse-cli
3
- Version: 0.26.1
3
+ Version: 0.28.0
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,13 +1,13 @@
1
- autoverse_cli-0.26.1.dist-info/licenses/LICENSE,sha256=d4eWXho-u18HkBsX4K21uHX_bBb2UXZSrJdsb7Z_JlM,2647
1
+ autoverse_cli-0.28.0.dist-info/licenses/LICENSE,sha256=d4eWXho-u18HkBsX4K21uHX_bBb2UXZSrJdsb7Z_JlM,2647
2
2
  avrs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- avrs/app_version.py,sha256=sY1fpwqoCUAZ4uNFfM9x1GqSUrZ_mLqbJq7ZJUUmBoQ,856
3
+ avrs/app_version.py,sha256=ZjHNAVB1i4EOR8zaQm3u8kxZ4NK_k2M1L4pg57kjpx4,857
4
4
  avrs/argparse_help.py,sha256=EoEaohGXZXqJvs1dFEzbo9vh47CYdHdSY2Im2Ps2iFo,945
5
5
  avrs/avrs.py,sha256=pQHc8KLAD0hCxpBoNbXOgj2Et3qiqxSMKyAXFLwWFjE,5787
6
6
  avrs/can_tool.py,sha256=IBoctKobBJ3wCq4ZdtuXuXH4AMEUxazCfYT6YP0Luw8,7161
7
7
  avrs/can_tool_util.py,sha256=G3q21dTGMLc09SDq_RieoW7kSn-kXPkXxPDjavPh4hQ,7710
8
8
  avrs/cfg.py,sha256=kMn08Z4Ms1PAu2-U1QI8weEJeIVEppP4A4_tFfwnjtg,2924
9
- avrs/launcher.py,sha256=-aCRoGxRnuwTjuhjgi0hNE_zee-X-4nQYnGJfXpjLVA,11409
10
- avrs/launcher_util.py,sha256=o9owKiXxgEBE-p6cAgFLUZ6Y26CauZsDAglk4bRvkuA,6447
9
+ avrs/launcher.py,sha256=hPBRtUabUFDxT3-TUb1JrqrdH41tgsueQ8twO1rVk3U,11511
10
+ avrs/launcher_util.py,sha256=zXUbJByn9M-ErkNM6DvLCFtUkueYH-R0dehjQj0aYEs,6879
11
11
  avrs/race_cloud.py,sha256=0m7BdclKhTrqdAA2kLIobwfoYA8X_PRDCFWoizHtPIQ,20124
12
12
  avrs/race_cloud_bridge_can.py,sha256=K3is7GFzWo2KBojr6V65kz138UfkVFXXofVxSAziArY,2888
13
13
  avrs/race_cloud_cfg_util.py,sha256=TF_gsP7c_39MKs1CyzeXkTH-Fwyd8wLkFkMbqQVmdeo,12066
@@ -15,7 +15,7 @@ avrs/race_cloud_fwd_api.py,sha256=jB4kt6Shu9Pj96WPVjK790PZjucYxmuHjjVKczQfyZI,16
15
15
  avrs/race_cloud_util.py,sha256=g1gCxmK-8n32aNj0NWEiZr79s1rB0EYbGmNLabsIW0U,14297
16
16
  avrs/shell_completion.py,sha256=_IM85ADKQHYNMlTa1_nhnYWsgdOzRQ7tIFHxAT6EWWA,4298
17
17
  avrs/simconfig.py,sha256=UZc4FrxVHUkk2e9IglSpuojXkaL_nPrJW7trbEGgOOo,2907
18
- avrs/simconfig_util.py,sha256=EDsIwMZeoOm-oyiktVgvKRKjTZtnFyPDc3dMFug7LH0,6044
18
+ avrs/simconfig_util.py,sha256=ronvXg9Mraz60K99ABBvo_YDI1_rWphUWUn_s_voTKw,6044
19
19
  avrs/tests.py,sha256=3JeYBjn0tRqHXERDROfzmYuW1KXeCcKur5Bw-EIegto,153
20
20
  avrs/util.py,sha256=SB8Jgsh8IpFdpy3pWPuEoYExLed9XimEAMtYn4gU42g,301
21
21
  avrs/requests/change_camera.py,sha256=p7S5C2KtSBuknj4-0jkAJtTQcdlSQ5Mwm0lmZIk3QTI,857
@@ -44,8 +44,8 @@ avrs/requests/toggle_hud.py,sha256=sV5t5QZc4uvRihPVk8jEKZiQNsyF9tsUwq5b4jjZplc,3
44
44
  avrs/requests/vd.py,sha256=Rd0mCc89m2yKjftVf0cMHMFbJG4iFd09KzrI-DsCLgI,2606
45
45
  avrs/requests/vehicle_input.py,sha256=R1b1xkRtOBkwyU6OSN4bWVlYsIUroZG0WKbYbc4pEH8,729
46
46
  avrs/requests/vehicle_replay.py,sha256=7HPfVLjSLNbOyzU77Bz29qpHqRsMUAIWvnwvnNiw2nk,15026
47
- autoverse_cli-0.26.1.dist-info/METADATA,sha256=U8tv2SWKbk1wiAD7dH782A_Jqgqez-IoekE7Xjx9BNM,3935
48
- autoverse_cli-0.26.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
49
- autoverse_cli-0.26.1.dist-info/entry_points.txt,sha256=Cb9qsUyU5AKkklehCcvtfT0-N3SXbUEqvjze4iEU5kE,40
50
- autoverse_cli-0.26.1.dist-info/top_level.txt,sha256=-AJO2e4MCVej6hY0U84pu5NfMeMW5qaAPSMisDT5rmA,5
51
- autoverse_cli-0.26.1.dist-info/RECORD,,
47
+ autoverse_cli-0.28.0.dist-info/METADATA,sha256=Q0tx_zwOksv2XrKY99xtRfbN3ZTUE5qjGFjZa78Nt3s,3935
48
+ autoverse_cli-0.28.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
49
+ autoverse_cli-0.28.0.dist-info/entry_points.txt,sha256=Cb9qsUyU5AKkklehCcvtfT0-N3SXbUEqvjze4iEU5kE,40
50
+ autoverse_cli-0.28.0.dist-info/top_level.txt,sha256=-AJO2e4MCVej6hY0U84pu5NfMeMW5qaAPSMisDT5rmA,5
51
+ autoverse_cli-0.28.0.dist-info/RECORD,,
avrs/app_version.py CHANGED
@@ -2,7 +2,7 @@ import http.client
2
2
  import json
3
3
 
4
4
  def get_app_version():
5
- return '0.26.1'
5
+ return '0.28.0'
6
6
 
7
7
  def check_app_is_latest():
8
8
  pass
@@ -21,4 +21,4 @@ def check_app_is_latest():
21
21
  # response = connection.getresponse()
22
22
  # if response.status != 200:
23
23
  # print('response had status code {}'.format(response))
24
- # print('{}'.format(response.read().decode('utf-8')))
24
+ # print('{}'.format(response.read().decode('utf-8')))
avrs/launcher.py CHANGED
@@ -5,6 +5,7 @@ import logging
5
5
  import http.client
6
6
  import boto3
7
7
  import sys
8
+ import shutil
8
9
  from avrs.cfg import *
9
10
  from avrs.launcher_util import *
10
11
 
@@ -114,7 +115,7 @@ class AvrsLauncher:
114
115
 
115
116
  # Check if variant is valid (for backwards compatibility, we still proceed even if invalid)
116
117
  variant_is_invalid = False
117
- if args.variant != "staged":
118
+ if args.variant not in ["staged", "feature"]:
118
119
  # Ensure variants are loaded
119
120
  if 'variants' not in self.cfg:
120
121
  (dl_keys_ok, dl_keys_status, self.cfg) = try_get_launcher_download_keys(self.cfg)
@@ -127,22 +128,26 @@ class AvrsLauncher:
127
128
  sys.stderr.write('Warning: "{}" is not a known variant. Available variants: {}\n'.format(
128
129
  args.variant, self.cfg['variants']))
129
130
 
130
- # special case where we want staged version
131
+ variant_to_query = "autoverse" if args.variant in ["staged", "feature"] else args.variant
132
+
133
+ # Get latest build info from API
134
+ build_info_ok, build_info_status, latest_version, staged_version, build_info = get_launcher_build_info(
135
+ self.cfg, variant_to_query)
136
+ if not build_info_ok:
137
+ print('Error Getting Latest Version Info: {}'.format(build_info_status))
138
+ return
139
+
131
140
  if args.variant == "staged":
132
- # Get latest build info from API
133
- build_info_ok, build_info_status, latest_version, staged_version = get_launcher_build_info(
134
- self.cfg, "autoverse")
135
- if not build_info_ok:
136
- print('Error Getting Latest Version Info: {}'.format(build_info_status))
137
- return
138
141
  print('{}'.format(staged_version))
142
+ elif args.variant == "feature":
143
+ feature_info = build_info.get('feature', {})
144
+ if isinstance(feature_info, str):
145
+ try:
146
+ feature_info = json.loads(feature_info)
147
+ except json.JSONDecodeError:
148
+ pass
149
+ print('{}'.format(json.dumps(feature_info)))
139
150
  else:
140
- # Get latest build info from API
141
- build_info_ok, build_info_status, latest_version, staged_version = get_launcher_build_info(
142
- self.cfg, args.variant)
143
- if not build_info_ok:
144
- print('Error Getting Latest Version Info: {}'.format(build_info_status))
145
- return
146
151
  print('{}'.format(latest_version))
147
152
  if variant_is_invalid:
148
153
  # Explain that the output is the default/prod variant version, not the requested variant
@@ -172,7 +177,7 @@ class AvrsLauncher:
172
177
  return
173
178
 
174
179
  # Get latest build info from API
175
- build_info_ok, build_info_status, latest_version, staged_version = get_launcher_build_info(
180
+ build_info_ok, build_info_status, latest_version, staged_version, _build_info = get_launcher_build_info(
176
181
  self.cfg, args.variant)
177
182
  if not build_info_ok:
178
183
  print('Error Getting Latest Version Info: {}'.format(build_info_status))
@@ -246,4 +251,4 @@ If you are sure, re-run with the --update-existing flag
246
251
  os.chmod(autoverse_exe, st.st_mode | stat.S_IEXEC)
247
252
 
248
253
  print('Cleaning up')
249
- os.remove(dl_path)
254
+ os.remove(dl_path)
avrs/launcher_util.py CHANGED
@@ -121,7 +121,7 @@ def get_launcher_license_status_string(cfg):
121
121
 
122
122
  def get_launcher_build_info(cfg, variant):
123
123
  """
124
- Contacts API to discover the current latest build version
124
+ Contacts API to discover the current latest build version and returns full build info
125
125
  """
126
126
 
127
127
  api_url = 'zn5boqqk60.execute-api.us-east-1.amazonaws.com'
@@ -134,17 +134,24 @@ def get_launcher_build_info(cfg, variant):
134
134
  response = connection.getresponse()
135
135
 
136
136
  if response.status != 200:
137
- return (False, "get build info api returned {}".format(response.status), "", "")
137
+ return (False, "get build info api returned {}".format(response.status), "", "", {})
138
138
 
139
139
  res_full = json.loads(response.read().decode('utf-8'))
140
- info = json.loads(res_full['body'])
141
- code = res_full['statusCode']
140
+ raw_body = res_full.get('body', "{}")
141
+ info = json.loads(raw_body) if isinstance(raw_body, str) else raw_body
142
+ if not isinstance(info, dict):
143
+ return (False, "get build info api returned unexpected format", "", "", {})
144
+
145
+ code = res_full.get('statusCode')
142
146
  if code != 200:
143
- return (False, "get build info api returned {}".format(code), "", "")
147
+ return (False, "get build info api returned {}".format(code), "", "", info)
148
+
149
+ latest_version = info.get('prod', '')
150
+ if latest_version == '':
151
+ return (False, "get build info api response missing prod", "", "", info)
144
152
 
145
- latest_version = info['prod']
146
153
  staged_version = info.get('staging', latest_version)
147
- return (True, "ok", latest_version, staged_version)
154
+ return (True, "ok", latest_version, staged_version, info)
148
155
 
149
156
  def download_simulator_archive(cfg, source_path, target_path):
150
157
  """
@@ -184,7 +191,10 @@ def s3_download_with_progress(s3_client, s3_bucket, s3_object_key, local_file_pa
184
191
  def progress(chunk):
185
192
  nonlocal downloaded
186
193
  downloaded += chunk
187
- done = int(50 * downloaded / total_length)
194
+ if total_length > 0:
195
+ done = int(50 * downloaded / total_length)
196
+ else:
197
+ done = 0
188
198
  sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) )
189
199
  sys.stdout.flush()
190
200
 
avrs/simconfig_util.py CHANGED
@@ -130,7 +130,7 @@ def compare_dicts(a, b, parent_key, out_checks):
130
130
 
131
131
  def apply_simconfig_preset(sim_saved_dir, preset_name):
132
132
  cfg_files = SimConfigFiles(sim_saved_dir)
133
- ok, status = cfg_files.valdiate()
133
+ ok, status = cfg_files.validate()
134
134
  if not ok:
135
135
  print(status)
136
136
  return