bosdyn-client 5.0.1.2__py3-none-any.whl → 5.1.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.
Files changed (57) hide show
  1. bosdyn/client/access_controlled_door_util.py +206 -0
  2. bosdyn/client/arm_surface_contact.py +2 -2
  3. bosdyn/client/async_tasks.py +3 -2
  4. bosdyn/client/audio_visual_helpers.py +3 -2
  5. bosdyn/client/autowalk.py +0 -2
  6. bosdyn/client/command_line.py +61 -4
  7. bosdyn/client/common.py +1 -1
  8. bosdyn/client/data_acquisition.py +3 -5
  9. bosdyn/client/data_acquisition_helpers.py +0 -3
  10. bosdyn/client/data_acquisition_plugin.py +1 -2
  11. bosdyn/client/data_acquisition_plugin_service.py +3 -2
  12. bosdyn/client/data_acquisition_store.py +1 -7
  13. bosdyn/client/data_buffer.py +5 -4
  14. bosdyn/client/directory_registration.py +3 -2
  15. bosdyn/client/estop.py +3 -2
  16. bosdyn/client/fault.py +1 -1
  17. bosdyn/client/gps/aggregator_client.py +2 -4
  18. bosdyn/client/gps/gps_listener.py +5 -7
  19. bosdyn/client/gps/ntrip_client.py +12 -3
  20. bosdyn/client/graph_nav.py +67 -13
  21. bosdyn/client/hazard_avoidance.py +119 -0
  22. bosdyn/client/image.py +5 -4
  23. bosdyn/client/image_service_helpers.py +6 -7
  24. bosdyn/client/ir_enable_disable.py +1 -1
  25. bosdyn/client/keepalive.py +4 -2
  26. bosdyn/client/lease.py +3 -2
  27. bosdyn/client/lease_validator.py +0 -1
  28. bosdyn/client/log_status.py +57 -3
  29. bosdyn/client/map_processing.py +2 -4
  30. bosdyn/client/network_compute_bridge_client.py +4 -6
  31. bosdyn/client/payload.py +2 -3
  32. bosdyn/client/payload_registration.py +11 -10
  33. bosdyn/client/power.py +84 -27
  34. bosdyn/client/processors.py +27 -2
  35. bosdyn/client/recording.py +3 -3
  36. bosdyn/client/robot_command.py +22 -22
  37. bosdyn/client/robot_state.py +1 -1
  38. bosdyn/client/sdk.py +2 -3
  39. bosdyn/client/service_customization_helpers.py +1 -1
  40. bosdyn/client/spot_cam/audio.py +1 -2
  41. bosdyn/client/spot_cam/health.py +1 -1
  42. bosdyn/client/spot_cam/lighting.py +1 -1
  43. bosdyn/client/spot_cam/media_log.py +1 -1
  44. bosdyn/client/spot_cam/network.py +3 -2
  45. bosdyn/client/spot_cam/power.py +1 -1
  46. bosdyn/client/spot_cam/ptz.py +1 -1
  47. bosdyn/client/spot_cam/streamquality.py +1 -1
  48. bosdyn/client/spot_cam/version.py +1 -1
  49. bosdyn/client/spot_check.py +5 -6
  50. bosdyn/client/url_validation_util.py +220 -0
  51. bosdyn/client/util.py +2 -4
  52. bosdyn/client/world_object.py +1 -1
  53. {bosdyn_client-5.0.1.2.dist-info → bosdyn_client-5.1.0.dist-info}/METADATA +3 -3
  54. bosdyn_client-5.1.0.dist-info/RECORD +106 -0
  55. bosdyn_client-5.0.1.2.dist-info/RECORD +0 -103
  56. {bosdyn_client-5.0.1.2.dist-info → bosdyn_client-5.1.0.dist-info}/WHEEL +0 -0
  57. {bosdyn_client-5.0.1.2.dist-info → bosdyn_client-5.1.0.dist-info}/top_level.txt +0 -0
@@ -7,12 +7,11 @@
7
7
  import collections
8
8
  import time
9
9
 
10
- from urllib3 import Timeout
11
-
12
10
  from bosdyn.api.spot import spot_check_pb2, spot_check_service_pb2_grpc
13
11
  from bosdyn.client.common import (BaseClient, error_factory, handle_common_header_errors,
14
12
  handle_lease_use_result_errors, handle_unset_status_error)
15
13
  from bosdyn.client.exceptions import LeaseUseError, ResponseError, TimedOutError
14
+ from bosdyn.util import now_sec
16
15
 
17
16
 
18
17
  class SpotCheckError(ResponseError):
@@ -191,7 +190,7 @@ def run_spot_check(spot_check_client, lease, timeout_sec=212, update_frequency=0
191
190
  Raises:
192
191
  bosdyn.client.exceptions.Error: Throws on any error failure.
193
192
  """
194
- start_time = time.time()
193
+ start_time = now_sec()
195
194
  end_time = start_time + timeout_sec
196
195
  update_time = 1.0 / update_frequency
197
196
  # Start spot check procedure.
@@ -201,7 +200,7 @@ def run_spot_check(spot_check_client, lease, timeout_sec=212, update_frequency=0
201
200
  spot_check_client.spot_check_command(req)
202
201
  # Check spot check feedback.
203
202
  feedback_req = spot_check_pb2.SpotCheckFeedbackRequest()
204
- while (time.time() < end_time):
203
+ while (now_sec() < end_time):
205
204
  time.sleep(update_time)
206
205
  res = spot_check_client.spot_check_feedback(feedback_req)
207
206
  if (res.state == spot_check_pb2.SpotCheckFeedbackResponse.STATE_WAITING_FOR_COMMAND or
@@ -234,7 +233,7 @@ def run_camera_calibration(spot_check_client, lease, timeout_sec=1200, update_fr
234
233
  Raises:
235
234
  bosdyn.client.exceptions.Error: Throws on any calibration failure.
236
235
  """
237
- start_time = time.time()
236
+ start_time = now_sec()
238
237
  end_time = start_time + timeout_sec
239
238
  update_time = 1.0 / update_frequency
240
239
  # Start camera calibration procedure.
@@ -244,7 +243,7 @@ def run_camera_calibration(spot_check_client, lease, timeout_sec=1200, update_fr
244
243
  spot_check_client.camera_calibration_command(req)
245
244
  # Check camera calibration feedback.
246
245
  feedback_req = spot_check_pb2.CameraCalibrationFeedbackRequest()
247
- while (time.time() < end_time):
246
+ while (now_sec() < end_time):
248
247
  time.sleep(update_time)
249
248
  res = spot_check_client.camera_calibration_feedback(feedback_req)
250
249
  if (res.status == spot_check_pb2.CameraCalibrationFeedbackResponse.STATUS_SUCCESS):
@@ -0,0 +1,220 @@
1
+ # Copyright (c) 2023 Boston Dynamics, Inc. All rights reserved.
2
+ #
3
+ # Downloading, reproducing, distributing or otherwise using the SDK Software
4
+ # is subject to the terms and conditions of the Boston Dynamics Software
5
+ # Development Kit License (20191101-BDSDK-SL).
6
+
7
+
8
+ import enum
9
+ import ipaddress
10
+ import logging
11
+ import socket
12
+ from contextlib import contextmanager
13
+ from pathlib import Path
14
+ from urllib.parse import urlparse, urlunparse
15
+
16
+ import requests
17
+
18
+ MAX_REDIRECTS = 3
19
+ SO_BINDTODEVICE = getattr(socket, "SO_BINDTODEVICE", 25)
20
+
21
+ _LOGGER = logging.getLogger(__name__)
22
+
23
+
24
+
25
+ class InterfaceNameNotFound(Exception):
26
+ """Raised when a specified network interface is not present on the
27
+ system."""
28
+
29
+ def __init__(self, name: str):
30
+ super().__init__(f"Interface '{name}' is not found on system.")
31
+
32
+
33
+
34
+
35
+ class BindAdapter(requests.adapters.HTTPAdapter):
36
+ """Allows binding to a specific network interface and enforcing a custom
37
+ Host header for HTTP."""
38
+
39
+ def __init__(self, is_robot=True, interface=None, resolved_ip=None, assert_hostname=None,
40
+ force_host=None, *args, **kwargs):
41
+ if not is_robot:
42
+ self.interface = interface
43
+ self.resolved_ip = resolved_ip
44
+ self.assert_hostname = assert_hostname
45
+ self.force_host = force_host
46
+ super().__init__(*args, **kwargs)
47
+
48
+ def send(self, request, **kwargs):
49
+ """Override the send method to enforce a custom Host header for
50
+ HTTP."""
51
+ if self.force_host:
52
+ request.headers["Host"] = self.force_host
53
+ return super().send(request, **kwargs)
54
+
55
+ def get_connection_with_tls_context(self, request, verify, proxies=None, cert=None):
56
+ host_params, pool_kwargs = super().build_connection_pool_key_attributes(
57
+ request, verify, cert)
58
+
59
+ if self.resolved_ip:
60
+ host_params["host"] = self.resolved_ip
61
+ else:
62
+ raise ValueError("BindAdapter requires a resolved IP address to connect to.")
63
+
64
+ if host_params.get("scheme") == "https":
65
+ vanity = self.assert_hostname or (urlparse(request.url).hostname) or self.force_host
66
+ if vanity:
67
+ pool_kwargs["server_hostname"] = vanity # SNI
68
+ pool_kwargs["assert_hostname"] = vanity # cert hostname check
69
+
70
+ if self.interface:
71
+ so = pool_kwargs.get("socket_options") or []
72
+ so.append((socket.SOL_SOCKET, SO_BINDTODEVICE, (self.interface + "\0").encode("utf-8")))
73
+ pool_kwargs["socket_options"] = so
74
+
75
+ conn = self.poolmanager.connection_from_host(
76
+ host=host_params["host"],
77
+ port=host_params.get("port"),
78
+ scheme=host_params.get("scheme", "https"),
79
+ pool_kwargs=pool_kwargs,
80
+ )
81
+
82
+ return conn
83
+
84
+
85
+ @contextmanager
86
+ def create_bound_session(is_robot=True, interface=None, resolved_ip=None, sni_hostname=None,
87
+ force_host=None):
88
+ """Creates a session bound to optional interface with optional SNI
89
+ hostname."""
90
+ session = requests.Session()
91
+ adapter = BindAdapter(is_robot, interface=interface, resolved_ip=resolved_ip,
92
+ assert_hostname=sni_hostname, force_host=force_host)
93
+ session.mount("http://", adapter)
94
+ session.mount("https://", adapter)
95
+
96
+ try:
97
+ yield session
98
+ finally:
99
+ session.close()
100
+
101
+
102
+
103
+
104
+ def validate_url(url):
105
+ """Checks if any IP address resolved from a URL is in the blacklist. First
106
+ checks if the hostname is already a valid IP address.
107
+
108
+ Args:
109
+ url: The URL to check.
110
+
111
+ Returns:
112
+ A Tuple, where the first value is whether or not the given url was valid.
113
+ If True, the second value is a dict containing the url and hostname,
114
+ if False, the second value is an error statement of what went wrong.
115
+ """
116
+ try:
117
+ # The URL here could be a vanity name or IP address (IPv4 or IPv6), with or without a port, e.g., example.com, example.com:1234, 1.1.1.1, 1.1.1.1:1234, [::ffff:101:101], or [::ffff:101:101]:1234.
118
+ parsed_url = urlparse(url)
119
+ ret = {"parsed_url": parsed_url}
120
+
121
+ try:
122
+ # This try block is for the case where the host is an explicit IP address, e.g., 1.1.1.1 or [::ffff:101:101].
123
+ ip_address = ipaddress.ip_address(parsed_url.hostname)
124
+ # NOTE: this isn't actually a resolved IP, it's just the IP we were given.
125
+ ret["resolved_ip"] = str(ip_address)
126
+ return (True, ret)
127
+ except ValueError:
128
+ pass
129
+
130
+ try:
131
+ # This try block is for the case where the host is a vanity name, e.g., example.com. Note that this can resolve to either an IPv4 or IPv6 address.
132
+ ip_address = socket.getaddrinfo(parsed_url.hostname, port=parsed_url.port)[0][4][0]
133
+ ret["resolved_ip"] = str(ip_address)
134
+ return (True, ret)
135
+ except Exception as e:
136
+ status = f"No IP addresses resolved for URL: {url}"
137
+ _LOGGER.error(f"validate_url exception: {e}\nstatus: {status}")
138
+ return (False, status)
139
+ except ValueError:
140
+ return (False, f"Invalid URL format: {url}")
141
+
142
+
143
+ def safe_api_call(method, url, sni_hostname, timeout, is_robot=True, interface=None,
144
+ **request_data):
145
+ """Make an API call to a URL, validating the URL and checking for
146
+ redirects. Will attempt to bind the provided network interface.
147
+
148
+ Args:
149
+ method (str): method for HTTP request to use
150
+ url (str): URL to make the request to
151
+ sni_hostname (str): Hostname to assert for the Request
152
+ timeout (float): Timeout for the request
153
+ interface (str, optional): Network interface to bind all HTTP calls to, use ("WIFI", "LTE", "ETHERNET"). Will override default interface if provided, currently set to WIFI = "wlp5s0".
154
+
155
+ Returns:
156
+ Tuple[Response|None, str]: A tuple containing the response object (or None) and a status message.
157
+ """
158
+ num_redirects = 0
159
+ url_to_check = url
160
+ status = ""
161
+
162
+ # Allow only 3 redirects per API call
163
+ while num_redirects < MAX_REDIRECTS:
164
+ (url_valid, return_value) = validate_url(url_to_check)
165
+ if url_valid:
166
+ parsed_url = return_value["parsed_url"]
167
+ resolved_ip = return_value["resolved_ip"]
168
+ status = f"Validation of {url} successful with resolved_ip: {resolved_ip}"
169
+ try:
170
+ with create_bound_session(is_robot, interface, resolved_ip, sni_hostname,
171
+ sni_hostname) as session:
172
+ # Potential argument injection through user-controlled keys and values in request_data.
173
+ # This is made secure by the webserver's JSON schema allowing only specifically named fields.
174
+ # Disable automatic redirects, so we can track the new hostname before the call is made.
175
+ response = session.request(method, urlunparse(parsed_url), timeout=timeout,
176
+ allow_redirects=False, **request_data)
177
+
178
+ if 300 <= response.status_code < 400:
179
+ redirect_location = response.headers.get("Location")
180
+ url_to_check = redirect_location
181
+ num_redirects += 1
182
+ continue
183
+ else:
184
+ return response, status
185
+ except requests.exceptions.RequestException as e:
186
+ if isinstance(e, requests.exceptions.SSLError):
187
+ status = "SSL error occurred. Please upload server SSL certificate to robot."
188
+ elif isinstance(e, requests.exceptions.ConnectTimeout):
189
+ status = "Connection to server timed out. Check firewall, network, route, server, etc."
190
+ elif isinstance(e, requests.exceptions.ReadTimeout):
191
+ status = "Connected to server, but server did not respond in time. Check server logs."
192
+ elif isinstance(e, requests.exceptions.URLRequired):
193
+ status = "URL is required for request."
194
+ elif isinstance(e, requests.exceptions.TooManyRedirects):
195
+ status = "Too many redirects when accessing server."
196
+ elif isinstance(e, requests.exceptions.MissingSchema):
197
+ status = "URL is missing schema (http or https)."
198
+ elif isinstance(e, requests.exceptions.InvalidSchema):
199
+ status = "URL has invalid schema (http and https are supported)."
200
+ elif isinstance(e, requests.exceptions.InvalidURL):
201
+ status = "Invalid URL for request."
202
+ elif isinstance(e, requests.exceptions.InvalidHeader):
203
+ status = "Invalid header(s) in request."
204
+ # This catches all other RequestException types, which are not expected to occur. But, if they do, telling the user what type of exception occurred may help them resolve the problem on their own.
205
+ else:
206
+ status = f"Unknown RequestException of type {e.__class__.__name__} occurred."
207
+ _LOGGER.error(f"safe_api_call exception: {e}\nstatus: {status}")
208
+ except InterfaceNameNotFound as e:
209
+ status = "Check route in config file. Only WIFI, LTE, and ETHERNET are supported."
210
+ _LOGGER.error(f"safe_api_call exception: {e}\nstatus: {status}")
211
+ except Exception as e:
212
+ status = (f"Unknown exception of type {e.__class__.__name__} occurred.")
213
+ _LOGGER.error(f"safe_api_call exception: {e}\nstatus: {status}")
214
+ else:
215
+ status = f"{return_value}"
216
+ return None, status
217
+
218
+ # Don't expect to get here, but if it does there was a problem
219
+ status = f"Max redirects reached on url {url}"
220
+ return None, status
bosdyn/client/util.py CHANGED
@@ -16,7 +16,6 @@ from concurrent import futures
16
16
  from secrets import token_urlsafe
17
17
  from uuid import uuid4
18
18
 
19
- import google.protobuf.descriptor
20
19
  import grpc
21
20
  from deprecated.sphinx import deprecated
22
21
 
@@ -185,9 +184,8 @@ def does_dedup_filter_exist(logger, always_print_logger_levels):
185
184
  Boolean indicating if the DedupLoggingMessages filter already exists and matches the new parameters.
186
185
  """
187
186
  for filt in logger.filters:
188
- if type(
189
- filt
190
- ) == DedupLoggingMessages and filt.always_print_logger_levels == always_print_logger_levels:
187
+ if (type(filt) is DedupLoggingMessages and
188
+ filt.always_print_logger_levels == always_print_logger_levels):
191
189
  return True
192
190
  return False
193
191
 
@@ -7,7 +7,7 @@
7
7
  """For clients to use the world object service"""
8
8
 
9
9
  from bosdyn.api import geometry_pb2 as geom
10
- from bosdyn.api import world_object_pb2, world_object_service_pb2
10
+ from bosdyn.api import world_object_pb2
11
11
  from bosdyn.api import world_object_service_pb2_grpc as world_object_service
12
12
  from bosdyn.client.common import BaseClient, common_header_errors
13
13
  from bosdyn.client.frame_helpers import *
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: bosdyn-client
3
- Version: 5.0.1.2
3
+ Version: 5.1.0
4
4
  Summary: Boston Dynamics API client code and interfaces
5
5
  Home-page: https://dev.bostondynamics.com/
6
6
  Author: Boston Dynamics
@@ -15,8 +15,8 @@ Classifier: License :: Other/Proprietary License
15
15
  Classifier: Operating System :: OS Independent
16
16
  Requires-Python: >=3.7
17
17
  Description-Content-Type: text/markdown
18
- Requires-Dist: bosdyn-api (==5.0.1.2)
19
- Requires-Dist: bosdyn-core (==5.0.1.2)
18
+ Requires-Dist: bosdyn-api (==5.1.0)
19
+ Requires-Dist: bosdyn-core (==5.1.0)
20
20
  Requires-Dist: grpcio
21
21
  Requires-Dist: pyjwt
22
22
  Requires-Dist: numpy
@@ -0,0 +1,106 @@
1
+ bosdyn/__init__.py,sha256=CMQioQKK1NlMk3kZuY49b_Aw-JyvDeOtuqOCAul1I0s,330
2
+ bosdyn/client/__init__.py,sha256=PsouppDAVJC_29ETHUpDsGg6LWI6QDYIcQdFZGncWq4,1313
3
+ bosdyn/client/__main__.py,sha256=g__h-0z_Q6yzuiXdHQQTh9AI3C2cSc3PocpvbLVwa3E,466
4
+ bosdyn/client/access_controlled_door_util.py,sha256=tBOT7KLSXG1n_EIQeI8PauUH_5-uy_8umIWzDIXxaoc,8829
5
+ bosdyn/client/area_callback.py,sha256=nQnhJR8-f0PMq9uILpKhYitVuIZHl6VViUDndN2K4u8,6270
6
+ bosdyn/client/area_callback_region_handler_base.py,sha256=cr5SwGogXmuMbAbbMeHvQZQBflYyFTOCj7wrUOgsUHQ,16467
7
+ bosdyn/client/area_callback_service_runner.py,sha256=Rr30BV3TSXHQGcsUGlTa1F-noQDvgq6wv5XxQ_zTIa0,1869
8
+ bosdyn/client/area_callback_service_servicer.py,sha256=o1kYKV83Q-ud-_rmT17XTSqBdHqph_xYsgvvnpjsKtE,13229
9
+ bosdyn/client/area_callback_service_utils.py,sha256=R8ljJe8fPszMI6RyuGRyv_QGu63kw1yZAveZydlpERI,5858
10
+ bosdyn/client/arm_surface_contact.py,sha256=GS2WXvP_eGyTa_k1GDqYF5OGDG9R0Yy1mKL7sWT0b14,3663
11
+ bosdyn/client/async_tasks.py,sha256=-gc2pJXNZp6PmaLNdSkyiSYTdegX19bszhy9_ekLPes,5613
12
+ bosdyn/client/audio_visual.py,sha256=MVwmcAtBQ4xcAY-pYsbKtoAti_2jwQH2a02zNkW-ixY,23150
13
+ bosdyn/client/audio_visual_helpers.py,sha256=TkpdQ3DSE-_3oG2XH-ZfI9RChkOvAk5fOtmwqf79II4,4530
14
+ bosdyn/client/auth.py,sha256=YLo6jP0Ssl_Z6rHtTiPiKUNIweDRYub9w3iHdUe6n40,5302
15
+ bosdyn/client/auto_return.py,sha256=kqT1gaaneLYIPFVAFzpvTHRwa8NYYQ2OBf7wViBQudE,5598
16
+ bosdyn/client/autowalk.py,sha256=e7W_r8gnlIZArrLyYCldpRHZazQp9AIXpc4HgV1A2DM,5695
17
+ bosdyn/client/bddf.py,sha256=ok_2JcflSCQfcM25lpEgzKnkEJl0FDcJ16Bgo9Rjyzc,1763
18
+ bosdyn/client/bddf_download.py,sha256=oDztm-aS5J_ABLb-cxomNtwNPrdlnFp8hEuOMVxVRH4,7586
19
+ bosdyn/client/channel.py,sha256=voNa-3S6LXsTlsXPXPLEoqNxYl2Xx5CNP7w9EELEtdY,8840
20
+ bosdyn/client/command_line.py,sha256=FGuFygg-K-GPisLqehGQ1QSmam1pzSWWRm7dx4n4NFc,100713
21
+ bosdyn/client/common.py,sha256=gbjhMnmq2pR8ECS6XnhNeQ5fWN5oSQKkoIeVlhnnawc,24981
22
+ bosdyn/client/data_acquisition.py,sha256=bFtP7p1OaZAhB5cbZtnyj3g668wzoeXWU9UI196ieyo,15139
23
+ bosdyn/client/data_acquisition_helpers.py,sha256=1zkiHr3JMLjYr3Sf3FRylaXWzTMrYQKH8Msy_JCnaSE,14718
24
+ bosdyn/client/data_acquisition_plugin.py,sha256=IhKCZyPxOur8xemwtU3ydSTg4bMoP1_aHUX66SebQ4I,6636
25
+ bosdyn/client/data_acquisition_plugin_service.py,sha256=Je0mZsh-i0jj2tiJzXnDBtl5NaAK5xcsvLm2zcjLSOI,28245
26
+ bosdyn/client/data_acquisition_store.py,sha256=gpGeDUZfA1UnJWCDPFnaRCpPMQeBasUuIx2_f7ZW9Ns,19346
27
+ bosdyn/client/data_buffer.py,sha256=x-lXu3pTTr3oqlYWNrVEEog5R9hCjwudMb4ft3RiuoI,26685
28
+ bosdyn/client/data_chunk.py,sha256=6xq9zqLD-JH72ZxzEQEKYqhXvb34TlcZoeqAYaXRxCw,1959
29
+ bosdyn/client/data_service.py,sha256=aKfXJCciJ2M2WZRKfdWiLS2n-UEKWSRkOgcTnArbc5o,5201
30
+ bosdyn/client/directory.py,sha256=jWBxnPzBJSrfr4fuLf2VuZGsxOo8Q5iX5tEw6Zx2VY0,4906
31
+ bosdyn/client/directory_registration.py,sha256=s_zA5f22M5Hw-ivUhsUr0aM-yTDwwhdKRDFG6qc1hEw,20834
32
+ bosdyn/client/docking.py,sha256=hYwZNIir3_pt-WvMFiXzMqDCwW8nA5H1BYOUD6_3-00,17596
33
+ bosdyn/client/door.py,sha256=dbBuGcuoZL3gRhxTQoQHKDlnzcML8ELBtQxCQqomYpo,3110
34
+ bosdyn/client/error_callback_result.py,sha256=B3O9D8ceV1ZsS19UvguISlbvJSjtQ1aZfktVuekZXLU,1317
35
+ bosdyn/client/estop.py,sha256=flVnVvLJM_esUMrR2Ebjh6TfvCypRJIv5XAPt7zOqKQ,32101
36
+ bosdyn/client/exceptions.py,sha256=VQg5cSrzB9_pmFcUCbBaRF2QtBUKfdzpR94N3q2rNx0,5323
37
+ bosdyn/client/fault.py,sha256=P6H2kPwLB-sFkSi-vwqziqM21LtxkNfmBFuzYIK__TI,6028
38
+ bosdyn/client/frame_helpers.py,sha256=Rrm0Zx10LoaVsJv-FPCX02LVQwNkyKVO28lZz7Bmlvg,12572
39
+ bosdyn/client/graph_nav.py,sha256=gHxDR2i8WrUUyXNDeYdgMsMM0qMhopvOgDSNLNBMpO8,73488
40
+ bosdyn/client/gripper_camera_param.py,sha256=kxhBffjbq5R-t1OxWEAFguo_tKW5xGIuasdflSmfAwY,4683
41
+ bosdyn/client/hazard_avoidance.py,sha256=xBpZEu3_N6PdqF9ThVQ48mQuuvETgCf2WpSV0VgbQSI,5562
42
+ bosdyn/client/image.py,sha256=0cvskrQ37ydN4RJvCB2Wg7fOKD1Qj-vt8OSNjAoONsU,22105
43
+ bosdyn/client/image_service_helpers.py,sha256=zxowpG6lP6r1lnj40OP5Qsewa5dpR9ERVwHChSuNK6k,40293
44
+ bosdyn/client/inverse_kinematics.py,sha256=KBgvGdnt-JZJvDzbdJ72Kqw8RHoOsqKq_p9rQtvwuKo,1708
45
+ bosdyn/client/ir_enable_disable.py,sha256=GwcQDewEGgCryFwaF-w0ORMG_wpm1XJyaW-PgGeBIKY,2154
46
+ bosdyn/client/keepalive.py,sha256=B_r3TSoF1yiYBPqo0b88FmJoIHheYbO0JV-beADSMII,14953
47
+ bosdyn/client/lease.py,sha256=d1VyCxcGmL0hJ6c3d4LvpXEQNlzNpyvS0SHWwg4xvTg,45440
48
+ bosdyn/client/lease_resource_hierarchy.py,sha256=b_YpVCeiJwVQzAy1Xh5h-1HYjpbzZvmDZAcREGCOgBc,3070
49
+ bosdyn/client/lease_validator.py,sha256=DOKjKlThwXrkrBKNajXjqgc9YujeoVgTik-M3C1bdZw,14462
50
+ bosdyn/client/license.py,sha256=mJRBtwo3UHUVXqAKq-3eBf35v9U_Za_P9lPRXF9q9Lk,1736
51
+ bosdyn/client/local_grid.py,sha256=YszM_pTmeGuGIwExgRwB76PXJciO6rZqfaL2RHLxAf0,3475
52
+ bosdyn/client/log_status.py,sha256=jtaifRg1g__NcehTsh9Z688v6SMeKK_s-JOJxlLXmOg,15475
53
+ bosdyn/client/manipulation_api_client.py,sha256=bdTTqZk73m7l9bty9CNC9Bs-hTTRFEA_wDweMb4mLu4,4204
54
+ bosdyn/client/map_processing.py,sha256=fyxfKjtrd5W0G7KceNWkkvwkK3l-Z9SjsJ4HJ6o1j-g,10063
55
+ bosdyn/client/math_helpers.py,sha256=HLJ2pmul--Ualfa2cWHIgdNAZScK8MC6kjwqNKSCX44,48793
56
+ bosdyn/client/metrics_logging.py,sha256=9gjVK5Xu4JpOqMg4_tKMHd-XHOh--xaiU_OP9zcGOMs,6646
57
+ bosdyn/client/network_compute_bridge_client.py,sha256=7WQmYDlrNolzWCDhNY1wgU5ItvtlerH7nj2Ti6ovzkY,7768
58
+ bosdyn/client/payload.py,sha256=xkkpvri5DNIes1xSvqqH2EC-FoxFzgrYLcPWA0c1tac,2207
59
+ bosdyn/client/payload_registration.py,sha256=r5TS_mEnJCzw3LkyDZqQLKFIXHHblc26_ZpeBagR3uA,24253
60
+ bosdyn/client/payload_software_update.py,sha256=nYrFOxuikVd-cChkx8aZ9gpVQSxjadgPcxyT6eklwT4,8716
61
+ bosdyn/client/payload_software_update_initiation.py,sha256=LDAe_gDUCLDKOC54MbhC-hsywqNMmT_dtnYjmMaef1g,3216
62
+ bosdyn/client/point_cloud.py,sha256=F_AJBYql8b6Ok_-IEmxpV4ajdXZ_GOahPe_QwWLf7xk,8627
63
+ bosdyn/client/power.py,sha256=Xl4xRHsxAitHxxnPu15JN7Cd9YhedUULdgVsohakEDE,29220
64
+ bosdyn/client/processors.py,sha256=IIouTLq0K4b4JRtwsjW__gZYIV3Eo6EJOlHQixxOFvE,2138
65
+ bosdyn/client/ray_cast.py,sha256=Ca1yJo0aY6OmVAazb19fy44L-9LzcKVxr_fHt_EoQtg,4465
66
+ bosdyn/client/recording.py,sha256=ekmDLAl5iGrtwaZA0zFGXAuYhxDR7DQ-9nXRJy2RdxA,25849
67
+ bosdyn/client/robot.py,sha256=XQCp9NjcwS4Bhhohjup_AcLlYm67DV0tlPxuqZTwU1M,31114
68
+ bosdyn/client/robot_command.py,sha256=8ctR2Ej73dB30_HTxAlzBX175Pl0bij4LaAKSSbnwrs,108291
69
+ bosdyn/client/robot_id.py,sha256=0VZHG9hltwTLAm1_Bt26Xq1O6EROswqNwHvjY7kaplk,2482
70
+ bosdyn/client/robot_state.py,sha256=kJ2ok3deOc5GFCcmRxaAjZ-bKLoUEXLpOBLNmqXsYhE,7069
71
+ bosdyn/client/sdk.py,sha256=X0bTq28_o-0vKphv_6YrFh2vlm5FXCH8p67gor8NCAM,12875
72
+ bosdyn/client/server_util.py,sha256=uLT12vs5nAhdJ0ryaKuE82dxXnBOupebyDuzI8tbLRo,10560
73
+ bosdyn/client/service_customization_helpers.py,sha256=cw5l02J1aNykCyytlQOAlDjOXuWpheclyP7lfFN838c,49159
74
+ bosdyn/client/signals_helpers.py,sha256=Sp91IrMxVU-PeH6TK2njzFCKmFMyshRJqNa4DYRMqDU,3682
75
+ bosdyn/client/spot_check.py,sha256=-tEwnjpUqs06KSz6X4ql5TrpF6qhvsXdekGFPFnwg78,14614
76
+ bosdyn/client/time_sync.py,sha256=mDkcR5RlAKfAOwEUoBjwxtJFDKuGFGmiDcrOeCO2P_g,23089
77
+ bosdyn/client/token_cache.py,sha256=Vwf9YfsR7pTyu1fLRzXrvDo9hG5GBJcen8Azlo_5_iA,3507
78
+ bosdyn/client/token_manager.py,sha256=FkF2-xWXrKG1ttTH2omhjx7FtbIGnYkB1vAaKEhg3xM,5112
79
+ bosdyn/client/units_helpers.py,sha256=5SAmL8vsnl06oGNjzb57fUkuUbGvtbeNdg4NgW0wYAY,1084
80
+ bosdyn/client/url_validation_util.py,sha256=L_kB7BoEkaySMUcQs0LNC7C7asDt2li0TP5Ej_YxWSc,9913
81
+ bosdyn/client/util.py,sha256=icFEhvA5u5skEJc3PV3VfCXjC8L_STyiJ7NP_v4zkMk,19926
82
+ bosdyn/client/world_object.py,sha256=5ZIJWx9mPpYfPzMIeL0l0slz4AgGGNK4jJQfpjJJiIw,17040
83
+ bosdyn/client/gps/NMEAParser.py,sha256=4ZZDt7NbQiDQpeu2Cs7OsgWErUgMk5XtSIWaoEuLfHE,8709
84
+ bosdyn/client/gps/__init__.py,sha256=1qUAbnMKYlERYZvxtGz4ThjYef7Tx-ZBclLoVE_ecjU,265
85
+ bosdyn/client/gps/aggregator_client.py,sha256=W1f7rVM0HDQvpsj3aex7YyRN4tDmD0BcSiaoxkK3SJk,2189
86
+ bosdyn/client/gps/gps_listener.py,sha256=RRyeqAIg4sfRk7e7a_5dZMXlWRluo_hbe5LKw6qlw6w,7732
87
+ bosdyn/client/gps/ntrip_client.py,sha256=pVrypwzKJ4PuGHxDoAtSqDmbXZcvVN_t-NxaXkZ75_w,8927
88
+ bosdyn/client/gps/registration_client.py,sha256=LqDLl_Ezv3HNUr9R1B4n2hcMArmGwLgg1asCkGhe2WA,1901
89
+ bosdyn/client/resources/__init__.py,sha256=1qUAbnMKYlERYZvxtGz4ThjYef7Tx-ZBclLoVE_ecjU,265
90
+ bosdyn/client/resources/robot.pem,sha256=kWAr4xK29RtTVC_EhbwW2_NblIuecYqVudR2YIdTh84,1874
91
+ bosdyn/client/spot_cam/__init__.py,sha256=N0FRE-glagSWkK9HQZuGyHvRGCfDzxUyVoPFu0mkrPU,829
92
+ bosdyn/client/spot_cam/audio.py,sha256=Cnp5gL0mRFBMtAIWAfeYU66FyIltsYOciceK_uWcUQ8,9785
93
+ bosdyn/client/spot_cam/compositor.py,sha256=pU3OcyrSX8RukXgTygOC-Eub-slBCxm05u97-b3oKaw,10570
94
+ bosdyn/client/spot_cam/health.py,sha256=eDsn1QJy4w18k_pnzkCq3FsWIpGsz46Wt78iO9GBVAw,4685
95
+ bosdyn/client/spot_cam/lighting.py,sha256=kpUQl9xI0C7zXMhhluIJ8L-3uQpN-UDPcTUutuNRyjQ,3067
96
+ bosdyn/client/spot_cam/lights_helper.py,sha256=VWhXwcZ1a5X6OQ6Fd1CzGGPdW4BNQ5j636BCn6t9F58,3963
97
+ bosdyn/client/spot_cam/media_log.py,sha256=akHtOdRpqQsMNd07snVLQIi9j4isQBptc-MHFsaTUfc,10357
98
+ bosdyn/client/spot_cam/network.py,sha256=6_uJ_hXwyQvnpUZOJLapT-_31Bfjp0zrarxhUo-xKN8,3024
99
+ bosdyn/client/spot_cam/power.py,sha256=UOcyK9UdOH6cxd3U7LvSlD88XhzQjTOQoVBzEoBePtQ,5159
100
+ bosdyn/client/spot_cam/ptz.py,sha256=jlj2KKuhPct1NZklfa6rPzrdQbMh3eoNGonA25KmNm8,10601
101
+ bosdyn/client/spot_cam/streamquality.py,sha256=VuGfT5yY_qsFtX1rQzjrKosPPMIKSwqQnVaXSAEzxEg,6342
102
+ bosdyn/client/spot_cam/version.py,sha256=YuYH0zyAFgy6G7_aUArBPNY1I4m_8qAfikf66fxAddo,2834
103
+ bosdyn_client-5.1.0.dist-info/METADATA,sha256=xUV5iOag7suJ3MB022t498zij20wZTMCjCr4IJRhaWk,3987
104
+ bosdyn_client-5.1.0.dist-info/WHEEL,sha256=AtBG6SXL3KF_v0NxLf0ehyVOh0cold-JbJYXNGorC6Q,92
105
+ bosdyn_client-5.1.0.dist-info/top_level.txt,sha256=an2OWgx1ej2jFjmBjPWNQ68ZglvUfKhmXWW-WhTtDmA,7
106
+ bosdyn_client-5.1.0.dist-info/RECORD,,
@@ -1,103 +0,0 @@
1
- bosdyn/__init__.py,sha256=CMQioQKK1NlMk3kZuY49b_Aw-JyvDeOtuqOCAul1I0s,330
2
- bosdyn/client/__init__.py,sha256=PsouppDAVJC_29ETHUpDsGg6LWI6QDYIcQdFZGncWq4,1313
3
- bosdyn/client/__main__.py,sha256=g__h-0z_Q6yzuiXdHQQTh9AI3C2cSc3PocpvbLVwa3E,466
4
- bosdyn/client/area_callback.py,sha256=nQnhJR8-f0PMq9uILpKhYitVuIZHl6VViUDndN2K4u8,6270
5
- bosdyn/client/area_callback_region_handler_base.py,sha256=cr5SwGogXmuMbAbbMeHvQZQBflYyFTOCj7wrUOgsUHQ,16467
6
- bosdyn/client/area_callback_service_runner.py,sha256=Rr30BV3TSXHQGcsUGlTa1F-noQDvgq6wv5XxQ_zTIa0,1869
7
- bosdyn/client/area_callback_service_servicer.py,sha256=o1kYKV83Q-ud-_rmT17XTSqBdHqph_xYsgvvnpjsKtE,13229
8
- bosdyn/client/area_callback_service_utils.py,sha256=R8ljJe8fPszMI6RyuGRyv_QGu63kw1yZAveZydlpERI,5858
9
- bosdyn/client/arm_surface_contact.py,sha256=DRfPfsFEzfk6ufe080ViqasUefl2ZUtcvcNENgcf55k,3710
10
- bosdyn/client/async_tasks.py,sha256=gEPev6_jaUCe-G5PqktMiMGb7ohDy0daunxzQD5jafg,5594
11
- bosdyn/client/audio_visual.py,sha256=MVwmcAtBQ4xcAY-pYsbKtoAti_2jwQH2a02zNkW-ixY,23150
12
- bosdyn/client/audio_visual_helpers.py,sha256=9qksn7epH5jBdbwa6VVMcm2mn8HCVtJuSW1C847Jo6w,4499
13
- bosdyn/client/auth.py,sha256=YLo6jP0Ssl_Z6rHtTiPiKUNIweDRYub9w3iHdUe6n40,5302
14
- bosdyn/client/auto_return.py,sha256=kqT1gaaneLYIPFVAFzpvTHRwa8NYYQ2OBf7wViBQudE,5598
15
- bosdyn/client/autowalk.py,sha256=e57FcAC4fu2BPD57Yy4j1F8DPIPPic0Qt1E0UM-oZWo,5734
16
- bosdyn/client/bddf.py,sha256=ok_2JcflSCQfcM25lpEgzKnkEJl0FDcJ16Bgo9Rjyzc,1763
17
- bosdyn/client/bddf_download.py,sha256=oDztm-aS5J_ABLb-cxomNtwNPrdlnFp8hEuOMVxVRH4,7586
18
- bosdyn/client/channel.py,sha256=voNa-3S6LXsTlsXPXPLEoqNxYl2Xx5CNP7w9EELEtdY,8840
19
- bosdyn/client/command_line.py,sha256=lg5lhCAOP4Zgt6At8wis21_O2NB_SbGLL6MR22eIHL4,98748
20
- bosdyn/client/common.py,sha256=n4iTcdLCWTS9k0iH8_qrQAOhryqWjSfoEIgiBynjhOY,24997
21
- bosdyn/client/data_acquisition.py,sha256=jd3XvrktXsGUh3mlL4zMzs6zSvynayVE2_GodnYgFH4,15226
22
- bosdyn/client/data_acquisition_helpers.py,sha256=j6nTxk9QP4AsiYX9LPf0g2qDmBf-NU61kC2zZpbEBdA,14805
23
- bosdyn/client/data_acquisition_plugin.py,sha256=5IG2IYkL5FDPZhPRB8caoBjx34f63Eem5u5oZTHBaxo,6690
24
- bosdyn/client/data_acquisition_plugin_service.py,sha256=tzUBUg9LVPKvDpgogTqEzkhVdlxvHds2HdxRdNDfIJQ,28217
25
- bosdyn/client/data_acquisition_store.py,sha256=n7MUM5LLSzRJ7zC13d4pXCN-gbkduMYkt7YXU2syc1s,19647
26
- bosdyn/client/data_buffer.py,sha256=Ta-7CCoy_-StzXDm8cLIjvOnMDgKEzKFc9mcDmVkubc,26661
27
- bosdyn/client/data_chunk.py,sha256=6xq9zqLD-JH72ZxzEQEKYqhXvb34TlcZoeqAYaXRxCw,1959
28
- bosdyn/client/data_service.py,sha256=aKfXJCciJ2M2WZRKfdWiLS2n-UEKWSRkOgcTnArbc5o,5201
29
- bosdyn/client/directory.py,sha256=jWBxnPzBJSrfr4fuLf2VuZGsxOo8Q5iX5tEw6Zx2VY0,4906
30
- bosdyn/client/directory_registration.py,sha256=SV2xWly0Zu1XaWhyJ9eqXYeWSjFbwfyFmup_RjR3Cdw,20806
31
- bosdyn/client/docking.py,sha256=hYwZNIir3_pt-WvMFiXzMqDCwW8nA5H1BYOUD6_3-00,17596
32
- bosdyn/client/door.py,sha256=dbBuGcuoZL3gRhxTQoQHKDlnzcML8ELBtQxCQqomYpo,3110
33
- bosdyn/client/error_callback_result.py,sha256=B3O9D8ceV1ZsS19UvguISlbvJSjtQ1aZfktVuekZXLU,1317
34
- bosdyn/client/estop.py,sha256=-dy3SP6lcOryyTB_VXe0C_cFk-qK1TNJdSm9DKSz-MM,32073
35
- bosdyn/client/exceptions.py,sha256=VQg5cSrzB9_pmFcUCbBaRF2QtBUKfdzpR94N3q2rNx0,5323
36
- bosdyn/client/fault.py,sha256=ymo4M1Vy-bUasD8uOm1pxE1HnjheCds6qA9hZiJbAzY,6050
37
- bosdyn/client/frame_helpers.py,sha256=Rrm0Zx10LoaVsJv-FPCX02LVQwNkyKVO28lZz7Bmlvg,12572
38
- bosdyn/client/graph_nav.py,sha256=8sULbBAFaFxJPF3ZdI_kqLYpzA0XbhGO-zECRyVH1J4,70681
39
- bosdyn/client/gripper_camera_param.py,sha256=kxhBffjbq5R-t1OxWEAFguo_tKW5xGIuasdflSmfAwY,4683
40
- bosdyn/client/image.py,sha256=fn41QOvaAOH7UT7m2ENXayI4fLXg5NQBZrmpLFZVBBE,21980
41
- bosdyn/client/image_service_helpers.py,sha256=l2hZKqcG7PI05-_bhh8BLkpN4METmG53JCR0YF3q-8Y,40421
42
- bosdyn/client/inverse_kinematics.py,sha256=KBgvGdnt-JZJvDzbdJ72Kqw8RHoOsqKq_p9rQtvwuKo,1708
43
- bosdyn/client/ir_enable_disable.py,sha256=6c5MAuO1Fj0RlVcjkP1vhs-qTLiOpM3RnD8F7_ik1Gw,2153
44
- bosdyn/client/keepalive.py,sha256=Sz1sobzkyDfamKfaam7-dP3jIVlVOBs4l6JE5qqTjEA,14892
45
- bosdyn/client/lease.py,sha256=-B698QATgRuddH_pc5YN2LhMkZDacZP1kkf1MeYjqec,45412
46
- bosdyn/client/lease_resource_hierarchy.py,sha256=b_YpVCeiJwVQzAy1Xh5h-1HYjpbzZvmDZAcREGCOgBc,3070
47
- bosdyn/client/lease_validator.py,sha256=Vo5-2mtfCh50i7MDXLf4NlOBOgqd28ynPp2FF7NNGx0,14505
48
- bosdyn/client/license.py,sha256=mJRBtwo3UHUVXqAKq-3eBf35v9U_Za_P9lPRXF9q9Lk,1736
49
- bosdyn/client/local_grid.py,sha256=YszM_pTmeGuGIwExgRwB76PXJciO6rZqfaL2RHLxAf0,3475
50
- bosdyn/client/log_status.py,sha256=wcKZEFw8GHyWeYKysZ75i3PrLb1r2xVUEAyO3SDmxOI,12656
51
- bosdyn/client/manipulation_api_client.py,sha256=bdTTqZk73m7l9bty9CNC9Bs-hTTRFEA_wDweMb4mLu4,4204
52
- bosdyn/client/map_processing.py,sha256=xmwTkAfIIvRbaRnOCj-JTkrfS13n4z_DAqg-sc8hL2Y,10239
53
- bosdyn/client/math_helpers.py,sha256=HLJ2pmul--Ualfa2cWHIgdNAZScK8MC6kjwqNKSCX44,48793
54
- bosdyn/client/metrics_logging.py,sha256=9gjVK5Xu4JpOqMg4_tKMHd-XHOh--xaiU_OP9zcGOMs,6646
55
- bosdyn/client/network_compute_bridge_client.py,sha256=L7RmgCRKiPBn3SVwIxCqP0hkEkhRhF5k5xz2BpC-Omk,7966
56
- bosdyn/client/payload.py,sha256=12vZirEI4-gu9KPHsDg6MH0QCmnxbolWR1j81lvgfVw,2271
57
- bosdyn/client/payload_registration.py,sha256=rDGMK3ZtI6nmvCFsjm1MjueYglDNuHHu-7Q5V901VM8,24306
58
- bosdyn/client/payload_software_update.py,sha256=nYrFOxuikVd-cChkx8aZ9gpVQSxjadgPcxyT6eklwT4,8716
59
- bosdyn/client/payload_software_update_initiation.py,sha256=LDAe_gDUCLDKOC54MbhC-hsywqNMmT_dtnYjmMaef1g,3216
60
- bosdyn/client/point_cloud.py,sha256=F_AJBYql8b6Ok_-IEmxpV4ajdXZ_GOahPe_QwWLf7xk,8627
61
- bosdyn/client/power.py,sha256=teVPBPcwsUHvn996upF06Y5MJsfQrE-93ezMXAAYSmA,26955
62
- bosdyn/client/processors.py,sha256=Z-Djf_I_lhfokB-f_L0PewAY8J95LThdWVju1zJ2BaE,1275
63
- bosdyn/client/ray_cast.py,sha256=Ca1yJo0aY6OmVAazb19fy44L-9LzcKVxr_fHt_EoQtg,4465
64
- bosdyn/client/recording.py,sha256=sQ34G_ckrE-M42ER2GUbYI7UibvdrjHycaia58IpJ2s,25913
65
- bosdyn/client/robot.py,sha256=XQCp9NjcwS4Bhhohjup_AcLlYm67DV0tlPxuqZTwU1M,31114
66
- bosdyn/client/robot_command.py,sha256=LtoVKlJwwhTmADRMvJIWJ4B5rY_MpdhHnL72zKm1ECU,108248
67
- bosdyn/client/robot_id.py,sha256=0VZHG9hltwTLAm1_Bt26Xq1O6EROswqNwHvjY7kaplk,2482
68
- bosdyn/client/robot_state.py,sha256=h551ke5eHdAC7NgVuLphY8FZR899Ii8_lYwuoX1w1nk,7073
69
- bosdyn/client/sdk.py,sha256=XGW0DqlBfZv31LNYjjtU8p-86C5U-x2zJd7bAF3eDzg,12945
70
- bosdyn/client/server_util.py,sha256=uLT12vs5nAhdJ0ryaKuE82dxXnBOupebyDuzI8tbLRo,10560
71
- bosdyn/client/service_customization_helpers.py,sha256=GD23vhBfwCi1S4eBYIBoTbvHe9kwap1cbq0CHXlciGw,49155
72
- bosdyn/client/signals_helpers.py,sha256=Sp91IrMxVU-PeH6TK2njzFCKmFMyshRJqNa4DYRMqDU,3682
73
- bosdyn/client/spot_check.py,sha256=PKqN3kwL6oISkqwXEm_R4vz0uixIsfowWY9mC0mM8Cc,14619
74
- bosdyn/client/time_sync.py,sha256=mDkcR5RlAKfAOwEUoBjwxtJFDKuGFGmiDcrOeCO2P_g,23089
75
- bosdyn/client/token_cache.py,sha256=Vwf9YfsR7pTyu1fLRzXrvDo9hG5GBJcen8Azlo_5_iA,3507
76
- bosdyn/client/token_manager.py,sha256=FkF2-xWXrKG1ttTH2omhjx7FtbIGnYkB1vAaKEhg3xM,5112
77
- bosdyn/client/units_helpers.py,sha256=5SAmL8vsnl06oGNjzb57fUkuUbGvtbeNdg4NgW0wYAY,1084
78
- bosdyn/client/util.py,sha256=Cr_IB1taOh6Hmu1EdTHa_NU08eXnTEG7kzGX_2xDfoE,19968
79
- bosdyn/client/world_object.py,sha256=CNfZJxwdTjd-Oh35liNdkZ27sAzdnBVFTkpVIICfRTo,17066
80
- bosdyn/client/gps/NMEAParser.py,sha256=4ZZDt7NbQiDQpeu2Cs7OsgWErUgMk5XtSIWaoEuLfHE,8709
81
- bosdyn/client/gps/__init__.py,sha256=1qUAbnMKYlERYZvxtGz4ThjYef7Tx-ZBclLoVE_ecjU,265
82
- bosdyn/client/gps/aggregator_client.py,sha256=hMlmUcFope-QO51h0OAcDKWd_VUmkTkmeI6kLhj7OrU,2361
83
- bosdyn/client/gps/gps_listener.py,sha256=Xx-H61o-uV4qO5XWOBnOJckYDi7c9azl9_EyWHjYJbU,7796
84
- bosdyn/client/gps/ntrip_client.py,sha256=AvFThi3F3LyuES9vm_niHmktSLiGr_-gbIjg7pRku4Q,8311
85
- bosdyn/client/gps/registration_client.py,sha256=LqDLl_Ezv3HNUr9R1B4n2hcMArmGwLgg1asCkGhe2WA,1901
86
- bosdyn/client/resources/__init__.py,sha256=1qUAbnMKYlERYZvxtGz4ThjYef7Tx-ZBclLoVE_ecjU,265
87
- bosdyn/client/resources/robot.pem,sha256=kWAr4xK29RtTVC_EhbwW2_NblIuecYqVudR2YIdTh84,1874
88
- bosdyn/client/spot_cam/__init__.py,sha256=N0FRE-glagSWkK9HQZuGyHvRGCfDzxUyVoPFu0mkrPU,829
89
- bosdyn/client/spot_cam/audio.py,sha256=8DvUOhfHVYTOXqlQEny5qUjHvvDsijvJ_njqyNJWUrs,9845
90
- bosdyn/client/spot_cam/compositor.py,sha256=pU3OcyrSX8RukXgTygOC-Eub-slBCxm05u97-b3oKaw,10570
91
- bosdyn/client/spot_cam/health.py,sha256=HsmLOKVb7iM6bfbZye0UapPezL2naWo4yl_7HQDNGA4,4707
92
- bosdyn/client/spot_cam/lighting.py,sha256=mEUK8EWs-NRTXzDTu5VSIYD6IfyiTkfMF82Y-agHZ5g,3089
93
- bosdyn/client/spot_cam/lights_helper.py,sha256=VWhXwcZ1a5X6OQ6Fd1CzGGPdW4BNQ5j636BCn6t9F58,3963
94
- bosdyn/client/spot_cam/media_log.py,sha256=CJJepePouHr1QoXuev8oJSMhA-JUYpcm6IBUq4k-Bl4,10379
95
- bosdyn/client/spot_cam/network.py,sha256=W7z91ERPzba3BCK23jio8byDjVr6kYnucQ9zKg9BqUA,3023
96
- bosdyn/client/spot_cam/power.py,sha256=HS3nJF8hXq9m1JziOIwLHGLtlNMyLgewWBgs-mRZmTM,5181
97
- bosdyn/client/spot_cam/ptz.py,sha256=O1m7zDZ92zRmvy9qhjojiphMQwAweTO0HVizQFdWFFE,10630
98
- bosdyn/client/spot_cam/streamquality.py,sha256=e-RjizZPwZSOS4Jlqb5Ds-mC6uKam252dpEHkb58Oc8,6364
99
- bosdyn/client/spot_cam/version.py,sha256=R82eyCAY9PfZqbN8D6hNzSeZatpgpsFr995dRt1Mbe0,2856
100
- bosdyn_client-5.0.1.2.dist-info/METADATA,sha256=6Lup1U3iViBamJWCL5qGN3kg3x_YaQ1OH_uxJqLnilE,3993
101
- bosdyn_client-5.0.1.2.dist-info/WHEEL,sha256=AtBG6SXL3KF_v0NxLf0ehyVOh0cold-JbJYXNGorC6Q,92
102
- bosdyn_client-5.0.1.2.dist-info/top_level.txt,sha256=an2OWgx1ej2jFjmBjPWNQ68ZglvUfKhmXWW-WhTtDmA,7
103
- bosdyn_client-5.0.1.2.dist-info/RECORD,,