foxglove-sdk 0.8.1__cp312-cp312-win32.whl → 0.16.3__cp312-cp312-win32.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,195 +1,220 @@
1
- from collections.abc import Callable
2
- from typing import Dict, List, Optional, Protocol, Union
3
-
4
- from ._foxglove_py.websocket import (
5
- Capability,
6
- ChannelView,
7
- Client,
8
- ClientChannel,
9
- ConnectionGraph,
10
- MessageSchema,
11
- Parameter,
12
- ParameterType,
13
- ParameterValue,
14
- Service,
15
- ServiceRequest,
16
- ServiceSchema,
17
- StatusLevel,
18
- WebSocketServer,
19
- )
20
-
21
- # Redefine types from the stub interface so they're available for documentation.
22
- ServiceHandler = Callable[["ServiceRequest"], bytes]
23
- AssetHandler = Callable[[str], Optional[bytes]]
24
- AnyParameterValue = Union[
25
- ParameterValue.Bool,
26
- ParameterValue.Number,
27
- ParameterValue.String,
28
- ParameterValue.Array,
29
- ParameterValue.Dict,
30
- ]
31
- AnyInnerParameterValue = Union[
32
- AnyParameterValue,
33
- bool,
34
- float,
35
- str,
36
- List["AnyInnerParameterValue"],
37
- Dict[str, "AnyInnerParameterValue"],
38
- ]
39
-
40
- AnyNativeParameterValue = Union[
41
- AnyInnerParameterValue,
42
- bytes,
43
- ]
44
-
45
-
46
- class ServerListener(Protocol):
47
- """
48
- A mechanism to register callbacks for handling client message events.
49
- """
50
-
51
- def on_subscribe(self, client: Client, channel: ChannelView) -> None:
52
- """
53
- Called by the server when a client subscribes to a channel.
54
-
55
- :param client: The client (id) that sent the message.
56
- :param channel: The channel (id, topic) that the message was sent on.
57
- """
58
- return None
59
-
60
- def on_unsubscribe(self, client: Client, channel: ChannelView) -> None:
61
- """
62
- Called by the server when a client unsubscribes from a channel or disconnects.
63
-
64
- :param client: The client (id) that sent the message.
65
- :param channel: The channel (id, topic) that the message was sent on.
66
- """
67
- return None
68
-
69
- def on_client_advertise(self, client: Client, channel: ClientChannel) -> None:
70
- """
71
- Called by the server when a client advertises a channel.
72
-
73
- :param client: The client (id) that sent the message.
74
- :param channel: The client channel that is being advertised.
75
- """
76
- return None
77
-
78
- def on_client_unadvertise(self, client: Client, client_channel_id: int) -> None:
79
- """
80
- Called by the server when a client unadvertises a channel.
81
-
82
- :param client: The client (id) that is unadvertising the channel.
83
- :param client_channel_id: The client channel id that is being unadvertised.
84
- """
85
- return None
86
-
87
- def on_message_data(
88
- self, client: Client, client_channel_id: int, data: bytes
89
- ) -> None:
90
- """
91
- Called by the server when a message is received from a client.
92
-
93
- :param client: The client (id) that sent the message.
94
- :param client_channel_id: The client channel id that the message was sent on.
95
- :param data: The message data.
96
- """
97
- return None
98
-
99
- def on_get_parameters(
100
- self,
101
- client: Client,
102
- param_names: List[str],
103
- request_id: Optional[str] = None,
104
- ) -> List["Parameter"]:
105
- """
106
- Called by the server when a client requests parameters.
107
-
108
- Requires :py:data:`Capability.Parameters`.
109
-
110
- :param client: The client (id) that sent the message.
111
- :param param_names: The names of the parameters to get.
112
- :param request_id: An optional request id.
113
- """
114
- return []
115
-
116
- def on_set_parameters(
117
- self,
118
- client: Client,
119
- parameters: List["Parameter"],
120
- request_id: Optional[str] = None,
121
- ) -> List["Parameter"]:
122
- """
123
- Called by the server when a client sets parameters.
124
- Note that only `parameters` which have changed are included in the callback, but the return
125
- value must include all parameters.
126
-
127
- Requires :py:data:`Capability.Parameters`.
128
-
129
- :param client: The client (id) that sent the message.
130
- :param parameters: The parameters to set.
131
- :param request_id: An optional request id.
132
- """
133
- return parameters
134
-
135
- def on_parameters_subscribe(
136
- self,
137
- param_names: List[str],
138
- ) -> None:
139
- """
140
- Called by the server when a client subscribes to one or more parameters for the first time.
141
-
142
- Requires :py:data:`Capability.Parameters`.
143
-
144
- :param param_names: The names of the parameters to subscribe to.
145
- """
146
- return None
147
-
148
- def on_parameters_unsubscribe(
149
- self,
150
- param_names: List[str],
151
- ) -> None:
152
- """
153
- Called by the server when the last client subscription to one or more parameters has been
154
- removed.
155
-
156
- Requires :py:data:`Capability.Parameters`.
157
-
158
- :param param_names: The names of the parameters to unsubscribe from.
159
- """
160
- return None
161
-
162
- def on_connection_graph_subscribe(self) -> None:
163
- """
164
- Called by the server when the first client subscribes to the connection graph.
165
- """
166
- return None
167
-
168
- def on_connection_graph_unsubscribe(self) -> None:
169
- """
170
- Called by the server when the last client unsubscribes from the connection graph.
171
- """
172
- return None
173
-
174
-
175
- __all__ = [
176
- "AnyInnerParameterValue",
177
- "AnyNativeParameterValue",
178
- "AnyParameterValue",
179
- "Capability",
180
- "ChannelView",
181
- "Client",
182
- "ClientChannel",
183
- "ConnectionGraph",
184
- "MessageSchema",
185
- "Parameter",
186
- "ParameterType",
187
- "ParameterValue",
188
- "ServerListener",
189
- "Service",
190
- "ServiceHandler",
191
- "ServiceRequest",
192
- "ServiceSchema",
193
- "StatusLevel",
194
- "WebSocketServer",
195
- ]
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Callable
4
+ from typing import Optional, Protocol, TypeAlias, Union
5
+
6
+ from ._foxglove_py.websocket import (
7
+ Capability,
8
+ ChannelView,
9
+ Client,
10
+ ClientChannel,
11
+ ConnectionGraph,
12
+ MessageSchema,
13
+ Parameter,
14
+ ParameterType,
15
+ ParameterValue,
16
+ PlaybackCommand,
17
+ PlaybackControlRequest,
18
+ PlaybackState,
19
+ PlaybackStatus,
20
+ Service,
21
+ ServiceRequest,
22
+ ServiceSchema,
23
+ StatusLevel,
24
+ WebSocketServer,
25
+ )
26
+
27
+ ServiceHandler: TypeAlias = Callable[[ServiceRequest], bytes]
28
+ AssetHandler: TypeAlias = Callable[[str], "bytes | None"]
29
+ AnyParameterValue: TypeAlias = Union[
30
+ ParameterValue.Integer,
31
+ ParameterValue.Bool,
32
+ ParameterValue.Float64,
33
+ ParameterValue.String,
34
+ ParameterValue.Array,
35
+ ParameterValue.Dict,
36
+ ]
37
+ AnyInnerParameterValue: TypeAlias = Union[
38
+ AnyParameterValue,
39
+ bool,
40
+ int,
41
+ float,
42
+ str,
43
+ "list[AnyInnerParameterValue]",
44
+ "dict[str, AnyInnerParameterValue]",
45
+ ]
46
+ AnyNativeParameterValue: TypeAlias = Union[
47
+ AnyInnerParameterValue,
48
+ bytes,
49
+ ]
50
+
51
+
52
+ class ServerListener(Protocol):
53
+ """
54
+ A mechanism to register callbacks for handling client message events.
55
+ """
56
+
57
+ def on_subscribe(self, client: Client, channel: ChannelView) -> None:
58
+ """
59
+ Called by the server when a client subscribes to a channel.
60
+
61
+ :param client: The client (id) that sent the message.
62
+ :param channel: The channel (id, topic) that the message was sent on.
63
+ """
64
+ return None
65
+
66
+ def on_unsubscribe(self, client: Client, channel: ChannelView) -> None:
67
+ """
68
+ Called by the server when a client unsubscribes from a channel or disconnects.
69
+
70
+ :param client: The client (id) that sent the message.
71
+ :param channel: The channel (id, topic) that the message was sent on.
72
+ """
73
+ return None
74
+
75
+ def on_client_advertise(self, client: Client, channel: ClientChannel) -> None:
76
+ """
77
+ Called by the server when a client advertises a channel.
78
+
79
+ :param client: The client (id) that sent the message.
80
+ :param channel: The client channel that is being advertised.
81
+ """
82
+ return None
83
+
84
+ def on_client_unadvertise(self, client: Client, client_channel_id: int) -> None:
85
+ """
86
+ Called by the server when a client unadvertises a channel.
87
+
88
+ :param client: The client (id) that is unadvertising the channel.
89
+ :param client_channel_id: The client channel id that is being unadvertised.
90
+ """
91
+ return None
92
+
93
+ def on_message_data(
94
+ self, client: Client, client_channel_id: int, data: bytes
95
+ ) -> None:
96
+ """
97
+ Called by the server when a message is received from a client.
98
+
99
+ :param client: The client (id) that sent the message.
100
+ :param client_channel_id: The client channel id that the message was sent on.
101
+ :param data: The message data.
102
+ """
103
+ return None
104
+
105
+ def on_get_parameters(
106
+ self,
107
+ client: Client,
108
+ param_names: list[str],
109
+ request_id: str | None = None,
110
+ ) -> list[Parameter]:
111
+ """
112
+ Called by the server when a client requests parameters.
113
+
114
+ Requires :py:data:`Capability.Parameters`.
115
+
116
+ :param client: The client (id) that sent the message.
117
+ :param param_names: The names of the parameters to get.
118
+ :param request_id: An optional request id.
119
+ """
120
+ return []
121
+
122
+ def on_set_parameters(
123
+ self,
124
+ client: Client,
125
+ parameters: list[Parameter],
126
+ request_id: str | None = None,
127
+ ) -> list[Parameter]:
128
+ """
129
+ Called by the server when a client sets parameters.
130
+ Note that only `parameters` which have changed are included in the callback, but the return
131
+ value must include all parameters. If a parameter that is unset is included in the return
132
+ value, it will not be published to clients.
133
+
134
+ Requires :py:data:`Capability.Parameters`.
135
+
136
+ :param client: The client (id) that sent the message.
137
+ :param parameters: The parameters to set.
138
+ :param request_id: An optional request id.
139
+ """
140
+ return parameters
141
+
142
+ def on_parameters_subscribe(
143
+ self,
144
+ param_names: list[str],
145
+ ) -> None:
146
+ """
147
+ Called by the server when a client subscribes to one or more parameters for the first time.
148
+
149
+ Requires :py:data:`Capability.Parameters`.
150
+
151
+ :param param_names: The names of the parameters to subscribe to.
152
+ """
153
+ return None
154
+
155
+ def on_parameters_unsubscribe(
156
+ self,
157
+ param_names: list[str],
158
+ ) -> None:
159
+ """
160
+ Called by the server when the last client subscription to one or more parameters has been
161
+ removed.
162
+
163
+ Requires :py:data:`Capability.Parameters`.
164
+
165
+ :param param_names: The names of the parameters to unsubscribe from.
166
+ """
167
+ return None
168
+
169
+ def on_connection_graph_subscribe(self) -> None:
170
+ """
171
+ Called by the server when the first client subscribes to the connection graph.
172
+ """
173
+ return None
174
+
175
+ def on_connection_graph_unsubscribe(self) -> None:
176
+ """
177
+ Called by the server when the last client unsubscribes from the connection graph.
178
+ """
179
+ return None
180
+
181
+ def on_playback_control_request(
182
+ self, playback_control_request: PlaybackControlRequest
183
+ ) -> Optional[PlaybackState]:
184
+ """
185
+ Called by the server when it receives an updated player state from the client.
186
+
187
+ Requires :py:data:`Capability.RangedPlayback`.
188
+
189
+ :meta private:
190
+ :param playback_control_request: The playback control request sent from the client
191
+ """
192
+ return None
193
+
194
+
195
+ __all__ = [
196
+ "AnyInnerParameterValue",
197
+ "AnyNativeParameterValue",
198
+ "AnyParameterValue",
199
+ "AssetHandler",
200
+ "Capability",
201
+ "ChannelView",
202
+ "Client",
203
+ "ClientChannel",
204
+ "ConnectionGraph",
205
+ "MessageSchema",
206
+ "Parameter",
207
+ "ParameterType",
208
+ "ParameterValue",
209
+ "PlaybackCommand",
210
+ "PlaybackControlRequest",
211
+ "PlaybackState",
212
+ "PlaybackStatus",
213
+ "ServerListener",
214
+ "Service",
215
+ "ServiceHandler",
216
+ "ServiceRequest",
217
+ "ServiceSchema",
218
+ "StatusLevel",
219
+ "WebSocketServer",
220
+ ]
@@ -0,0 +1,53 @@
1
+ Metadata-Version: 2.4
2
+ Name: foxglove-sdk
3
+ Version: 0.16.3
4
+ Classifier: Programming Language :: Python :: 3
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
10
+ Summary: Foxglove Python SDK
11
+ Author-email: Foxglove <support@foxglove.dev>
12
+ License-Expression: MIT
13
+ Requires-Python: >=3.10
14
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
15
+ Project-URL: documentation, https://docs.foxglove.dev/
16
+ Project-URL: repository, https://github.com/foxglove/foxglove-sdk
17
+
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.10+
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`.
53
+
@@ -0,0 +1,32 @@
1
+ foxglove\__init__.py,sha256=utf_uU_ViL7xDrTqheP6JGs3ezfPsnve2EXFdS0uq-A,8490
2
+ foxglove\_foxglove_py\__init__.pyi,sha256=Ppw0LllCD5Jos1ZGPwEefRFJXVEj9ZWd_Nez2hUYjSs,6072
3
+ foxglove\_foxglove_py\channels.pyi,sha256=c3WXhK5FfeCJ1aDGB-AsayIossnC8v8qFij0XWl1AEA,67327
4
+ foxglove\_foxglove_py\cloud.pyi,sha256=9Hqj7b9S2CTiWeWOIqaAw3GSmR-cGoSL4R7fi5WI-QA,255
5
+ foxglove\_foxglove_py\mcap.pyi,sha256=yh3RDXNiqSN5URCQF0efxezmWldvdQk_VHlW-clS0Cw,4936
6
+ foxglove\_foxglove_py\schemas.pyi,sha256=oVF6fwYlgoZ8a1FmlLhVgCYbz-ueM52NyuuTtwhGuFc,23092
7
+ foxglove\_foxglove_py\schemas_wkt.pyi,sha256=_nHeIdbOKMgPeL5V360-vZXCnEtyRIFzEd_JVsK49qo,2065
8
+ foxglove\_foxglove_py\websocket.pyi,sha256=NuCIpXp9P2bPNLyvjVYqcaeL71wKRyYB6RbTfkE6X7A,10511
9
+ foxglove\_foxglove_py.cp312-win32.pyd,sha256=iJG5RiaN-fYfdGQIbENlqLOn4XR4MOgEaa168c4cXtI,4063744
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\py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
+ foxglove\schemas\__init__.py,sha256=bqYBLc0HXRe-BMRP3VnF9IUB2yKYsvku3pZnulss3GY,3232
20
+ foxglove\tests\__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ foxglove\tests\test_channel.py,sha256=coIPG-P_8Uczhw2-zRo4FoanlkReiE1CKUppM9mO1oE,7146
22
+ foxglove\tests\test_context.py,sha256=OvtvjzsRaZZHPT0RyRkwrpBip-7uLaxVPwlu2RJ12yY,256
23
+ foxglove\tests\test_logging.py,sha256=G2Mljb9nN5BOY5qKAeYo0x_2blY1iIRh9s80k0O3vaI,1472
24
+ foxglove\tests\test_mcap.py,sha256=Y4OYgWvkPSD288rJdlrgg1haVGeDRR39sWeUcb6VO8E,14863
25
+ foxglove\tests\test_parameters.py,sha256=18YsSPNnSM3VjVCh-Ag4S9mBv2G-x2zSwi5wzQClvqo,4861
26
+ foxglove\tests\test_schemas.py,sha256=4empQg8gqS7MD63ibU3kdQgJUSsUpnNQQWQ7oAf-4xk,423
27
+ foxglove\tests\test_server.py,sha256=rR50x21OOUMVuyYmYqiRTxOrgJFyL4ZL9W4pOshfAFc,3795
28
+ foxglove\tests\test_time.py,sha256=By_sM5r87s9iu4Df12r6p9DJrzTeZSLys3XGUGhvUps,4661
29
+ foxglove\websocket.py,sha256=PvsSGmWFayjRV20u86ZEZ9zcUD7nBC9j6CKPWNZy5ks,6331
30
+ foxglove_sdk-0.16.3.dist-info\METADATA,sha256=-R_TiQnJptVFk1IqvoAQ10Fbk0wSm17dC-gEUe8MPDw,1716
31
+ foxglove_sdk-0.16.3.dist-info\WHEEL,sha256=akdtKPhgZFKWiFB2PSXRQPXzLs0y-XAkg8eqWX78MDg,93
32
+ foxglove_sdk-0.16.3.dist-info\RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: maturin (1.8.6)
2
+ Generator: maturin (1.11.5)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp312-cp312-win32
@@ -1,51 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: foxglove-sdk
3
- Version: 0.8.1
4
- Classifier: Programming Language :: Python :: 3
5
- Classifier: Programming Language :: Rust
6
- Summary: Foxglove Python SDK
7
- Author-email: Foxglove <support@foxglove.dev>
8
- License: MIT
9
- Requires-Python: >=3.9
10
- Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
11
- Project-URL: repository, https://github.com/foxglove/foxglove-sdk
12
- Project-URL: documentation, https://docs.foxglove.dev/
13
-
14
- # Foxglove Python SDK
15
-
16
- ## Requirements
17
-
18
- - Python 3.9+
19
-
20
- ### Examples
21
-
22
- To get started, install Poetry https://python-poetry.org/docs/#installation, and then the project dependencies. For example:
23
-
24
- ```sh
25
- pipx install poetry
26
- poetry install
27
- ```
28
-
29
- Examples are available in [foxglove-sdk-examples](https://github.com/foxglove/foxglove-sdk/tree/main/python/foxglove-sdk-examples).
30
-
31
- ## Overview
32
-
33
- To record messages, you need at least one sink and at least one channel.
34
-
35
- A "sink" is a destination for logged messages — either an MCAP file or a live visualization server.
36
- Use `open_mcap` to register a new MCAP sink. Use `start_server` to create a new live visualization
37
- server.
38
-
39
- A "channel" gives a way to log related messages which have the same schema. Each channel is
40
- instantiated with a unique topic name.
41
-
42
- The SDK provides classes for well-known schemas. These can be used in conjunction with associated
43
- channel classes for type-safe logging, which ensures at compile time that messages logged to a
44
- channel all share a common schema. For example, you may create a `SceneUpdateChannel` on which you
45
- will log `SceneUpdate` messages.
46
-
47
- You can also log messages with arbitrary schemas and provide your own encoding, by instantiating a
48
- `Channel` class.
49
-
50
- See the examples for more details.
51
-
@@ -1,25 +0,0 @@
1
- foxglove/__init__.py,sha256=eihG2U7jpXxdbyD5d45ZONK_QdqUy9tosrNrj7tAUwo,3898
2
- foxglove/_foxglove_py.cp312-win32.pyd,sha256=0bRwi4g-Z3aGjLD1y1G1oEyZwVh0oWnFVsctfet_mMY,3838464
3
- foxglove/_foxglove_py/__init__.pyi,sha256=RjyH1wpkiWKoAfQ-GichqoI2TEMjYtru0KcxqyACHIw,4348
4
- foxglove/_foxglove_py/channels.pyi,sha256=3Q8k0Z9Hpo07P6ceB4YGEB6miNLuWWh-M8PM6UdRBnE,64397
5
- foxglove/_foxglove_py/mcap.pyi,sha256=XO0cURiojQMSy05M-_jTqfkGePJ5e07XDlu-M_FLkAY,3392
6
- foxglove/_foxglove_py/schemas.pyi,sha256=XhGoo-5x4COydZ66iJQ-DiJj1FnEgcwO1rCWye-z9SE,21680
7
- foxglove/_foxglove_py/schemas_wkt.pyi,sha256=fPO1Tc7-9P5uGnylpdVRCzLVn1DwR1ujAmj98wwKDwI,1958
8
- foxglove/_foxglove_py/websocket.pyi,sha256=8vN2kM_57m9InXG6ZxOpL2tEtv6LakNYXng6-TzkUTw,9098
9
- foxglove/benchmarks/test_mcap_serialization.py,sha256=KVL_7G6Yyd83JbVdH7izMg98XPaNAJAzUdW2Pn53Uh4,4842
10
- foxglove/channel.py,sha256=cT9duERtTsnXzJjXIcya5YrzOpZGSsCpO1B9wcAd-iM,8400
11
- foxglove/channels/__init__.py,sha256=10IOHDUghm1a2Vg3nhbsF5p1WY_vcBnfjw2fvDXrro4,2381
12
- foxglove/mcap.py,sha256=P1hI5bfHdD11qhkU8iMIPSuGsONEPh_k6fmcOfMOFR0,212
13
- foxglove/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- foxglove/schemas/__init__.py,sha256=cxgr_rkDM76LFVKmqL-3d4B3eHbcR7vPyhHrnucTi0k,3252
15
- foxglove/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- foxglove/tests/test_channel.py,sha256=tbreO-W-UvhCybKUnfpeP-Uk430X3244wU7Eidl244E,6365
17
- foxglove/tests/test_logging.py,sha256=ZDs75WO3OgQFQ_wA056ZfLvNChdbfF1rKC52VKoesiA,371
18
- foxglove/tests/test_mcap.py,sha256=XdRfi1Ocp57VfiyqsuO2un6ecBVoukvKrfFqf-WcTNU,3197
19
- foxglove/tests/test_parameters.py,sha256=g2HtvOpmlE6K8kmE5W9k4CPt6nHmrfXHHg12LjiIvH0,4322
20
- foxglove/tests/test_server.py,sha256=EUV9PUYDXB6VW8dHxHYVSz134XrEAH4ipZUqcBRENxY,2918
21
- foxglove/tests/test_time.py,sha256=OgAqZg7qHPoWcevVGyfmtz8dnqKpNsbC9mB04FB8OYk,4798
22
- foxglove/websocket.py,sha256=nSEmLEAko9WSALois-Jkru_yCiV6r52Yu0759gHCdpg,5747
23
- foxglove_sdk-0.8.1.dist-info/METADATA,sha256=sULaD-QUTltXmrbpkiR7l6AwqlHhcXa6Sus_f7ATbvg,1765
24
- foxglove_sdk-0.8.1.dist-info/WHEEL,sha256=iip_4jp1VbEiG4s9Isod9Q3MUK3z1pesoEwCO-vGFn0,92
25
- foxglove_sdk-0.8.1.dist-info/RECORD,,