remotivelabs-cli 0.0.11__py3-none-any.whl → 0.0.13__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.
- cli/broker/brokers.py +0 -58
- cli/broker/lib/broker.py +23 -0
- cli/broker/signals.py +20 -26
- cli/cloud/configs.py +22 -0
- cli/cloud/recordings.py +32 -16
- cli/cloud/rest_helper.py +15 -0
- cli/connect/connect.py +10 -15
- cli/tools/can/can.py +27 -37
- {remotivelabs_cli-0.0.11.dist-info → remotivelabs_cli-0.0.13.dist-info}/METADATA +1 -1
- {remotivelabs_cli-0.0.11.dist-info → remotivelabs_cli-0.0.13.dist-info}/RECORD +13 -13
- {remotivelabs_cli-0.0.11.dist-info → remotivelabs_cli-0.0.13.dist-info}/LICENSE +0 -0
- {remotivelabs_cli-0.0.11.dist-info → remotivelabs_cli-0.0.13.dist-info}/WHEEL +0 -0
- {remotivelabs_cli-0.0.11.dist-info → remotivelabs_cli-0.0.13.dist-info}/entry_points.txt +0 -0
cli/broker/brokers.py
CHANGED
@@ -1,12 +1,9 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
import os
|
4
|
-
import signal as os_signal
|
5
4
|
from time import sleep
|
6
|
-
from typing import List
|
7
5
|
|
8
6
|
import typer
|
9
|
-
from rich.progress import Progress, SpinnerColumn, TextColumn
|
10
7
|
from zeroconf import (
|
11
8
|
IPVersion,
|
12
9
|
ServiceBrowser,
|
@@ -15,7 +12,6 @@ from zeroconf import (
|
|
15
12
|
)
|
16
13
|
|
17
14
|
from . import export, files, playback, record, scripting, signals
|
18
|
-
from .lib.broker import Broker
|
19
15
|
|
20
16
|
app = typer.Typer(rich_markup_mode="rich")
|
21
17
|
|
@@ -31,60 +27,6 @@ def main(
|
|
31
27
|
return
|
32
28
|
|
33
29
|
|
34
|
-
@app.command(name="x-diagnose")
|
35
|
-
def diagnose(
|
36
|
-
namespace: List[str] = typer.Option([], help="Namespace to diagnose"),
|
37
|
-
all_namespaces: bool = typer.Option(False, help="Scan all namespaces, must be true if no namespaces provided"),
|
38
|
-
wait_for_traffic: bool = typer.Option(False, help="Wait until traffic is found on any bus"),
|
39
|
-
quiet: bool = typer.Option(False, help="Do not prompt me"),
|
40
|
-
url: str = typer.Option(..., help="Broker URL", envvar="REMOTIVE_BROKER_URL"),
|
41
|
-
api_key: str = typer.Option("offline", help="Cloud Broker API-KEY or access token", envvar="REMOTIVE_BROKER_API_KEY"),
|
42
|
-
):
|
43
|
-
"""
|
44
|
-
[Experimental] - Performs a scan on specified buses to see if the is any traffic coming on the buses. This works
|
45
|
-
for both recordings and live data
|
46
|
-
|
47
|
-
"""
|
48
|
-
|
49
|
-
if not quiet:
|
50
|
-
do_it = typer.confirm(
|
51
|
-
"""
|
52
|
-
This will perform recordings on selected buses, make sure there are no recordings currently running on the broker.
|
53
|
-
"""
|
54
|
-
)
|
55
|
-
if not do_it:
|
56
|
-
print("Skipping diagnosis")
|
57
|
-
raise typer.Abort()
|
58
|
-
|
59
|
-
broker = Broker(url, api_key)
|
60
|
-
with Progress(
|
61
|
-
SpinnerColumn(),
|
62
|
-
TextColumn("[progress.description]{task.description}"),
|
63
|
-
transient=True,
|
64
|
-
) as progress:
|
65
|
-
if len(namespace) > 0 and all_namespaces:
|
66
|
-
print("No namespaces should be supplied when all-namespaces is used")
|
67
|
-
raise typer.Exit(1)
|
68
|
-
if len(namespace) == 0 and not all_namespaces:
|
69
|
-
print("No namespaces chosen")
|
70
|
-
raise typer.Exit(1)
|
71
|
-
|
72
|
-
if all_namespaces:
|
73
|
-
namespace = broker.list_namespaces()
|
74
|
-
|
75
|
-
if wait_for_traffic:
|
76
|
-
progress.add_task(description=f"Scanning for traffic on {namespace} [Ctrl+C to exit] ", total=1)
|
77
|
-
else:
|
78
|
-
progress.add_task(description=f"Scanning for traffic on {namespace}... (just a few seconds)", total=1)
|
79
|
-
|
80
|
-
def on_sigint(sig, frame):
|
81
|
-
progress.add_task(description="Cleaning up, please wait...", total=None)
|
82
|
-
|
83
|
-
os_signal.signal(os_signal.SIGINT, on_sigint)
|
84
|
-
|
85
|
-
broker.diagnose(namespace, wait_for_traffic)
|
86
|
-
|
87
|
-
|
88
30
|
@app.command(help="Discover brokers on this network")
|
89
31
|
def discover():
|
90
32
|
# print("Not implemented")
|
cli/broker/lib/broker.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
import binascii
|
4
|
+
import datetime
|
4
5
|
import ntpath
|
5
6
|
import os
|
6
7
|
import posixpath
|
@@ -8,6 +9,7 @@ import queue
|
|
8
9
|
import signal as os_signal
|
9
10
|
import tempfile
|
10
11
|
import time
|
12
|
+
import typing
|
11
13
|
import zipfile
|
12
14
|
from dataclasses import dataclass
|
13
15
|
from threading import Thread
|
@@ -181,6 +183,27 @@ class Broker:
|
|
181
183
|
self.__check_playbackmode_result(status)
|
182
184
|
return status
|
183
185
|
|
186
|
+
def listen_on_playback(self, callback: Callable[[str], None]):
|
187
|
+
def get_mode(mode: int):
|
188
|
+
if mode == 0:
|
189
|
+
return "playing"
|
190
|
+
if mode == 1:
|
191
|
+
return "paused"
|
192
|
+
if mode == 2:
|
193
|
+
return "stopped"
|
194
|
+
|
195
|
+
sub = self.traffic_stub.PlayTrafficStatus(br.common_pb2.Empty())
|
196
|
+
for playback_state in sub:
|
197
|
+
p = typing.cast(br.traffic_api_pb2.PlaybackInfos, playback_state)
|
198
|
+
offset_time = int(p.playbackInfo[0].playbackMode.offsetTime / 1000000)
|
199
|
+
start_time = p.playbackInfo[0].playbackMode.startTime
|
200
|
+
end_time = p.playbackInfo[0].playbackMode.endTime
|
201
|
+
mode = p.playbackInfo[0].playbackMode.mode
|
202
|
+
|
203
|
+
length = int((end_time - start_time) / 1000000)
|
204
|
+
|
205
|
+
callback(f"{(datetime.timedelta(seconds=offset_time))} / {(datetime.timedelta(seconds=length))} ({get_mode(mode)})")
|
206
|
+
|
184
207
|
def pause(self, namespace: str, path: str, silent: bool = False):
|
185
208
|
playback_list = [
|
186
209
|
{
|
cli/broker/signals.py
CHANGED
@@ -5,13 +5,12 @@ import numbers
|
|
5
5
|
import os
|
6
6
|
import signal as os_signal
|
7
7
|
from pathlib import Path
|
8
|
-
from typing import List, TypedDict
|
8
|
+
from typing import List, TypedDict
|
9
9
|
|
10
10
|
import grpc
|
11
11
|
import plotext as plt
|
12
12
|
import typer
|
13
13
|
from rich import print as rich_rprint
|
14
|
-
from typing_extensions import Annotated
|
15
14
|
|
16
15
|
from cli.errors import ErrorPrinter
|
17
16
|
|
@@ -57,43 +56,38 @@ def read_scripted_code_file(file_path: Path) -> bytes:
|
|
57
56
|
|
58
57
|
@app.command()
|
59
58
|
def subscribe( # noqa: C901
|
60
|
-
url: str = typer.Option(help="Broker URL", envvar="REMOTIVE_BROKER_URL"),
|
59
|
+
url: str = typer.Option(..., help="Broker URL", envvar="REMOTIVE_BROKER_URL"),
|
61
60
|
api_key: str = typer.Option(None, help="Cloud Broker API-KEY or access token", envvar="REMOTIVE_BROKER_API_KEY"),
|
62
61
|
signal: List[str] = typer.Option(None, help="Signal names to subscribe to, mandatory when not using script"),
|
63
|
-
|
64
|
-
script: Union[
|
65
|
-
Annotated[
|
66
|
-
Path,
|
67
|
-
typer.Option(
|
68
|
-
...,
|
69
|
-
exists=True,
|
70
|
-
file_okay=True,
|
71
|
-
dir_okay=False,
|
72
|
-
writable=False,
|
73
|
-
readable=True,
|
74
|
-
resolve_path=True,
|
75
|
-
help="Supply a path to Lua script that to use for signal transformation",
|
76
|
-
),
|
77
|
-
],
|
62
|
+
script: Path = typer.Option(
|
78
63
|
None,
|
79
|
-
|
64
|
+
exists=True,
|
65
|
+
file_okay=True,
|
66
|
+
dir_okay=False,
|
67
|
+
writable=False,
|
68
|
+
readable=True,
|
69
|
+
resolve_path=True,
|
70
|
+
help="Supply a path to Lua script that to use for signal transformation",
|
71
|
+
),
|
80
72
|
on_change_only: bool = typer.Option(default=False, help="Only get signal if value is changed"),
|
81
|
-
x_plot: bool = typer.Option(default=False, help="Experimental: Plot the signal in terminal. Note graphs are not aligned by time"),
|
73
|
+
x_plot: bool = typer.Option(default=False, help="Experimental: Plot the signal in terminal. Note graphs are not " "aligned by time"),
|
82
74
|
x_plot_size: int = typer.Option(default=100, help="Experimental: how many points show for each plot"),
|
83
75
|
# samples: int = typer.Option(default=0, he)
|
84
76
|
):
|
85
77
|
"""
|
86
|
-
|
78
|
+
Subscribe to a selection of signals
|
87
79
|
|
88
|
-
|
80
|
+
Subscribe to two signals and have it printed to terminal
|
81
|
+
```
|
82
|
+
remotive broker signals subscribe --url http://localhost:50051 --signal can1:signal1 --signal can0:signal2
|
83
|
+
```
|
89
84
|
|
85
|
+
Subscribe using a LUA script with signal transformations, read more about scripted signals at https://docs.remotivelabs.com/docs/remotive-broker
|
86
|
+
```
|
90
87
|
remotive broker signals subscribe --url http://localhost:50051 --script myvss_script.lua
|
88
|
+
```
|
91
89
|
"""
|
92
90
|
|
93
|
-
if namespace is not None and len(namespace) > 0:
|
94
|
-
ErrorPrinter.print_hint("--namespace has been deprecated and you should instead use --signal namespace:signal when subscribing")
|
95
|
-
exit(1)
|
96
|
-
|
97
91
|
if script is None:
|
98
92
|
if len(signal) == 0:
|
99
93
|
ErrorPrinter.print_generic_error("You must use include at least one signal and one namespace or use script when subscribing")
|
cli/cloud/configs.py
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
+
import os.path
|
1
2
|
import shutil
|
2
3
|
import sys
|
4
|
+
from pathlib import Path
|
3
5
|
|
4
6
|
import requests
|
5
7
|
import typer
|
@@ -23,6 +25,26 @@ def delete(
|
|
23
25
|
rest.handle_delete(f"/api/project/{project}/files/config/{signal_db_file}")
|
24
26
|
|
25
27
|
|
28
|
+
@app.command()
|
29
|
+
def upload(
|
30
|
+
path: Path = typer.Argument(
|
31
|
+
...,
|
32
|
+
exists=True,
|
33
|
+
file_okay=True,
|
34
|
+
dir_okay=False,
|
35
|
+
writable=False,
|
36
|
+
readable=True,
|
37
|
+
resolve_path=True,
|
38
|
+
help="Path to signal database file to upload",
|
39
|
+
),
|
40
|
+
project: str = typer.Option(..., help="Project ID", envvar="REMOTIVE_CLOUD_PROJECT"),
|
41
|
+
):
|
42
|
+
"""
|
43
|
+
Uploads signal database to project
|
44
|
+
"""
|
45
|
+
rest.upload_file(path=path, url=f"/api/project/{project}/files/config/{os.path.basename(path)}/uploadfile")
|
46
|
+
|
47
|
+
|
26
48
|
@app.command()
|
27
49
|
def download(
|
28
50
|
signal_db_file: str = typer.Argument("", help="Signal database file"),
|
cli/cloud/recordings.py
CHANGED
@@ -11,8 +11,7 @@ from pathlib import Path
|
|
11
11
|
import grpc
|
12
12
|
import requests
|
13
13
|
import typer
|
14
|
-
from rich.progress import track
|
15
|
-
from typing_extensions import Annotated
|
14
|
+
from rich.progress import Progress, SpinnerColumn, TextColumn, track
|
16
15
|
|
17
16
|
from cli.errors import ErrorPrinter
|
18
17
|
|
@@ -193,19 +192,16 @@ def delete_recording_file(
|
|
193
192
|
|
194
193
|
@app.command()
|
195
194
|
def upload(
|
196
|
-
path:
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
help="Path to recording file to upload",
|
207
|
-
),
|
208
|
-
],
|
195
|
+
path: Path = typer.Argument(
|
196
|
+
...,
|
197
|
+
exists=True,
|
198
|
+
file_okay=True,
|
199
|
+
dir_okay=False,
|
200
|
+
writable=False,
|
201
|
+
readable=True,
|
202
|
+
resolve_path=True,
|
203
|
+
help="Path to recording file to upload",
|
204
|
+
),
|
209
205
|
project: str = typer.Option(..., help="Project ID", envvar="REMOTIVE_CLOUD_PROJECT"),
|
210
206
|
recording_type: str = typer.Option("remotive-broker", help="Type of recording"),
|
211
207
|
signal_database: str = typer.Option(None, help="Signal database to use with candump"),
|
@@ -230,7 +226,9 @@ def upload(
|
|
230
226
|
else:
|
231
227
|
r = rest.handle_post(f"/api/project/{project}/files/recording/{filename}", return_response=True)
|
232
228
|
|
233
|
-
response = rest.
|
229
|
+
response = rest.upload_file_with_signed_url(
|
230
|
+
path=path.name, url=r.text, upload_headers={"Content-Type": "application/x-www-form-urlencoded"}
|
231
|
+
)
|
234
232
|
|
235
233
|
if 200 <= response.status_code < 300:
|
236
234
|
print(
|
@@ -385,6 +383,18 @@ def pause(
|
|
385
383
|
_do_change_playback_mode("pause", recording_session, broker, project)
|
386
384
|
|
387
385
|
|
386
|
+
@app.command(name="playback-status")
|
387
|
+
def playback_status(
|
388
|
+
recording_session: str = typer.Argument(..., help="Recording session id", envvar="REMOTIVE_CLOUD_RECORDING_SESSION"),
|
389
|
+
broker: str = typer.Option(None, help="Broker to use"),
|
390
|
+
project: str = typer.Option(..., help="Project ID", envvar="REMOTIVE_CLOUD_PROJECT"),
|
391
|
+
):
|
392
|
+
"""
|
393
|
+
Display status and progress of the recording beeing played
|
394
|
+
"""
|
395
|
+
_do_change_playback_mode("status", recording_session, broker, project)
|
396
|
+
|
397
|
+
|
388
398
|
@app.command()
|
389
399
|
def seek(
|
390
400
|
recording_session: str = typer.Argument(..., help="Recording session id", envvar="REMOTIVE_CLOUD_RECORDING_SESSION"),
|
@@ -455,6 +465,12 @@ def _do_change_playback_mode(mode: str, recording_session: str, broker: str, pro
|
|
455
465
|
broker.seek(files, int(seconds * 1000000), True)
|
456
466
|
elif mode == "stop":
|
457
467
|
broker.seek(files, 0, True)
|
468
|
+
elif mode == "status":
|
469
|
+
p = Progress(SpinnerColumn(), TextColumn("[progress.description]{task.description}"), transient=True)
|
470
|
+
t = p.add_task("label", total=1)
|
471
|
+
|
472
|
+
with p:
|
473
|
+
broker.listen_on_playback(lambda c: p.update(t, description=str(c)))
|
458
474
|
else:
|
459
475
|
raise Exception(f"Illegal command {mode}")
|
460
476
|
|
cli/cloud/rest_helper.py
CHANGED
@@ -150,6 +150,21 @@ def handle_put(url, body=None, params={}, return_response: bool = False):
|
|
150
150
|
|
151
151
|
|
152
152
|
def upload_file(
|
153
|
+
path: Union[str, Path], url: str, upload_headers: dict[str, str] = None, return_response: bool = False, progress_label="Uploading..."
|
154
|
+
):
|
155
|
+
ensure_auth_token()
|
156
|
+
if upload_headers is not None:
|
157
|
+
headers.update(upload_headers)
|
158
|
+
with open(path, "rb") as file:
|
159
|
+
with wrap_file(file, os.stat(path).st_size, description=progress_label) as f:
|
160
|
+
r = requests.post(f"{base_url}{url}", files={os.path.basename(path): f}, headers=headers)
|
161
|
+
if return_response:
|
162
|
+
check_api_result(r)
|
163
|
+
return r
|
164
|
+
print_api_result(r)
|
165
|
+
|
166
|
+
|
167
|
+
def upload_file_with_signed_url(
|
153
168
|
path: Union[str, Path], url: str, upload_headers: dict[str, str], return_response: bool = False, progress_label="Uploading..."
|
154
169
|
):
|
155
170
|
with open(path, "rb") as file:
|
cli/connect/connect.py
CHANGED
@@ -4,7 +4,7 @@ import sys
|
|
4
4
|
from pathlib import Path
|
5
5
|
|
6
6
|
import typer
|
7
|
-
from typing_extensions import
|
7
|
+
from typing_extensions import List
|
8
8
|
|
9
9
|
from cli.broker.lib.broker import SubscribableSignal
|
10
10
|
from cli.errors import ErrorPrinter
|
@@ -14,21 +14,16 @@ app = typer.Typer()
|
|
14
14
|
|
15
15
|
@app.command()
|
16
16
|
def protopie(
|
17
|
-
config:
|
18
|
-
Annotated[
|
19
|
-
Path,
|
20
|
-
typer.Option(
|
21
|
-
exists=True,
|
22
|
-
file_okay=True,
|
23
|
-
dir_okay=False,
|
24
|
-
writable=False,
|
25
|
-
readable=True,
|
26
|
-
resolve_path=True,
|
27
|
-
help="Configuration file with signal subscriptions and mapping if needed",
|
28
|
-
),
|
29
|
-
],
|
17
|
+
config: Path = typer.Option(
|
30
18
|
None,
|
31
|
-
|
19
|
+
exists=True,
|
20
|
+
file_okay=True,
|
21
|
+
dir_okay=False,
|
22
|
+
writable=False,
|
23
|
+
readable=True,
|
24
|
+
resolve_path=True,
|
25
|
+
help="Configuration file with signal subscriptions and mapping if needed",
|
26
|
+
),
|
32
27
|
signal: List[str] = typer.Option(None, help="Signal names to subscribe to, mandatory when not using script"),
|
33
28
|
signal_name_expression: str = typer.Option(
|
34
29
|
None, help='[Experimental] Python expression to rename signal names, i.e \'lower().replace(".","_")\''
|
cli/tools/can/can.py
CHANGED
@@ -3,7 +3,6 @@ from pathlib import Path
|
|
3
3
|
import can
|
4
4
|
import typer
|
5
5
|
from rich.console import Console
|
6
|
-
from typing_extensions import Annotated
|
7
6
|
|
8
7
|
err_console = Console(stderr=True)
|
9
8
|
console = Console()
|
@@ -17,30 +16,24 @@ app = typer.Typer(help=help)
|
|
17
16
|
|
18
17
|
@app.command("convert")
|
19
18
|
def convert(
|
20
|
-
in_file:
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
writable=True,
|
39
|
-
readable=True,
|
40
|
-
resolve_path=True,
|
41
|
-
help="File to convert to (.blf .asc .log)",
|
42
|
-
),
|
43
|
-
],
|
19
|
+
in_file: Path = typer.Argument(
|
20
|
+
exists=True,
|
21
|
+
file_okay=True,
|
22
|
+
dir_okay=False,
|
23
|
+
writable=False,
|
24
|
+
readable=True,
|
25
|
+
resolve_path=True,
|
26
|
+
help="File to convert from (.blf .asc .log)",
|
27
|
+
),
|
28
|
+
out_file: Path = typer.Argument(
|
29
|
+
exists=False,
|
30
|
+
file_okay=True,
|
31
|
+
dir_okay=False,
|
32
|
+
writable=True,
|
33
|
+
readable=True,
|
34
|
+
resolve_path=True,
|
35
|
+
help="File to convert to (.blf .asc .log)",
|
36
|
+
),
|
44
37
|
):
|
45
38
|
r"""
|
46
39
|
Converts between ASC, BLF and LOG files. Files must end with .asc, .blf or .log.
|
@@ -59,18 +52,15 @@ def convert(
|
|
59
52
|
|
60
53
|
@app.command("validate")
|
61
54
|
def validate(
|
62
|
-
in_file:
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
help="File to validate (.blf .asc .log)",
|
72
|
-
),
|
73
|
-
],
|
55
|
+
in_file: Path = typer.Argument(
|
56
|
+
exists=True,
|
57
|
+
file_okay=True,
|
58
|
+
dir_okay=False,
|
59
|
+
writable=False,
|
60
|
+
readable=True,
|
61
|
+
resolve_path=True,
|
62
|
+
help="File to validate (.blf .asc .log)",
|
63
|
+
),
|
74
64
|
print: bool = typer.Option(False, help="Print file contents to terminal"),
|
75
65
|
):
|
76
66
|
r"""
|
@@ -1,28 +1,28 @@
|
|
1
1
|
cli/__about__.py,sha256=qXVkxWb3aPCF-4MjQhB0wqL2GEblEH4Qwk70o29UkJk,122
|
2
2
|
cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
|
-
cli/broker/brokers.py,sha256=
|
3
|
+
cli/broker/brokers.py,sha256=sSX--mm5ln5RUFR60VFHQR6NWu4Qz7Jqi2Ws-4TJsDI,3052
|
4
4
|
cli/broker/export.py,sha256=GxwE9ufWRwfxVh3eTLkwuOqwUOtsvS9Wb7b-BooULC8,3734
|
5
5
|
cli/broker/files.py,sha256=_8elBjbmJ5MEEeFGJ7QYkXzyuLDCDpO6UvEVXHbRy7U,4133
|
6
6
|
cli/broker/lib/__about__.py,sha256=xnZ5V6ZcHW9dhWLWdMzVjYJbEnMKpeXm0_S_mbNzypE,141
|
7
|
-
cli/broker/lib/broker.py,sha256=
|
7
|
+
cli/broker/lib/broker.py,sha256=fmGsdxmdC3llrIvr0o3E2cpkGHU6mxrbZ7_ac2ZqVvU,20664
|
8
8
|
cli/broker/playback.py,sha256=oOfC8Jn4Ib-nc9T6ob_uNXZSeCWfft7MrMQPafH4U2I,4846
|
9
9
|
cli/broker/record.py,sha256=gEvo3myHbIl6UyXzhJE741NiwRrFf7doBg6HXzzp5z0,1382
|
10
10
|
cli/broker/scripting.py,sha256=sLDtuktWsVk0fJ3RW4kYyh-_YAVJP3VM0xFIQR499Oo,3392
|
11
|
-
cli/broker/signals.py,sha256=
|
11
|
+
cli/broker/signals.py,sha256=3z4vVivPdo8dfz8XY-s7Ga5I75uQaptWarixrfSsm-0,6547
|
12
12
|
cli/cloud/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
13
13
|
cli/cloud/auth.py,sha256=xi47cQWjs6q7Kje4XUbTqEk_BgG3NJ1gMOYPU-_4tgw,3470
|
14
14
|
cli/cloud/auth_tokens.py,sha256=5ox0Pxfij8aTgEcDwRBasaSQvDuLIGCJc-INjmIQN2M,3408
|
15
15
|
cli/cloud/brokers.py,sha256=wa3uMg91IZdrP0tMpTdO9cBIkZHtMHxQ-zEXwFiye_I,4127
|
16
16
|
cli/cloud/cloud_cli.py,sha256=nRRXFF_IgUMayerxS-h7oqsNe6tt34Q5VeThq8gatEg,1443
|
17
|
-
cli/cloud/configs.py,sha256=
|
17
|
+
cli/cloud/configs.py,sha256=2p1mCHf5BwYNtwbY0Cbed5t6-79WHGKWU4Fv6LuJ21o,4069
|
18
18
|
cli/cloud/projects.py,sha256=-uqltAOficwprOKaPd2R0Itm4sqTz3VJNs9Sc8jtO5k,1369
|
19
|
-
cli/cloud/recordings.py,sha256=
|
20
|
-
cli/cloud/rest_helper.py,sha256=
|
19
|
+
cli/cloud/recordings.py,sha256=F42VXWuoIVKmjkSxr4fq0M9w1GwszNE1kUbkVzxEaf4,20334
|
20
|
+
cli/cloud/rest_helper.py,sha256=g7lmGosAS0IDlo9Aso0bH0tdlLTCz0IYx3R71DXKtkc,6491
|
21
21
|
cli/cloud/sample_recordings.py,sha256=g1X6JTxvzWInSP9R1BJsDmL4WqvpEKqjdJR_xT4bo1U,639
|
22
22
|
cli/cloud/service_account_tokens.py,sha256=7vjoMd6Xq7orWCUP7TVUVa86JA0OiX8O10NZcHUE6rM,2294
|
23
23
|
cli/cloud/service_accounts.py,sha256=GCYdYPnP5uWVsg1bTIS67CmoPWDng5dupJHmlThrJ80,1606
|
24
24
|
cli/connect/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
25
|
-
cli/connect/connect.py,sha256=
|
25
|
+
cli/connect/connect.py,sha256=xeQLgbLvwB-l2pL6ulbOkYeMQZb5B_rLvy7oQVNa78k,3649
|
26
26
|
cli/connect/protopie/protopie.py,sha256=aMF7rQHX4xLN9ylijJB1SMNlB1IIl14YBLw6oLweWH4,5646
|
27
27
|
cli/errors.py,sha256=sOjYasWbwqu2IcK4MvrG4ddpQ7idLGxiFYOxjhdsahM,1319
|
28
28
|
cli/remotive.py,sha256=KKahzVZACa3MIBqt2lZDiSsDOTmoZIdNeKex8LJR8ZQ,1645
|
@@ -30,10 +30,10 @@ cli/requirements.txt,sha256=Tjpv2HSAPemgKC-eJbwDw-gvAdklfJ18LixRcwzvQIU,78
|
|
30
30
|
cli/settings.py,sha256=r0txIWXNTH1veGu97J84PiYEDBsAphkXYTN64n_C-qw,792
|
31
31
|
cli/tools/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
32
32
|
cli/tools/can/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
33
|
-
cli/tools/can/can.py,sha256=
|
33
|
+
cli/tools/can/can.py,sha256=kSd1c-nxxXyeKkm19oDILiDBZsKOcpjsUT0T3xox5Qs,2172
|
34
34
|
cli/tools/tools.py,sha256=LwQdWMcJ19pCyKUsVfSB2B3R6ui61NxxFWP0Nrnd5Jk,198
|
35
|
-
remotivelabs_cli-0.0.
|
36
|
-
remotivelabs_cli-0.0.
|
37
|
-
remotivelabs_cli-0.0.
|
38
|
-
remotivelabs_cli-0.0.
|
39
|
-
remotivelabs_cli-0.0.
|
35
|
+
remotivelabs_cli-0.0.13.dist-info/LICENSE,sha256=qDPP_yfuv1fF-u7EfexN-cN3M8aFgGVndGhGLovLKz0,608
|
36
|
+
remotivelabs_cli-0.0.13.dist-info/METADATA,sha256=q4vUcxbJSS14XERa8zL9nWJpHA6bVeFSWnja5b75tEo,1224
|
37
|
+
remotivelabs_cli-0.0.13.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
38
|
+
remotivelabs_cli-0.0.13.dist-info/entry_points.txt,sha256=lvDhPgagLqW_KTnLPCwKSqfYlEp-1uYVosRiPjsVj10,45
|
39
|
+
remotivelabs_cli-0.0.13.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|