bosdyn-client 3.3.2__py3-none-any.whl → 4.0.1__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 (56) hide show
  1. bosdyn/client/__init__.py +5 -6
  2. bosdyn/client/area_callback_region_handler_base.py +19 -4
  3. bosdyn/client/area_callback_service_servicer.py +29 -1
  4. bosdyn/client/area_callback_service_utils.py +45 -51
  5. bosdyn/client/auth.py +13 -28
  6. bosdyn/client/autowalk.py +3 -0
  7. bosdyn/client/channel.py +23 -26
  8. bosdyn/client/command_line.py +64 -13
  9. bosdyn/client/common.py +4 -4
  10. bosdyn/client/data_acquisition.py +47 -6
  11. bosdyn/client/data_acquisition_plugin.py +12 -2
  12. bosdyn/client/data_acquisition_plugin_service.py +33 -2
  13. bosdyn/client/data_acquisition_store.py +38 -0
  14. bosdyn/client/data_buffer.py +22 -8
  15. bosdyn/client/data_chunk.py +1 -0
  16. bosdyn/client/directory_registration.py +1 -14
  17. bosdyn/client/exceptions.py +0 -4
  18. bosdyn/client/frame_helpers.py +3 -1
  19. bosdyn/client/gps/NMEAParser.py +189 -0
  20. bosdyn/client/gps/__init__.py +6 -0
  21. bosdyn/client/gps/aggregator_client.py +56 -0
  22. bosdyn/client/gps/gps_listener.py +153 -0
  23. bosdyn/client/gps/registration_client.py +48 -0
  24. bosdyn/client/graph_nav.py +50 -20
  25. bosdyn/client/image.py +20 -7
  26. bosdyn/client/image_service_helpers.py +14 -14
  27. bosdyn/client/lease.py +27 -22
  28. bosdyn/client/lease_validator.py +5 -5
  29. bosdyn/client/manipulation_api_client.py +1 -1
  30. bosdyn/client/map_processing.py +10 -5
  31. bosdyn/client/math_helpers.py +21 -11
  32. bosdyn/client/metrics_logging.py +147 -0
  33. bosdyn/client/network_compute_bridge_client.py +6 -0
  34. bosdyn/client/power.py +40 -0
  35. bosdyn/client/recording.py +3 -3
  36. bosdyn/client/robot.py +15 -16
  37. bosdyn/client/robot_command.py +341 -203
  38. bosdyn/client/robot_id.py +6 -5
  39. bosdyn/client/robot_state.py +6 -0
  40. bosdyn/client/sdk.py +5 -11
  41. bosdyn/client/server_util.py +11 -11
  42. bosdyn/client/service_customization_helpers.py +776 -64
  43. bosdyn/client/signals_helpers.py +105 -0
  44. bosdyn/client/spot_cam/compositor.py +6 -2
  45. bosdyn/client/spot_cam/ptz.py +24 -14
  46. bosdyn/client/spot_check.py +160 -0
  47. bosdyn/client/time_sync.py +5 -5
  48. bosdyn/client/units_helpers.py +39 -0
  49. bosdyn/client/util.py +100 -64
  50. bosdyn/client/world_object.py +5 -5
  51. {bosdyn_client-3.3.2.dist-info → bosdyn_client-4.0.1.dist-info}/METADATA +4 -3
  52. bosdyn_client-4.0.1.dist-info/RECORD +97 -0
  53. {bosdyn_client-3.3.2.dist-info → bosdyn_client-4.0.1.dist-info}/WHEEL +1 -1
  54. bosdyn/client/log_annotation.py +0 -359
  55. bosdyn_client-3.3.2.dist-info/RECORD +0 -90
  56. {bosdyn_client-3.3.2.dist-info → bosdyn_client-4.0.1.dist-info}/top_level.txt +0 -0
@@ -334,10 +334,10 @@ def send_add_mutation_requests(world_object_client, world_object_array):
334
334
  Create and send an "add" mutation request for each world object in an array. Return a matching
335
335
  array of the object id's that are assigned when the object is created, so that each object we add
336
336
  can be identified and removed individually (if desired) later.
337
-
337
+
338
338
  Args:
339
339
  world_object_client (WorldObjectClient): Client for World Object service.
340
- world_object_array (List):
340
+ world_object_array (List): List of objects to add.
341
341
  Returns:
342
342
  A List containing the object ids associated with the objects created.
343
343
  """
@@ -354,7 +354,7 @@ def send_delete_mutation_requests(world_object_client, delete_object_id_array):
354
354
  """
355
355
  Create and send a "delete" mutation request for each world object successfully identified from a
356
356
  given list of object id's.
357
-
357
+
358
358
  Args:
359
359
  world_object_client (WorldObjectClient): Client for World Object service.
360
360
  delete_object_id_array (List): List of object id's to send delete requests for.
@@ -362,11 +362,11 @@ def send_delete_mutation_requests(world_object_client, delete_object_id_array):
362
362
  world_objects = world_object_client.list_world_objects().world_objects
363
363
  for obj in world_objects:
364
364
  this_object_id = obj.id
365
- if type(delete_object_id_array) == int:
365
+ if isinstance(delete_object_id_array, int):
366
366
  delete_object_id_array = [delete_object_id_array]
367
367
  for i in range(len(delete_object_id_array)):
368
368
  delete_id = delete_object_id_array[i]
369
369
  if this_object_id == delete_id:
370
370
  del_req = make_delete_world_object_req(obj)
371
371
  del_resp = world_object_client.mutate_world_objects(mutation_req=del_req)
372
- continue
372
+ continue
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: bosdyn-client
3
- Version: 3.3.2
3
+ Version: 4.0.1
4
4
  Summary: Boston Dynamics API client code and interfaces
5
5
  Home-page: https://dev.bostondynamics.com/
6
6
  Author: Boston Dynamics
@@ -15,13 +15,14 @@ Classifier: Programming Language :: Python :: 3.10
15
15
  Classifier: License :: Other/Proprietary License
16
16
  Classifier: Operating System :: OS Independent
17
17
  Description-Content-Type: text/markdown
18
- Requires-Dist: bosdyn-api (==3.3.2)
19
- Requires-Dist: bosdyn-core (==3.3.2)
18
+ Requires-Dist: bosdyn-api (==4.0.1)
19
+ Requires-Dist: bosdyn-core (==4.0.1)
20
20
  Requires-Dist: grpcio
21
21
  Requires-Dist: pyjwt
22
22
  Requires-Dist: numpy
23
23
  Requires-Dist: Deprecated (~=1.2.10)
24
24
  Requires-Dist: requests (>=2.26.0)
25
+ Requires-Dist: pynmea2 (>=1.16.0)
25
26
 
26
27
  <!--
27
28
  Copyright (c) 2023 Boston Dynamics, Inc. All rights reserved.
@@ -0,0 +1,97 @@
1
+ bosdyn/__init__.py,sha256=CMQioQKK1NlMk3kZuY49b_Aw-JyvDeOtuqOCAul1I0s,330
2
+ bosdyn/client/__init__.py,sha256=EtinCbRF6c1BFlxRGFKGtcSSzYQQpBjnHTHOXBXxNLM,1312
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/auth.py,sha256=YLo6jP0Ssl_Z6rHtTiPiKUNIweDRYub9w3iHdUe6n40,5302
12
+ bosdyn/client/auto_return.py,sha256=kqT1gaaneLYIPFVAFzpvTHRwa8NYYQ2OBf7wViBQudE,5598
13
+ bosdyn/client/autowalk.py,sha256=e57FcAC4fu2BPD57Yy4j1F8DPIPPic0Qt1E0UM-oZWo,5734
14
+ bosdyn/client/bddf.py,sha256=ok_2JcflSCQfcM25lpEgzKnkEJl0FDcJ16Bgo9Rjyzc,1763
15
+ bosdyn/client/bddf_download.py,sha256=oDztm-aS5J_ABLb-cxomNtwNPrdlnFp8hEuOMVxVRH4,7586
16
+ bosdyn/client/channel.py,sha256=vGnKCECjdkx-OKpGrXcspyTDQYa03jVwEm_fiarrXTQ,8710
17
+ bosdyn/client/command_line.py,sha256=RPjNveh-TkTn7jMnKFVvxxwBYW41EsAXwHqrGA0T22c,88999
18
+ bosdyn/client/common.py,sha256=ePmUB0YSPUBZ4Lg9bKKPt3ANzFSP6MUlKf8-OcUtbyQ,22501
19
+ bosdyn/client/data_acquisition.py,sha256=258-tESROKFEZev9rDr0X1v7TUUYF3iPlx4G4ode7kQ,15267
20
+ bosdyn/client/data_acquisition_helpers.py,sha256=ddhx9tQ5feo_qraOzkmut6ArVtZ9OySamPUIUzBKFr8,14837
21
+ bosdyn/client/data_acquisition_plugin.py,sha256=5IG2IYkL5FDPZhPRB8caoBjx34f63Eem5u5oZTHBaxo,6690
22
+ bosdyn/client/data_acquisition_plugin_service.py,sha256=rvm3GpHyCOVbvWNDXQnWy9mjZ4qejFEzfKuSweXkeJs,26955
23
+ bosdyn/client/data_acquisition_store.py,sha256=dvP1OfvvuMNRlV7X2az3UU8SfRVV-zUFfaWhcAkUc8U,14142
24
+ bosdyn/client/data_buffer.py,sha256=Ta-7CCoy_-StzXDm8cLIjvOnMDgKEzKFc9mcDmVkubc,26661
25
+ bosdyn/client/data_chunk.py,sha256=6xq9zqLD-JH72ZxzEQEKYqhXvb34TlcZoeqAYaXRxCw,1959
26
+ bosdyn/client/data_service.py,sha256=aKfXJCciJ2M2WZRKfdWiLS2n-UEKWSRkOgcTnArbc5o,5201
27
+ bosdyn/client/directory.py,sha256=jWBxnPzBJSrfr4fuLf2VuZGsxOo8Q5iX5tEw6Zx2VY0,4906
28
+ bosdyn/client/directory_registration.py,sha256=tO-OMVYrFr1tU3oVifoFcbjW_EIXWo6bdsdvS_Gr7RA,19101
29
+ bosdyn/client/docking.py,sha256=hYwZNIir3_pt-WvMFiXzMqDCwW8nA5H1BYOUD6_3-00,17596
30
+ bosdyn/client/door.py,sha256=dbBuGcuoZL3gRhxTQoQHKDlnzcML8ELBtQxCQqomYpo,3110
31
+ bosdyn/client/estop.py,sha256=-dy3SP6lcOryyTB_VXe0C_cFk-qK1TNJdSm9DKSz-MM,32073
32
+ bosdyn/client/exceptions.py,sha256=VQg5cSrzB9_pmFcUCbBaRF2QtBUKfdzpR94N3q2rNx0,5323
33
+ bosdyn/client/fault.py,sha256=ymo4M1Vy-bUasD8uOm1pxE1HnjheCds6qA9hZiJbAzY,6050
34
+ bosdyn/client/frame_helpers.py,sha256=ZJtGnJOZfXR_X0AQXDrcVqUMVOpSEKlwR59DyzwIOvQ,12514
35
+ bosdyn/client/graph_nav.py,sha256=uwKk6iGSnmjFywuS5JxGN_pX3ojP4Z0IMQDECBW54XE,66261
36
+ bosdyn/client/gripper_camera_param.py,sha256=QKkHrA08c-BRhyLHrE4pDdh8AGUytoq6OABZpqsvVB0,2631
37
+ bosdyn/client/image.py,sha256=7yyVPgU1o8VrUf0nop6hZaCyvgm3dEJ7SNbZFda2adE,21138
38
+ bosdyn/client/image_service_helpers.py,sha256=zTS38m5QiiMrZ01Xjy8qeubx1A8S88B4T6FDIjFsc1E,39399
39
+ bosdyn/client/inverse_kinematics.py,sha256=KBgvGdnt-JZJvDzbdJ72Kqw8RHoOsqKq_p9rQtvwuKo,1708
40
+ bosdyn/client/ir_enable_disable.py,sha256=6c5MAuO1Fj0RlVcjkP1vhs-qTLiOpM3RnD8F7_ik1Gw,2153
41
+ bosdyn/client/keepalive.py,sha256=C-Vf17-sSfAHq4cbuuVIh7JQM7NLzv2pRekjHJywfdU,13214
42
+ bosdyn/client/lease.py,sha256=-B698QATgRuddH_pc5YN2LhMkZDacZP1kkf1MeYjqec,45412
43
+ bosdyn/client/lease_resource_hierarchy.py,sha256=b_YpVCeiJwVQzAy1Xh5h-1HYjpbzZvmDZAcREGCOgBc,3070
44
+ bosdyn/client/lease_validator.py,sha256=Vo5-2mtfCh50i7MDXLf4NlOBOgqd28ynPp2FF7NNGx0,14505
45
+ bosdyn/client/license.py,sha256=mJRBtwo3UHUVXqAKq-3eBf35v9U_Za_P9lPRXF9q9Lk,1736
46
+ bosdyn/client/local_grid.py,sha256=YszM_pTmeGuGIwExgRwB76PXJciO6rZqfaL2RHLxAf0,3475
47
+ bosdyn/client/log_status.py,sha256=Om5S7RPS5y-lwCfumWPPocygpYmokT5J9A6ri44Q6co,12563
48
+ bosdyn/client/manipulation_api_client.py,sha256=bdTTqZk73m7l9bty9CNC9Bs-hTTRFEA_wDweMb4mLu4,4204
49
+ bosdyn/client/map_processing.py,sha256=SG2id4LlGpCbkPFlKsnxWqjmXshB9aChs6t-EqdwFf0,10281
50
+ bosdyn/client/math_helpers.py,sha256=yWGd4LW32KNXdaZ6TNIEWX-nriV72yBuawu37IjTtC4,47848
51
+ bosdyn/client/metrics_logging.py,sha256=9gjVK5Xu4JpOqMg4_tKMHd-XHOh--xaiU_OP9zcGOMs,6646
52
+ bosdyn/client/network_compute_bridge_client.py,sha256=L7RmgCRKiPBn3SVwIxCqP0hkEkhRhF5k5xz2BpC-Omk,7966
53
+ bosdyn/client/payload.py,sha256=12vZirEI4-gu9KPHsDg6MH0QCmnxbolWR1j81lvgfVw,2271
54
+ bosdyn/client/payload_registration.py,sha256=ilT-2W1iuCZImLeDlPLovPYg5HJCk7nLTHxod0Rn8nY,22316
55
+ bosdyn/client/point_cloud.py,sha256=EZO67eqzTEX31RPHBvWXhu2GSSM82BfNNoWALFv21Xk,8382
56
+ bosdyn/client/power.py,sha256=LLywcQX93WN-fsapE3bvZwW-c2lP9B4sjPegN7l86pI,27244
57
+ bosdyn/client/processors.py,sha256=Z-Djf_I_lhfokB-f_L0PewAY8J95LThdWVju1zJ2BaE,1275
58
+ bosdyn/client/ray_cast.py,sha256=Ca1yJo0aY6OmVAazb19fy44L-9LzcKVxr_fHt_EoQtg,4465
59
+ bosdyn/client/recording.py,sha256=4LQidgu2uwZS-SovodA5qt12OlftbIXk2CgBIzPFG1I,26017
60
+ bosdyn/client/robot.py,sha256=E9Gw2ntMHAI6yueev50NS7FANBymEvsh7xniF8S2jV4,30670
61
+ bosdyn/client/robot_command.py,sha256=SYEKys3GyF6H-Wyxp4Ix5mStlOGG4pHlLSuBT_6GxMc,107624
62
+ bosdyn/client/robot_id.py,sha256=0VZHG9hltwTLAm1_Bt26Xq1O6EROswqNwHvjY7kaplk,2482
63
+ bosdyn/client/robot_state.py,sha256=MSIIGivRY3j0mmCg_vOCCmANoQRNS-VIMTx6KXfn3fE,6284
64
+ bosdyn/client/sdk.py,sha256=u-DOSF-QEERYu0hxRXmfOpRhLCD6R-b5IqgfsqUaOcY,12759
65
+ bosdyn/client/server_util.py,sha256=nzpZijK_GclVK2Zf2g2KCe-2e49NEQbPgdz75fwafXc,10402
66
+ bosdyn/client/service_customization_helpers.py,sha256=mi_xkCNvJE7wX64WFoMAKiJQsUvS33LY8PrhiV8-95w,48357
67
+ bosdyn/client/signals_helpers.py,sha256=Sp91IrMxVU-PeH6TK2njzFCKmFMyshRJqNa4DYRMqDU,3682
68
+ bosdyn/client/spot_check.py,sha256=Jvlli3xTOzlrHE6OadLJ662zoUM87jUyQewGFOYM85o,21119
69
+ bosdyn/client/time_sync.py,sha256=AIkZrEVPcsfbtgZfyx2cL72hkEzTcLIm3bokGj1-kKM,21336
70
+ bosdyn/client/token_cache.py,sha256=Vwf9YfsR7pTyu1fLRzXrvDo9hG5GBJcen8Azlo_5_iA,3507
71
+ bosdyn/client/token_manager.py,sha256=FvDFCXKIiGXZNkagKZM41Ut8Q0ChlYHN3O61CzrqMF8,3144
72
+ bosdyn/client/units_helpers.py,sha256=5SAmL8vsnl06oGNjzb57fUkuUbGvtbeNdg4NgW0wYAY,1084
73
+ bosdyn/client/util.py,sha256=1Kj10p0jqS7opwDrAAx3adfIw1lJCB1OzSZYyfUlJH8,20029
74
+ bosdyn/client/world_object.py,sha256=KbFRkG3jqQEfRN6SmSv1_D6n_9yFVYwbfCUWQ7kYpio,18695
75
+ bosdyn/client/gps/NMEAParser.py,sha256=EMyEt7KJ3QvQpTqq8gwZ9ZIKV7RRGvjJnQyY067i9Q4,8048
76
+ bosdyn/client/gps/__init__.py,sha256=1qUAbnMKYlERYZvxtGz4ThjYef7Tx-ZBclLoVE_ecjU,265
77
+ bosdyn/client/gps/aggregator_client.py,sha256=z5iRAYyCIez7p0EzIqZg3NTJGzxXAy297iENrhaL7CQ,2380
78
+ bosdyn/client/gps/gps_listener.py,sha256=r08r1qCaLVoE1mcMOMyXWHywfKdTTNeFf7SOGpJBkl0,6181
79
+ bosdyn/client/gps/registration_client.py,sha256=LqDLl_Ezv3HNUr9R1B4n2hcMArmGwLgg1asCkGhe2WA,1901
80
+ bosdyn/client/resources/__init__.py,sha256=1qUAbnMKYlERYZvxtGz4ThjYef7Tx-ZBclLoVE_ecjU,265
81
+ bosdyn/client/resources/robot.pem,sha256=kWAr4xK29RtTVC_EhbwW2_NblIuecYqVudR2YIdTh84,1874
82
+ bosdyn/client/spot_cam/__init__.py,sha256=EZAvjRSla78A2iAENu-VJLbmwamNenTZPwQspQ5iyx8,790
83
+ bosdyn/client/spot_cam/audio.py,sha256=8DvUOhfHVYTOXqlQEny5qUjHvvDsijvJ_njqyNJWUrs,9845
84
+ bosdyn/client/spot_cam/compositor.py,sha256=pU3OcyrSX8RukXgTygOC-Eub-slBCxm05u97-b3oKaw,10570
85
+ bosdyn/client/spot_cam/health.py,sha256=HsmLOKVb7iM6bfbZye0UapPezL2naWo4yl_7HQDNGA4,4707
86
+ bosdyn/client/spot_cam/lighting.py,sha256=mEUK8EWs-NRTXzDTu5VSIYD6IfyiTkfMF82Y-agHZ5g,3089
87
+ bosdyn/client/spot_cam/lights_helper.py,sha256=VWhXwcZ1a5X6OQ6Fd1CzGGPdW4BNQ5j636BCn6t9F58,3963
88
+ bosdyn/client/spot_cam/media_log.py,sha256=CJJepePouHr1QoXuev8oJSMhA-JUYpcm6IBUq4k-Bl4,10379
89
+ bosdyn/client/spot_cam/network.py,sha256=W7z91ERPzba3BCK23jio8byDjVr6kYnucQ9zKg9BqUA,3023
90
+ bosdyn/client/spot_cam/power.py,sha256=HS3nJF8hXq9m1JziOIwLHGLtlNMyLgewWBgs-mRZmTM,5181
91
+ bosdyn/client/spot_cam/ptz.py,sha256=8e6fA07aGnymSXV2MB_QBx0Pv4PSAMOihxq1jyoinDU,10815
92
+ bosdyn/client/spot_cam/streamquality.py,sha256=hQzVPdKnzVT91fc8E8AmNqhAPgddt0XE2tzNQD6QefQ,6411
93
+ bosdyn/client/spot_cam/version.py,sha256=R82eyCAY9PfZqbN8D6hNzSeZatpgpsFr995dRt1Mbe0,2856
94
+ bosdyn_client-4.0.1.dist-info/METADATA,sha256=-nVCOAMJSl7H9rk0k8SI83Gf52rvbVN630HU1DnAvQ0,3938
95
+ bosdyn_client-4.0.1.dist-info/WHEEL,sha256=AtBG6SXL3KF_v0NxLf0ehyVOh0cold-JbJYXNGorC6Q,92
96
+ bosdyn_client-4.0.1.dist-info/top_level.txt,sha256=an2OWgx1ej2jFjmBjPWNQ68ZglvUfKhmXWW-WhTtDmA,7
97
+ bosdyn_client-4.0.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.40.0)
2
+ Generator: bdist_wheel (0.41.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,359 +0,0 @@
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
- """Client for the log-annotation service (DEPRECATED).
8
-
9
- The log-annotation service is deprecated and will be removed in a later release.
10
- Instead, please use the data_buffer service going forward.
11
- """
12
-
13
- import logging
14
- import random
15
- import string
16
- import struct
17
- import sys
18
- import threading
19
- import time
20
- import traceback
21
- from queue import Queue
22
-
23
- from deprecated.sphinx import deprecated
24
-
25
- import bosdyn.api.log_annotation_pb2 as log_annotation_protos
26
- import bosdyn.api.log_annotation_service_pb2_grpc as log_annotation_service
27
- from bosdyn import util as core_util
28
- from bosdyn.client import time_sync
29
- from bosdyn.client.common import BaseClient, common_header_errors
30
- from bosdyn.client.exceptions import Error, RpcError, ServerError
31
-
32
-
33
- class InvalidArgument(Error):
34
- """A given argument could not be used."""
35
-
36
-
37
- @deprecated(reason='The log-annotation client and service have been replaced by data_buffer.',
38
- version='2.1.0', action="always")
39
- class LogAnnotationClient(BaseClient):
40
- """A client for adding annotations to robot logs."""
41
-
42
- default_service_name = 'log-annotation'
43
- service_type = 'bosdyn.api.LogAnnotationService'
44
-
45
- def __init__(self):
46
- super(LogAnnotationClient, self).__init__(log_annotation_service.LogAnnotationServiceStub)
47
- self.log_tick_schemas = {}
48
- self._timesync_endpoint = None
49
-
50
- def update_from(self, other):
51
- super(LogAnnotationClient, self).update_from(other)
52
-
53
- # Grab a timesync endpoint if it is available.
54
- try:
55
- self._timesync_endpoint = other.time_sync.endpoint
56
- except AttributeError:
57
- pass # other doesn't have a time_sync accessor
58
-
59
- def add_text_messages(self, text_messages, **kwargs):
60
- """Log text messages to the robot.
61
-
62
- Args:
63
- text_messages: Sequence of LogAnnotationTextMessage protos.
64
-
65
- Raises:
66
- RpcError: Problem communicating with the robot.
67
- """
68
- return self._do_add_text_messages(self.call, text_messages, **kwargs)
69
-
70
- def add_text_messages_async(self, text_messages, **kwargs):
71
- """Async version of add_text_messages."""
72
- return self._do_add_text_messages(self.call_async, text_messages, **kwargs)
73
-
74
- def _do_add_text_messages(self, func, text_messages, **kwargs):
75
- request = log_annotation_protos.AddLogAnnotationRequest()
76
- for in_text_msg in text_messages:
77
- request.annotations.text_messages.add().CopyFrom(in_text_msg)
78
-
79
- return func(self._stub.AddLogAnnotation, request, value_from_response=None,
80
- error_from_response=common_header_errors, **kwargs)
81
-
82
- def add_operator_comment(self, msg, robot_timestamp=None, **kwargs):
83
- """Add an operator comment to the robot log.
84
-
85
- Args:
86
- msg: Text of user comment to log.
87
- robot_timestamp: Time (google.protobuf.Timestamp) of messages, in *robot time*.
88
- If not set, timestamp will be when the robot receives the message.
89
-
90
- Raises:
91
- RpcError: Problem communicating with the robot.
92
- """
93
- return self._do_add_operator_comment(self.call, msg, robot_timestamp, **kwargs)
94
-
95
- def add_operator_comment_async(self, msg, robot_timestamp=None, **kwargs):
96
- """Async version of add_operator_comment."""
97
- return self._do_add_operator_comment(self.call_async, msg, robot_timestamp, **kwargs)
98
-
99
- def _do_add_operator_comment(self, func, msg, robot_timestamp=None, **kwargs):
100
- request = log_annotation_protos.AddLogAnnotationRequest()
101
- robot_timestamp = robot_timestamp or self._now_in_robot_basis(msg_type="Operator Comment")
102
- request.annotations.operator_messages.add(message=msg, timestamp=robot_timestamp)
103
- return func(self._stub.AddLogAnnotation, request, value_from_response=None,
104
- error_from_response=common_header_errors, **kwargs)
105
-
106
- def add_log_blob(self, data, type_id, channel=None, robot_timestamp=None, **kwargs):
107
- """Log blob messages to the robot.
108
-
109
- Args:
110
- data: Binary data of one blob.
111
- type_id: Type of binary data of blob.
112
- robot_timestamp: Time (google.protobuf.Timestamp) of messages, in *robot time*.
113
- If not set, timestamp will be when the robot receives the message.
114
-
115
- Raises:
116
- RpcError: Problem communicating with the robot.
117
- """
118
- return self._do_add_log_blob(self.call, data, type_id, channel, robot_timestamp, **kwargs)
119
-
120
- def add_log_blob_async(self, data, type_id, channel=None, robot_timestamp=None, **kwargs):
121
- """Async version of add_log_blob."""
122
- return self._do_add_log_blob(self.call_async, data, type_id, channel, robot_timestamp,
123
- **kwargs)
124
-
125
- def _do_add_log_blob(self, func, data, type_id, channel, robot_timestamp, **kwargs):
126
- request = log_annotation_protos.AddLogAnnotationRequest()
127
-
128
- if not channel:
129
- channel = type_id
130
-
131
- robot_timestamp = robot_timestamp or self._now_in_robot_basis(msg_type=type_id)
132
- request.annotations.blob_data.add(timestamp=robot_timestamp, channel=channel,
133
- type_id=type_id, data=data)
134
-
135
- return func(self._stub.AddLogAnnotation, request, value_from_response=None,
136
- error_from_response=common_header_errors, **kwargs)
137
-
138
-
139
- def add_log_protobuf(self, proto, robot_timestamp=None):
140
- return self._do_add_log_protobuf(self.add_log_blob, proto, robot_timestamp)
141
-
142
- def add_log_protobuf_async(self, proto, robot_timestamp=None):
143
- return self._do_add_log_protobuf(self.add_log_blob_async, proto, robot_timestamp)
144
-
145
- def _do_add_log_protobuf(self, func, proto, robot_timestamp):
146
- binary_data = proto.SerializeToString()
147
- robot_timestamp = robot_timestamp or self._now_in_robot_basis(proto=proto)
148
- return func(data=binary_data, type_id=proto.DESCRIPTOR.full_name,
149
- channel=proto.DESCRIPTOR.full_name, robot_timestamp=robot_timestamp)
150
-
151
- def _now_in_robot_basis(self, msg_type=None, proto=None):
152
- """Get current time in robot clock basis if possible, None otherwise."""
153
- if self._timesync_endpoint:
154
- try:
155
- converter = self._timesync_endpoint.get_robot_time_converter()
156
- except time_sync.NotEstablishedError:
157
- # No timesync. That's OK -- the receiving host will provide the timestamp.
158
- self.logger.debug(
159
- 'Could not timestamp message of type %s',
160
- (msg_type if msg_type is not None else
161
- (proto.DESCRIPTOR.full_name if proto is not None else 'Unknown')))
162
- else:
163
- return converter.robot_timestamp_from_local_secs(time.time())
164
- return None
165
-
166
-
167
- @deprecated(reason='The log-annotation client and service have been replaced by data_buffer.',
168
- version='2.1.0', action="always")
169
- class LogAnnotationHandler(logging.Handler):
170
- """A logging system Handler that publish to a bosdyn.api.LogAnnotationService (DEPRECATED).
171
-
172
- LogAnnotationHandler is deprecated.
173
- Instead, use bosdyn.client.data_buffer.LoggingHandler.
174
- """
175
-
176
- def __init__(self, service, log_client, level=logging.NOTSET, time_sync_endpoint=None,
177
- rpc_timeout=1, msg_num_limit=10, msg_age_limit=1):
178
- logging.Handler.__init__(self, level=level)
179
- self.msg_age_limit = msg_age_limit
180
- self.msg_num_limit = msg_num_limit
181
- self.rpc_timeout = rpc_timeout
182
- self.service = service
183
- self.time_sync_endpoint = time_sync_endpoint
184
- if self.time_sync_endpoint and not self.time_sync_endpoint.has_established_time_sync:
185
- raise InvalidArgument('time_sync_endpoint must have already established timesync!')
186
- # If we have this many unsent messages in the queue after a failure to send,
187
- # "dump" the messages to stdout.
188
- self._dump_msg_count = 20
189
- # Internal tracking of errors.
190
- self._num_failed_sends = 0
191
- self._num_failed_sends_sequential = 0
192
- # If we have this many failed sends in a row, stop the send thread.
193
- self._limit_failed_sends_sequential = 5
194
- # Event to trigger immediate flush of messages to the log client.
195
- self._flush_event = threading.Event()
196
- # How long to wait for flush events. Dictates non-flush update rate.
197
- self._flush_event_wait_time = 0.1
198
- # Last time "emit" was called.
199
- self._last_emit_time = 0
200
- self._log_client = log_client
201
- self._lock = threading.Lock()
202
- self._msg_queue = []
203
- self._send_thread = threading.Thread(target=self._run_send_thread)
204
- # Set to stop the message send thread.
205
- self._shutdown_event = threading.Event()
206
-
207
- # This apparently needs to be a daemon thread to play nicely with python's Handler shutdown
208
- # procedure.
209
- self._send_thread.daemon = True
210
- self._send_thread.start()
211
-
212
- def __enter__(self):
213
- """Optionally use this as a ContextManager to be more cautious about sending messages."""
214
- return self
215
-
216
- def __exit__(self, exc_type, exc_val, exc_tb):
217
- """To ensure all messages have been sent to the best of our ability, call close()."""
218
- self.close()
219
-
220
- def emit(self, record):
221
- msg = self.record_to_msg(record)
222
- with self._lock:
223
- self._msg_queue.append(msg)
224
- self._last_emit_time = time.time()
225
-
226
- def flush(self):
227
- self._flush_event.set()
228
-
229
- def close(self):
230
- self._shutdown_event.set()
231
- self._send_thread.join()
232
-
233
- # One last attempt to send any messages.
234
- if self._msg_queue:
235
- try:
236
- self._log_client.add_text_messages(self._msg_queue, timeout=self.rpc_timeout)
237
- # Catch all client library errors.
238
- except Error:
239
- self._num_failed_sends += 1
240
- with self._lock:
241
- self._dump_msg_queue()
242
- logging.Handler.close(self)
243
-
244
- def is_thread_alive(self):
245
- return self._send_thread.is_alive()
246
-
247
- def restart(self, log_client):
248
- """Restart the send thread.
249
-
250
- Raises:
251
- AssertionError if send thread is still alive.
252
- """
253
- assert not self.is_thread_alive()
254
- self._num_failed_sends_sequential = 0
255
- self._log_client = log_client
256
- self._send_thread = threading.Thread(target=self._run_send_thread)
257
- self._send_thread.daemon = True
258
- self._send_thread.start()
259
-
260
- def _dump_msg_queue(self):
261
- """Pop all of the message queue, using fallback_log to try and capture them.
262
-
263
- Should be called with the lock held.
264
- """
265
- self.fallback_log('Dumping {} messages!'.format(len(self._msg_queue)))
266
- for msg in self._msg_queue:
267
- self.fallback_log(msg)
268
- del self._msg_queue[:]
269
-
270
- def fallback_log(self, msg):
271
- print(msg, file=sys.stderr)
272
-
273
- def _run_send_thread(self):
274
- while (self._num_failed_sends_sequential < self._limit_failed_sends_sequential and
275
- not self._shutdown_event.is_set()):
276
- flush = self._flush_event.wait(self._flush_event_wait_time)
277
- msg_age = time.time() - self._last_emit_time
278
- with self._lock:
279
- num_msgs = len(self._msg_queue)
280
- to_send = self._msg_queue[:num_msgs]
281
- send_now = num_msgs >= 1 and (flush or msg_age >= self.msg_age_limit or
282
- num_msgs >= self.msg_num_limit)
283
-
284
- if send_now:
285
- self._flush_event.clear()
286
-
287
- send_errors = 0
288
- error_limit = 2
289
-
290
- sent = False
291
- while send_errors < error_limit and not self._shutdown_event.is_set():
292
- try:
293
- self._log_client.add_text_messages(to_send, timeout=self.rpc_timeout)
294
- except (RpcError, ServerError):
295
- self.fallback_log('Error:\n{}'.format(traceback.format_exc()))
296
- send_errors += 1
297
- except:
298
- # Catch all other exceptions and log them.
299
- self.fallback_log('Unexpected exception!\n{}'.format(
300
- traceback.format_exc()))
301
- break
302
- else:
303
- sent = True
304
- break
305
-
306
- # Default to possibly dumping messages.
307
- maybe_dump = True
308
- if sent:
309
- # We successfully sent logs to the log service! Delete relevant local cache.
310
- with self._lock:
311
- del self._msg_queue[:num_msgs]
312
- maybe_dump = False
313
- self._num_failed_sends_sequential = 0
314
- elif send_errors >= error_limit:
315
- self._num_failed_sends += 1
316
- self._num_failed_sends_sequential += 1
317
- elif self._shutdown_event.is_set():
318
- # Don't dump if we're shutting down; we'll clear the messages in close().
319
- maybe_dump = False
320
- else:
321
- # We can hit this state if
322
- # 1) We break out of the above loop without setting sent = True
323
- # 2) There is a logic bug in the above handling code / while loop.
324
- function_name = traceback.extract_stack()[-1][2]
325
- self.fallback_log('Unexpected condition in {}.{}!'.format(
326
- self.__class__.__name__, function_name))
327
-
328
- # If we decided we may need to dump the message queue...
329
- if maybe_dump:
330
- with self._lock:
331
- if len(self._msg_queue) >= self._dump_msg_count:
332
- self._dump_msg_queue()
333
-
334
- def record_to_msg(self, record):
335
- level = self.record_level_to_proto_level(record.levelno)
336
- msg = log_annotation_protos.LogAnnotationTextMessage(service=self.service, level=level)
337
- msg.message = self.format(record)
338
- if self.time_sync_endpoint is not None:
339
- try:
340
- msg.timestamp.CopyFrom(
341
- self.time_sync_endpoint.robot_timestamp_from_local_secs(time.time()))
342
- except time_sync.NotEstablishedError:
343
- msg.message = '(No time sync!): ' + msg.message
344
- msg.timestamp.CopyFrom(core_util.now_timestamp())
345
- else:
346
- msg.timestamp.CopyFrom(core_util.now_timestamp())
347
- return msg
348
-
349
- @staticmethod
350
- def record_level_to_proto_level(record_level):
351
- if record_level >= logging.ERROR:
352
- return log_annotation_protos.LogAnnotationTextMessage.LEVEL_ERROR
353
- elif record_level >= logging.WARNING:
354
- return log_annotation_protos.LogAnnotationTextMessage.LEVEL_WARN
355
- elif record_level >= logging.INFO:
356
- return log_annotation_protos.LogAnnotationTextMessage.LEVEL_INFO
357
- return log_annotation_protos.LogAnnotationTextMessage.LEVEL_DEBUG
358
-
359
-
@@ -1,90 +0,0 @@
1
- bosdyn/__init__.py,sha256=CMQioQKK1NlMk3kZuY49b_Aw-JyvDeOtuqOCAul1I0s,330
2
- bosdyn/client/__init__.py,sha256=szU23h0jL8WtyBaC6y1ahOLtaKgVjsBh7eb1PAuy5jg,1439
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=xGm5EGHst-Bsf4hqbQnK-CPRYcBQDaBkMLKvEnw-q9U,15819
6
- bosdyn/client/area_callback_service_runner.py,sha256=Rr30BV3TSXHQGcsUGlTa1F-noQDvgq6wv5XxQ_zTIa0,1869
7
- bosdyn/client/area_callback_service_servicer.py,sha256=HPzy_QAUqCMWPNxH7tefjXtAvW4ijLI9X9CF0UuxCrU,11538
8
- bosdyn/client/area_callback_service_utils.py,sha256=6q75KwubPezvowrrhpqehiBb0IAjnErOPTxCEyvgZ6I,6095
9
- bosdyn/client/arm_surface_contact.py,sha256=DRfPfsFEzfk6ufe080ViqasUefl2ZUtcvcNENgcf55k,3710
10
- bosdyn/client/async_tasks.py,sha256=gEPev6_jaUCe-G5PqktMiMGb7ohDy0daunxzQD5jafg,5594
11
- bosdyn/client/auth.py,sha256=SvIsSA-qDbGI4fHq9aACHdKBQDeL6RGvSoJMtJYJuQ8,6253
12
- bosdyn/client/auto_return.py,sha256=kqT1gaaneLYIPFVAFzpvTHRwa8NYYQ2OBf7wViBQudE,5598
13
- bosdyn/client/autowalk.py,sha256=vpTtuYRo5nMgMGFwyK6YQBulwuqTmMVFfAkDc3yM-W0,5731
14
- bosdyn/client/bddf.py,sha256=ok_2JcflSCQfcM25lpEgzKnkEJl0FDcJ16Bgo9Rjyzc,1763
15
- bosdyn/client/bddf_download.py,sha256=oDztm-aS5J_ABLb-cxomNtwNPrdlnFp8hEuOMVxVRH4,7586
16
- bosdyn/client/channel.py,sha256=HCr7O6VEiAX3-R3YYtQkGKyQt2H7054BQSVdDB1XWAM,8902
17
- bosdyn/client/command_line.py,sha256=iV4aCT4GsfkZg2JLE2GXIFX5DiIkPYtkBq74kk6ue9A,87371
18
- bosdyn/client/common.py,sha256=tab0BAEPqEwR5B2hVfbWRIAb4_CcBCVxBeFMRtm1kQ0,22549
19
- bosdyn/client/data_acquisition.py,sha256=Qd5tbpQozythuLECpEMl7OAsVWakHHxVMa8GtMiv2GA,13273
20
- bosdyn/client/data_acquisition_helpers.py,sha256=ddhx9tQ5feo_qraOzkmut6ArVtZ9OySamPUIUzBKFr8,14837
21
- bosdyn/client/data_acquisition_plugin.py,sha256=oMcjRpzzAuWPVs0tutggEjVodZrJ-p3KzqKKce6wWbM,6166
22
- bosdyn/client/data_acquisition_plugin_service.py,sha256=4tqakj_7hnV1HsVKXuaypkqkl5tdXSCoL9gsTxhhDb0,25078
23
- bosdyn/client/data_acquisition_store.py,sha256=L5ywybtP-dIi2kdpAFhnegI4YTjPml2zp50Rma0fRLw,12272
24
- bosdyn/client/data_buffer.py,sha256=5YOdf7r7jsA2g_-F3ipk96AJ7q07okk0sq2lYdn5wRg,25812
25
- bosdyn/client/data_chunk.py,sha256=c0BYB9bE_B1KFX3_9gFpwg_U9AVQTRf-W5WBTIwfnCo,1958
26
- bosdyn/client/data_service.py,sha256=aKfXJCciJ2M2WZRKfdWiLS2n-UEKWSRkOgcTnArbc5o,5201
27
- bosdyn/client/directory.py,sha256=jWBxnPzBJSrfr4fuLf2VuZGsxOo8Q5iX5tEw6Zx2VY0,4906
28
- bosdyn/client/directory_registration.py,sha256=5bKXl61rOJnc2MBSoevQVzKoqiBeyALi09nDT6eP06A,19696
29
- bosdyn/client/docking.py,sha256=hYwZNIir3_pt-WvMFiXzMqDCwW8nA5H1BYOUD6_3-00,17596
30
- bosdyn/client/door.py,sha256=dbBuGcuoZL3gRhxTQoQHKDlnzcML8ELBtQxCQqomYpo,3110
31
- bosdyn/client/estop.py,sha256=-dy3SP6lcOryyTB_VXe0C_cFk-qK1TNJdSm9DKSz-MM,32073
32
- bosdyn/client/exceptions.py,sha256=oTbHhyhxiP3dhg9esi0_4Zn5xU9a0tE5FnESDfD0J3s,5418
33
- bosdyn/client/fault.py,sha256=ymo4M1Vy-bUasD8uOm1pxE1HnjheCds6qA9hZiJbAzY,6050
34
- bosdyn/client/frame_helpers.py,sha256=Xo0ypDEfhShif2JWyiQ_XmmqLpM-Y3ZhL4U21MQu2lU,12480
35
- bosdyn/client/graph_nav.py,sha256=61oVhY4c7fN8vC1_MvNNsWQHJxVDbUWPgGIwivi1zqc,64765
36
- bosdyn/client/gripper_camera_param.py,sha256=QKkHrA08c-BRhyLHrE4pDdh8AGUytoq6OABZpqsvVB0,2631
37
- bosdyn/client/image.py,sha256=McYzS8aBSHuuyaKGnS1rfzFAsjmFeboOrcJ24j9BJ_I,20435
38
- bosdyn/client/image_service_helpers.py,sha256=EXziSY8j6p5PUtPVtYGu14xJKugGcAaUH1Cu15Y9Quc,39462
39
- bosdyn/client/inverse_kinematics.py,sha256=KBgvGdnt-JZJvDzbdJ72Kqw8RHoOsqKq_p9rQtvwuKo,1708
40
- bosdyn/client/ir_enable_disable.py,sha256=6c5MAuO1Fj0RlVcjkP1vhs-qTLiOpM3RnD8F7_ik1Gw,2153
41
- bosdyn/client/keepalive.py,sha256=C-Vf17-sSfAHq4cbuuVIh7JQM7NLzv2pRekjHJywfdU,13214
42
- bosdyn/client/lease.py,sha256=cPYUW8nCHR7_hKQgA3bVSF5MNb1nXWVSrrPkTWgPFA4,45001
43
- bosdyn/client/lease_resource_hierarchy.py,sha256=b_YpVCeiJwVQzAy1Xh5h-1HYjpbzZvmDZAcREGCOgBc,3070
44
- bosdyn/client/lease_validator.py,sha256=Al7YWI9TsI6UVPdnqkHHZZhbL9CSDzgdgoRrikZ7AA8,14531
45
- bosdyn/client/license.py,sha256=mJRBtwo3UHUVXqAKq-3eBf35v9U_Za_P9lPRXF9q9Lk,1736
46
- bosdyn/client/local_grid.py,sha256=YszM_pTmeGuGIwExgRwB76PXJciO6rZqfaL2RHLxAf0,3475
47
- bosdyn/client/log_annotation.py,sha256=KoKSC7QfMCbRn6TDhAsSvIRVKoILjIyKvrSjjQs4wT8,15506
48
- bosdyn/client/log_status.py,sha256=Om5S7RPS5y-lwCfumWPPocygpYmokT5J9A6ri44Q6co,12563
49
- bosdyn/client/manipulation_api_client.py,sha256=4vKaaexWb0BGwjvgaGaSBSDLJn_nEgJT_kPRTSzCUbU,4203
50
- bosdyn/client/map_processing.py,sha256=-Ay0fRoP7KczasvCwDAOdjnq9oQw-bgT5jaemYx9f0Y,9830
51
- bosdyn/client/math_helpers.py,sha256=IERJp5Cv4ZFVBEFfcHJptvfs2Vm5Xn92zftA1MJfgNY,47499
52
- bosdyn/client/network_compute_bridge_client.py,sha256=zFRanbJxTrTGdUR1kQHW83xjweTGKoRDoEmHGO7wSSw,7695
53
- bosdyn/client/payload.py,sha256=12vZirEI4-gu9KPHsDg6MH0QCmnxbolWR1j81lvgfVw,2271
54
- bosdyn/client/payload_registration.py,sha256=ilT-2W1iuCZImLeDlPLovPYg5HJCk7nLTHxod0Rn8nY,22316
55
- bosdyn/client/point_cloud.py,sha256=EZO67eqzTEX31RPHBvWXhu2GSSM82BfNNoWALFv21Xk,8382
56
- bosdyn/client/power.py,sha256=xCtrD3LFDmVRx37hffqRl4Iqo8USOhZbqGEGiYqLAlA,24947
57
- bosdyn/client/processors.py,sha256=Z-Djf_I_lhfokB-f_L0PewAY8J95LThdWVju1zJ2BaE,1275
58
- bosdyn/client/ray_cast.py,sha256=Ca1yJo0aY6OmVAazb19fy44L-9LzcKVxr_fHt_EoQtg,4465
59
- bosdyn/client/recording.py,sha256=AhTChvpKmQSOldVBTuHm5LSAuMNf-AVYRYNm5YHUaO8,26016
60
- bosdyn/client/robot.py,sha256=YetjsdF8Q-DVTe6skd3Jl1HmdpKmSrQWlx3ad39fVOs,30775
61
- bosdyn/client/robot_command.py,sha256=FVh-xExi-ctvu0Zoi1leHkPcFeWw8wn_ceD5eCDAQD4,100454
62
- bosdyn/client/robot_id.py,sha256=ghr3TQ20_sBJkC_MjflwCeooPdI09BJS98nzrqWOhzI,2359
63
- bosdyn/client/robot_state.py,sha256=I_IrY6AaOWYEC4-yNoVl5-0wxyl22wlbR9uOVOGyHNY,6215
64
- bosdyn/client/sdk.py,sha256=7Ld3DE0kDs3Dmgv5rABHvmUFDI28uQZL0QypksLlQ6s,12932
65
- bosdyn/client/server_util.py,sha256=ZBdmIf8uaeqt0nsbVADY9qxIB7TtIm-cjdGvo1Imcuw,10199
66
- bosdyn/client/service_customization_helpers.py,sha256=lZAdmHP84Le7kUFKFnzCb_NB4U4uKhHNd6FOwuusKOQ,22568
67
- bosdyn/client/spot_check.py,sha256=jELZB2WjGoEz8v19ftI7Q2FLYnenos9Ny82Ia_L3Mts,14614
68
- bosdyn/client/time_sync.py,sha256=DNnf_vS33rLuGZHMRNuVM3wCR3IjKOk89EAzSxz7OUI,21284
69
- bosdyn/client/token_cache.py,sha256=Vwf9YfsR7pTyu1fLRzXrvDo9hG5GBJcen8Azlo_5_iA,3507
70
- bosdyn/client/token_manager.py,sha256=FvDFCXKIiGXZNkagKZM41Ut8Q0ChlYHN3O61CzrqMF8,3144
71
- bosdyn/client/util.py,sha256=1turXd8J-cgyOhSdtCuKfWWYGXwy2B7_0KA2BsBVqN8,19043
72
- bosdyn/client/world_object.py,sha256=jixEHrQ-Hx2jo_Bulj9cSov8GEHHg2_BuLRL5EgtQAI,18679
73
- bosdyn/client/resources/__init__.py,sha256=1qUAbnMKYlERYZvxtGz4ThjYef7Tx-ZBclLoVE_ecjU,265
74
- bosdyn/client/resources/robot.pem,sha256=kWAr4xK29RtTVC_EhbwW2_NblIuecYqVudR2YIdTh84,1874
75
- bosdyn/client/spot_cam/__init__.py,sha256=EZAvjRSla78A2iAENu-VJLbmwamNenTZPwQspQ5iyx8,790
76
- bosdyn/client/spot_cam/audio.py,sha256=8DvUOhfHVYTOXqlQEny5qUjHvvDsijvJ_njqyNJWUrs,9845
77
- bosdyn/client/spot_cam/compositor.py,sha256=hajJVVjf_gc93arG6T1Mu3zhMA90_TV2sIwlZr1hDZI,10294
78
- bosdyn/client/spot_cam/health.py,sha256=HsmLOKVb7iM6bfbZye0UapPezL2naWo4yl_7HQDNGA4,4707
79
- bosdyn/client/spot_cam/lighting.py,sha256=mEUK8EWs-NRTXzDTu5VSIYD6IfyiTkfMF82Y-agHZ5g,3089
80
- bosdyn/client/spot_cam/lights_helper.py,sha256=VWhXwcZ1a5X6OQ6Fd1CzGGPdW4BNQ5j636BCn6t9F58,3963
81
- bosdyn/client/spot_cam/media_log.py,sha256=CJJepePouHr1QoXuev8oJSMhA-JUYpcm6IBUq4k-Bl4,10379
82
- bosdyn/client/spot_cam/network.py,sha256=W7z91ERPzba3BCK23jio8byDjVr6kYnucQ9zKg9BqUA,3023
83
- bosdyn/client/spot_cam/power.py,sha256=HS3nJF8hXq9m1JziOIwLHGLtlNMyLgewWBgs-mRZmTM,5181
84
- bosdyn/client/spot_cam/ptz.py,sha256=f_SJxRger-odXnK3QkXGMkqTqYEEsl47hJexpVjx84s,10177
85
- bosdyn/client/spot_cam/streamquality.py,sha256=hQzVPdKnzVT91fc8E8AmNqhAPgddt0XE2tzNQD6QefQ,6411
86
- bosdyn/client/spot_cam/version.py,sha256=R82eyCAY9PfZqbN8D6hNzSeZatpgpsFr995dRt1Mbe0,2856
87
- bosdyn_client-3.3.2.dist-info/METADATA,sha256=_tFmVjjUh5S4XLHpEO_Lphn-SyLFRwuP5RKoNq-2P14,3904
88
- bosdyn_client-3.3.2.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
89
- bosdyn_client-3.3.2.dist-info/top_level.txt,sha256=an2OWgx1ej2jFjmBjPWNQ68ZglvUfKhmXWW-WhTtDmA,7
90
- bosdyn_client-3.3.2.dist-info/RECORD,,