foxglove-sdk 0.15.1__cp39-cp39-win_amd64.whl → 0.15.2__cp39-cp39-win_amd64.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.

Potentially problematic release.


This version of foxglove-sdk might be problematic. Click here for more details.

foxglove/websocket.py CHANGED
@@ -1,205 +1,205 @@
1
- from __future__ import annotations
2
-
3
- import sys
4
- from collections.abc import Callable
5
- from typing import Protocol, Union
6
-
7
- if sys.version_info >= (3, 10):
8
- from typing import TypeAlias
9
- else:
10
- from typing import Any as TypeAlias
11
-
12
- from ._foxglove_py.websocket import (
13
- Capability,
14
- ChannelView,
15
- Client,
16
- ClientChannel,
17
- ConnectionGraph,
18
- MessageSchema,
19
- Parameter,
20
- ParameterType,
21
- ParameterValue,
22
- Service,
23
- ServiceRequest,
24
- ServiceSchema,
25
- StatusLevel,
26
- WebSocketServer,
27
- )
28
-
29
- ServiceHandler: TypeAlias = Callable[[ServiceRequest], bytes]
30
- AssetHandler: TypeAlias = Callable[[str], "bytes | None"]
31
- AnyParameterValue: TypeAlias = Union[
32
- ParameterValue.Integer,
33
- ParameterValue.Bool,
34
- ParameterValue.Float64,
35
- ParameterValue.String,
36
- ParameterValue.Array,
37
- ParameterValue.Dict,
38
- ]
39
- AnyInnerParameterValue: TypeAlias = Union[
40
- AnyParameterValue,
41
- bool,
42
- int,
43
- float,
44
- str,
45
- "list[AnyInnerParameterValue]",
46
- "dict[str, AnyInnerParameterValue]",
47
- ]
48
- AnyNativeParameterValue: TypeAlias = Union[
49
- AnyInnerParameterValue,
50
- bytes,
51
- ]
52
-
53
-
54
- class ServerListener(Protocol):
55
- """
56
- A mechanism to register callbacks for handling client message events.
57
- """
58
-
59
- def on_subscribe(self, client: Client, channel: ChannelView) -> None:
60
- """
61
- Called by the server when a client subscribes to a channel.
62
-
63
- :param client: The client (id) that sent the message.
64
- :param channel: The channel (id, topic) that the message was sent on.
65
- """
66
- return None
67
-
68
- def on_unsubscribe(self, client: Client, channel: ChannelView) -> None:
69
- """
70
- Called by the server when a client unsubscribes from a channel or disconnects.
71
-
72
- :param client: The client (id) that sent the message.
73
- :param channel: The channel (id, topic) that the message was sent on.
74
- """
75
- return None
76
-
77
- def on_client_advertise(self, client: Client, channel: ClientChannel) -> None:
78
- """
79
- Called by the server when a client advertises a channel.
80
-
81
- :param client: The client (id) that sent the message.
82
- :param channel: The client channel that is being advertised.
83
- """
84
- return None
85
-
86
- def on_client_unadvertise(self, client: Client, client_channel_id: int) -> None:
87
- """
88
- Called by the server when a client unadvertises a channel.
89
-
90
- :param client: The client (id) that is unadvertising the channel.
91
- :param client_channel_id: The client channel id that is being unadvertised.
92
- """
93
- return None
94
-
95
- def on_message_data(
96
- self, client: Client, client_channel_id: int, data: bytes
97
- ) -> None:
98
- """
99
- Called by the server when a message is received from a client.
100
-
101
- :param client: The client (id) that sent the message.
102
- :param client_channel_id: The client channel id that the message was sent on.
103
- :param data: The message data.
104
- """
105
- return None
106
-
107
- def on_get_parameters(
108
- self,
109
- client: Client,
110
- param_names: list[str],
111
- request_id: str | None = None,
112
- ) -> list[Parameter]:
113
- """
114
- Called by the server when a client requests parameters.
115
-
116
- Requires :py:data:`Capability.Parameters`.
117
-
118
- :param client: The client (id) that sent the message.
119
- :param param_names: The names of the parameters to get.
120
- :param request_id: An optional request id.
121
- """
122
- return []
123
-
124
- def on_set_parameters(
125
- self,
126
- client: Client,
127
- parameters: list[Parameter],
128
- request_id: str | None = None,
129
- ) -> list[Parameter]:
130
- """
131
- Called by the server when a client sets parameters.
132
- Note that only `parameters` which have changed are included in the callback, but the return
133
- value must include all parameters. If a parameter that is unset is included in the return
134
- value, it will not be published to clients.
135
-
136
- Requires :py:data:`Capability.Parameters`.
137
-
138
- :param client: The client (id) that sent the message.
139
- :param parameters: The parameters to set.
140
- :param request_id: An optional request id.
141
- """
142
- return parameters
143
-
144
- def on_parameters_subscribe(
145
- self,
146
- param_names: list[str],
147
- ) -> None:
148
- """
149
- Called by the server when a client subscribes to one or more parameters for the first time.
150
-
151
- Requires :py:data:`Capability.Parameters`.
152
-
153
- :param param_names: The names of the parameters to subscribe to.
154
- """
155
- return None
156
-
157
- def on_parameters_unsubscribe(
158
- self,
159
- param_names: list[str],
160
- ) -> None:
161
- """
162
- Called by the server when the last client subscription to one or more parameters has been
163
- removed.
164
-
165
- Requires :py:data:`Capability.Parameters`.
166
-
167
- :param param_names: The names of the parameters to unsubscribe from.
168
- """
169
- return None
170
-
171
- def on_connection_graph_subscribe(self) -> None:
172
- """
173
- Called by the server when the first client subscribes to the connection graph.
174
- """
175
- return None
176
-
177
- def on_connection_graph_unsubscribe(self) -> None:
178
- """
179
- Called by the server when the last client unsubscribes from the connection graph.
180
- """
181
- return None
182
-
183
-
184
- __all__ = [
185
- "AnyInnerParameterValue",
186
- "AnyNativeParameterValue",
187
- "AnyParameterValue",
188
- "AssetHandler",
189
- "Capability",
190
- "ChannelView",
191
- "Client",
192
- "ClientChannel",
193
- "ConnectionGraph",
194
- "MessageSchema",
195
- "Parameter",
196
- "ParameterType",
197
- "ParameterValue",
198
- "ServerListener",
199
- "Service",
200
- "ServiceHandler",
201
- "ServiceRequest",
202
- "ServiceSchema",
203
- "StatusLevel",
204
- "WebSocketServer",
205
- ]
1
+ from __future__ import annotations
2
+
3
+ import sys
4
+ from collections.abc import Callable
5
+ from typing import Protocol, Union
6
+
7
+ if sys.version_info >= (3, 10):
8
+ from typing import TypeAlias
9
+ else:
10
+ from typing import Any as TypeAlias
11
+
12
+ from ._foxglove_py.websocket import (
13
+ Capability,
14
+ ChannelView,
15
+ Client,
16
+ ClientChannel,
17
+ ConnectionGraph,
18
+ MessageSchema,
19
+ Parameter,
20
+ ParameterType,
21
+ ParameterValue,
22
+ Service,
23
+ ServiceRequest,
24
+ ServiceSchema,
25
+ StatusLevel,
26
+ WebSocketServer,
27
+ )
28
+
29
+ ServiceHandler: TypeAlias = Callable[[ServiceRequest], bytes]
30
+ AssetHandler: TypeAlias = Callable[[str], "bytes | None"]
31
+ AnyParameterValue: TypeAlias = Union[
32
+ ParameterValue.Integer,
33
+ ParameterValue.Bool,
34
+ ParameterValue.Float64,
35
+ ParameterValue.String,
36
+ ParameterValue.Array,
37
+ ParameterValue.Dict,
38
+ ]
39
+ AnyInnerParameterValue: TypeAlias = Union[
40
+ AnyParameterValue,
41
+ bool,
42
+ int,
43
+ float,
44
+ str,
45
+ "list[AnyInnerParameterValue]",
46
+ "dict[str, AnyInnerParameterValue]",
47
+ ]
48
+ AnyNativeParameterValue: TypeAlias = Union[
49
+ AnyInnerParameterValue,
50
+ bytes,
51
+ ]
52
+
53
+
54
+ class ServerListener(Protocol):
55
+ """
56
+ A mechanism to register callbacks for handling client message events.
57
+ """
58
+
59
+ def on_subscribe(self, client: Client, channel: ChannelView) -> None:
60
+ """
61
+ Called by the server when a client subscribes to a channel.
62
+
63
+ :param client: The client (id) that sent the message.
64
+ :param channel: The channel (id, topic) that the message was sent on.
65
+ """
66
+ return None
67
+
68
+ def on_unsubscribe(self, client: Client, channel: ChannelView) -> None:
69
+ """
70
+ Called by the server when a client unsubscribes from a channel or disconnects.
71
+
72
+ :param client: The client (id) that sent the message.
73
+ :param channel: The channel (id, topic) that the message was sent on.
74
+ """
75
+ return None
76
+
77
+ def on_client_advertise(self, client: Client, channel: ClientChannel) -> None:
78
+ """
79
+ Called by the server when a client advertises a channel.
80
+
81
+ :param client: The client (id) that sent the message.
82
+ :param channel: The client channel that is being advertised.
83
+ """
84
+ return None
85
+
86
+ def on_client_unadvertise(self, client: Client, client_channel_id: int) -> None:
87
+ """
88
+ Called by the server when a client unadvertises a channel.
89
+
90
+ :param client: The client (id) that is unadvertising the channel.
91
+ :param client_channel_id: The client channel id that is being unadvertised.
92
+ """
93
+ return None
94
+
95
+ def on_message_data(
96
+ self, client: Client, client_channel_id: int, data: bytes
97
+ ) -> None:
98
+ """
99
+ Called by the server when a message is received from a client.
100
+
101
+ :param client: The client (id) that sent the message.
102
+ :param client_channel_id: The client channel id that the message was sent on.
103
+ :param data: The message data.
104
+ """
105
+ return None
106
+
107
+ def on_get_parameters(
108
+ self,
109
+ client: Client,
110
+ param_names: list[str],
111
+ request_id: str | None = None,
112
+ ) -> list[Parameter]:
113
+ """
114
+ Called by the server when a client requests parameters.
115
+
116
+ Requires :py:data:`Capability.Parameters`.
117
+
118
+ :param client: The client (id) that sent the message.
119
+ :param param_names: The names of the parameters to get.
120
+ :param request_id: An optional request id.
121
+ """
122
+ return []
123
+
124
+ def on_set_parameters(
125
+ self,
126
+ client: Client,
127
+ parameters: list[Parameter],
128
+ request_id: str | None = None,
129
+ ) -> list[Parameter]:
130
+ """
131
+ Called by the server when a client sets parameters.
132
+ Note that only `parameters` which have changed are included in the callback, but the return
133
+ value must include all parameters. If a parameter that is unset is included in the return
134
+ value, it will not be published to clients.
135
+
136
+ Requires :py:data:`Capability.Parameters`.
137
+
138
+ :param client: The client (id) that sent the message.
139
+ :param parameters: The parameters to set.
140
+ :param request_id: An optional request id.
141
+ """
142
+ return parameters
143
+
144
+ def on_parameters_subscribe(
145
+ self,
146
+ param_names: list[str],
147
+ ) -> None:
148
+ """
149
+ Called by the server when a client subscribes to one or more parameters for the first time.
150
+
151
+ Requires :py:data:`Capability.Parameters`.
152
+
153
+ :param param_names: The names of the parameters to subscribe to.
154
+ """
155
+ return None
156
+
157
+ def on_parameters_unsubscribe(
158
+ self,
159
+ param_names: list[str],
160
+ ) -> None:
161
+ """
162
+ Called by the server when the last client subscription to one or more parameters has been
163
+ removed.
164
+
165
+ Requires :py:data:`Capability.Parameters`.
166
+
167
+ :param param_names: The names of the parameters to unsubscribe from.
168
+ """
169
+ return None
170
+
171
+ def on_connection_graph_subscribe(self) -> None:
172
+ """
173
+ Called by the server when the first client subscribes to the connection graph.
174
+ """
175
+ return None
176
+
177
+ def on_connection_graph_unsubscribe(self) -> None:
178
+ """
179
+ Called by the server when the last client unsubscribes from the connection graph.
180
+ """
181
+ return None
182
+
183
+
184
+ __all__ = [
185
+ "AnyInnerParameterValue",
186
+ "AnyNativeParameterValue",
187
+ "AnyParameterValue",
188
+ "AssetHandler",
189
+ "Capability",
190
+ "ChannelView",
191
+ "Client",
192
+ "ClientChannel",
193
+ "ConnectionGraph",
194
+ "MessageSchema",
195
+ "Parameter",
196
+ "ParameterType",
197
+ "ParameterValue",
198
+ "ServerListener",
199
+ "Service",
200
+ "ServiceHandler",
201
+ "ServiceRequest",
202
+ "ServiceSchema",
203
+ "StatusLevel",
204
+ "WebSocketServer",
205
+ ]
@@ -1,8 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: foxglove-sdk
3
- Version: 0.15.1
3
+ Version: 0.15.2
4
4
  Classifier: Programming Language :: Python :: 3
5
5
  Classifier: Programming Language :: Rust
6
+ Requires-Dist: anywidget ; extra == 'notebook'
7
+ Requires-Dist: mcap ; extra == 'notebook'
8
+ Requires-Dist: traitlets ; extra == 'notebook'
9
+ Provides-Extra: notebook
6
10
  Summary: Foxglove Python SDK
7
11
  Author-email: Foxglove <support@foxglove.dev>
8
12
  License-Expression: MIT
@@ -11,39 +15,39 @@ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
11
15
  Project-URL: repository, https://github.com/foxglove/foxglove-sdk
12
16
  Project-URL: documentation, https://docs.foxglove.dev/
13
17
 
14
- # Foxglove Python SDK
15
-
16
- The official [Foxglove](https://docs.foxglove.dev/docs) SDK for Python.
17
-
18
- This package provides support for integrating with the Foxglove platform. It can be used to log
19
- events to local [MCAP](https://mcap.dev/) files or a local visualization server that communicates
20
- with the Foxglove app.
21
-
22
- ## Get Started
23
-
24
- See https://foxglove.github.io/foxglove-sdk/python/
25
-
26
- ## Requirements
27
-
28
- - Python 3.9+
29
-
30
- ## Examples
31
-
32
- We're using uv as a Python package manager in the foxglove-sdk-examples.
33
-
34
- To test that all examples run (as the CI does) you can use `yarn run-python-sdk-examples` in the repo root.
35
-
36
- To run a specific example (e.g. write-mcap-file) with local changes:
37
-
38
- ```
39
- cd python/foxglove-sdk-examples/write-mcap-file
40
- uv run --with ../../foxglove-sdk main.py [args]
41
- ```
42
-
43
- Keep in mind that uv does two layers of caching.
44
- There's the .venv in your project directory, plus a global cache at ~/.cache/uv.
45
-
46
- uv tries to be smart about not rebuilding things it has already built,
47
- which means that if you make changes and you want them to show up,
48
- you also need to run `uv cache clean`.
18
+ # Foxglove Python SDK
19
+
20
+ The official [Foxglove](https://docs.foxglove.dev/docs) SDK for Python.
21
+
22
+ This package provides support for integrating with the Foxglove platform. It can be used to log
23
+ events to local [MCAP](https://mcap.dev/) files or a local visualization server that communicates
24
+ with the Foxglove app.
25
+
26
+ ## Get Started
27
+
28
+ See https://foxglove.github.io/foxglove-sdk/python/
29
+
30
+ ## Requirements
31
+
32
+ - Python 3.9+
33
+
34
+ ## Examples
35
+
36
+ We're using uv as a Python package manager in the foxglove-sdk-examples.
37
+
38
+ To test that all examples run (as the CI does) you can use `yarn run-python-sdk-examples` in the repo root.
39
+
40
+ To run a specific example (e.g. write-mcap-file) with local changes:
41
+
42
+ ```
43
+ cd python/foxglove-sdk-examples/write-mcap-file
44
+ uv run --with ../../foxglove-sdk main.py [args]
45
+ ```
46
+
47
+ Keep in mind that uv does two layers of caching.
48
+ There's the .venv in your project directory, plus a global cache at ~/.cache/uv.
49
+
50
+ uv tries to be smart about not rebuilding things it has already built,
51
+ which means that if you make changes and you want them to show up,
52
+ you also need to run `uv cache clean`.
49
53
 
@@ -0,0 +1,33 @@
1
+ foxglove/__init__.py,sha256=07Fz3ZZJdqsXRl0uKpIOID8ysa1HpQ741pQlvz1yA3I,8222
2
+ foxglove/_foxglove_py.cp39-win_amd64.pyd,sha256=zO5CeBYea-64mylt5uyHG2RTnfWE94CdQqfGeIVmHqs,4819968
3
+ foxglove/_foxglove_py/__init__.pyi,sha256=lh2gtNThduHDOIO1pQ7NaGnjAPr6s_VlbdBMRKM2dns,5201
4
+ foxglove/_foxglove_py/channels.pyi,sha256=c3WXhK5FfeCJ1aDGB-AsayIossnC8v8qFij0XWl1AEA,67327
5
+ foxglove/_foxglove_py/cloud.pyi,sha256=9Hqj7b9S2CTiWeWOIqaAw3GSmR-cGoSL4R7fi5WI-QA,255
6
+ foxglove/_foxglove_py/mcap.pyi,sha256=3ZLmrcomTN0bXoseDYGyAOd33I7fkzT4WkT130RlKJA,3693
7
+ foxglove/_foxglove_py/schemas.pyi,sha256=oVF6fwYlgoZ8a1FmlLhVgCYbz-ueM52NyuuTtwhGuFc,23092
8
+ foxglove/_foxglove_py/schemas_wkt.pyi,sha256=_nHeIdbOKMgPeL5V360-vZXCnEtyRIFzEd_JVsK49qo,2065
9
+ foxglove/_foxglove_py/websocket.pyi,sha256=CrfkGZMqVR4xn2cV7fQHUA2T6h2WddzMOQfSaj-KWBw,8097
10
+ foxglove/benchmarks/test_mcap_serialization.py,sha256=Ab_J2Mz8Vya5ZD8Yypp2jdfhaOCxYW7hw5fos7LyFXk,4682
11
+ foxglove/channel.py,sha256=MRiiOm09ZNATOvVCFuvn19KB9HkVCtsDTJYiqE7LQlA,8452
12
+ foxglove/channels/__init__.py,sha256=qTr5-HKlr4e386onX9OiYBPWUsS1n2vO23PncL0TiPY,2398
13
+ foxglove/cloud.py,sha256=eOHV8ZCnut59uBLiw1c5MiwbIALeVwPzxo2Yb-2jbII,1942
14
+ foxglove/mcap.py,sha256=LR9TSyRlDWuHZpXR8iglmDp-S-4BRqgmvTOiUKHwlsA,200
15
+ foxglove/notebook/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ foxglove/notebook/foxglove_widget.py,sha256=mOXElZLZSIQfvzbZfMd2jtvmWA-H4Z8j7fa39Vwns34,3418
17
+ foxglove/notebook/notebook_buffer.py,sha256=ooQIb8xcyNeuCoRm7CL0Uhnh9VPcd41YMUNYRu15FYg,3801
18
+ foxglove/notebook/static/widget.js,sha256=LAmo9HlxLgNAgDSROag8_3KWFLVc7gcE8EGU1ZaFjMk,3639
19
+ foxglove/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ foxglove/schemas/__init__.py,sha256=bqYBLc0HXRe-BMRP3VnF9IUB2yKYsvku3pZnulss3GY,3232
21
+ foxglove/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ foxglove/tests/test_channel.py,sha256=coIPG-P_8Uczhw2-zRo4FoanlkReiE1CKUppM9mO1oE,7146
23
+ foxglove/tests/test_context.py,sha256=OvtvjzsRaZZHPT0RyRkwrpBip-7uLaxVPwlu2RJ12yY,256
24
+ foxglove/tests/test_logging.py,sha256=G2Mljb9nN5BOY5qKAeYo0x_2blY1iIRh9s80k0O3vaI,1472
25
+ foxglove/tests/test_mcap.py,sha256=F_g9WLazTt-fJaRPQIS1Fjgf-gK_bwhgswdz17tqdEE,5646
26
+ foxglove/tests/test_parameters.py,sha256=18YsSPNnSM3VjVCh-Ag4S9mBv2G-x2zSwi5wzQClvqo,4861
27
+ foxglove/tests/test_schemas.py,sha256=4empQg8gqS7MD63ibU3kdQgJUSsUpnNQQWQ7oAf-4xk,423
28
+ foxglove/tests/test_server.py,sha256=PHraaIt4m27MXn1UveV6BRpzYCMFOQfjQD4d4ZHRjIY,2893
29
+ foxglove/tests/test_time.py,sha256=By_sM5r87s9iu4Df12r6p9DJrzTeZSLys3XGUGhvUps,4661
30
+ foxglove/websocket.py,sha256=oPcI2dttjr-RdL7z30MKEEF1cswyoDu_VetEaxAiwtQ,5812
31
+ foxglove_sdk-0.15.2.dist-info/METADATA,sha256=Iz7-5YqTaMpdYHLi-lpy-qzKOPfvqm38pHrDUC2sn_E,1714
32
+ foxglove_sdk-0.15.2.dist-info/WHEEL,sha256=W6WIdFr622-ULMOF24xhHMFUik89lyVEABV17NfNcas,94
33
+ foxglove_sdk-0.15.2.dist-info/RECORD,,
@@ -1,29 +0,0 @@
1
- foxglove/__init__.py,sha256=IoAckiOfEEq_q2sPGnl6UFz0_lwQouVbUz4wQnUY7Ik,6294
2
- foxglove/_foxglove_py.cp39-win_amd64.pyd,sha256=LNYGudliMEp_bfE3wZm0T2Jd0SjRhogykIjlakwX1RM,4817408
3
- foxglove/_foxglove_py/__init__.pyi,sha256=IEbE6b_d_7gRuq4UG-UAuzW5S-qJfctn-qbU1DUluT8,5411
4
- foxglove/_foxglove_py/channels.pyi,sha256=XpRPi9sATRRag_90KGO0D3raw77JMF6BoD7A29hKXlM,70119
5
- foxglove/_foxglove_py/cloud.pyi,sha256=HnZbDn28uaJskR5J9KVgVb9lYDGYPsn8ayFEHlpu__k,264
6
- foxglove/_foxglove_py/mcap.pyi,sha256=X_mtf0z3i8ZFjg4YBHy1DqTaaksX6LETCiQ2J4chkaM,3789
7
- foxglove/_foxglove_py/schemas.pyi,sha256=MuJaYH3cgacu9TD1gBq6OSzZ24bryM6myPb_qS-Z_xg,24101
8
- foxglove/_foxglove_py/schemas_wkt.pyi,sha256=JLUHl54JYnhpOILzzw8jn9AWk3LpeXhgWzmH3zXbbQ0,2150
9
- foxglove/_foxglove_py/websocket.pyi,sha256=nmh5sy17sD_bWcNCZ2OhfhLngHJeG-vDXXBeeVXfasc,8418
10
- foxglove/benchmarks/test_mcap_serialization.py,sha256=KVL_7G6Yyd83JbVdH7izMg98XPaNAJAzUdW2Pn53Uh4,4842
11
- foxglove/channel.py,sha256=4qvmSoeu2BENLuMrpbOGbskQVJeuToYztFSayiAmpi0,8693
12
- foxglove/channels/__init__.py,sha256=hszBT1f_Hia0wqjS6XRZ9b-oRLwPaYmcu4DqAa_JlHc,2492
13
- foxglove/cloud.py,sha256=AdNYm86chYu9jDvnyViYP7KzCI7oYf-MJTWzExOTwnM,2003
14
- foxglove/mcap.py,sha256=P1hI5bfHdD11qhkU8iMIPSuGsONEPh_k6fmcOfMOFR0,212
15
- foxglove/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- foxglove/schemas/__init__.py,sha256=EDT_bmMwE0sWN06IJyisVWxWF7Fyuij1OwjHWkybAeE,3395
17
- foxglove/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- foxglove/tests/test_channel.py,sha256=vG3FyDgDYPuxyNqNwq-GQj37K9O1o62Tif88AXPQDvs,7389
19
- foxglove/tests/test_context.py,sha256=lE758b3JmBCiWbdlqZeb2h9drY2dvex_ldhOvkAtOso,266
20
- foxglove/tests/test_logging.py,sha256=58oti-2DXG2fBKHl3oobay1LVYCTCxHr2Ni4tSPAfc4,1534
21
- foxglove/tests/test_mcap.py,sha256=4zD8DfPGjw8Ow5p0udb5KuWNjvlCU8x0Cjhx6wvAW9g,5845
22
- foxglove/tests/test_parameters.py,sha256=QSCcDjq3pk5_8q4OOqH-Kp6v791dCW8UkfUukKHSGMI,5039
23
- foxglove/tests/test_schemas.py,sha256=5QZHLFdDC7rcN7mQyOdfIckTOjo9P-dxMvMg1VXVmzo,440
24
- foxglove/tests/test_server.py,sha256=kDVcBjPxAb-HuRODwENZwtZMCNlzBQ4YxGNMXhLk3kE,3005
25
- foxglove/tests/test_time.py,sha256=OgAqZg7qHPoWcevVGyfmtz8dnqKpNsbC9mB04FB8OYk,4798
26
- foxglove/websocket.py,sha256=ReAs1wR4jjgE-pd-7bWYL8ntIR2QPr__MYxzn76MvwQ,6017
27
- foxglove_sdk-0.15.1.dist-info/METADATA,sha256=lbIrgWNo0M8fFdBXQpKFi0PtYGKHj8CIt51MNT_s6nY,1588
28
- foxglove_sdk-0.15.1.dist-info/WHEEL,sha256=W6WIdFr622-ULMOF24xhHMFUik89lyVEABV17NfNcas,94
29
- foxglove_sdk-0.15.1.dist-info/RECORD,,