rocket-welder-sdk 1.1.43__py3-none-any.whl → 1.1.45__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.
- rocket_welder_sdk/__init__.py +44 -22
- rocket_welder_sdk/binary_frame_reader.py +222 -0
- rocket_welder_sdk/binary_frame_writer.py +213 -0
- rocket_welder_sdk/confidence.py +206 -0
- rocket_welder_sdk/delta_frame.py +150 -0
- rocket_welder_sdk/graphics/__init__.py +42 -0
- rocket_welder_sdk/graphics/layer_canvas.py +157 -0
- rocket_welder_sdk/graphics/protocol.py +72 -0
- rocket_welder_sdk/graphics/rgb_color.py +109 -0
- rocket_welder_sdk/graphics/stage.py +494 -0
- rocket_welder_sdk/graphics/vector_graphics_encoder.py +575 -0
- rocket_welder_sdk/high_level/__init__.py +8 -1
- rocket_welder_sdk/high_level/client.py +114 -3
- rocket_welder_sdk/high_level/connection_strings.py +88 -15
- rocket_welder_sdk/high_level/frame_sink_factory.py +2 -15
- rocket_welder_sdk/high_level/transport_protocol.py +4 -130
- rocket_welder_sdk/keypoints_protocol.py +520 -55
- rocket_welder_sdk/rocket_welder_client.py +210 -89
- rocket_welder_sdk/segmentation_result.py +387 -2
- rocket_welder_sdk/session_id.py +7 -182
- rocket_welder_sdk/transport/__init__.py +10 -3
- rocket_welder_sdk/transport/frame_sink.py +3 -3
- rocket_welder_sdk/transport/frame_source.py +2 -2
- rocket_welder_sdk/transport/websocket_transport.py +316 -0
- rocket_welder_sdk/varint.py +213 -0
- {rocket_welder_sdk-1.1.43.dist-info → rocket_welder_sdk-1.1.45.dist-info}/METADATA +1 -4
- rocket_welder_sdk-1.1.45.dist-info/RECORD +51 -0
- {rocket_welder_sdk-1.1.43.dist-info → rocket_welder_sdk-1.1.45.dist-info}/WHEEL +1 -1
- rocket_welder_sdk/transport/nng_transport.py +0 -197
- rocket_welder_sdk-1.1.43.dist-info/RECORD +0 -40
- {rocket_welder_sdk-1.1.43.dist-info → rocket_welder_sdk-1.1.45.dist-info}/top_level.txt +0 -0
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
"""NNG transport using pynng library.
|
|
2
|
-
|
|
3
|
-
NNG (nanomsg next generation) provides high-performance, scalable messaging patterns.
|
|
4
|
-
Supported patterns:
|
|
5
|
-
- Pub/Sub: One publisher to many subscribers
|
|
6
|
-
- Push/Pull: Load-balanced distribution to workers
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
from typing import Any, Optional, cast
|
|
10
|
-
|
|
11
|
-
import pynng
|
|
12
|
-
|
|
13
|
-
from .frame_sink import IFrameSink
|
|
14
|
-
from .frame_source import IFrameSource
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class NngFrameSink(IFrameSink):
|
|
18
|
-
"""
|
|
19
|
-
Frame sink that publishes to NNG Pub/Sub or Push/Pull pattern.
|
|
20
|
-
|
|
21
|
-
Each frame is sent as a single NNG message (no framing needed - NNG handles message boundaries).
|
|
22
|
-
"""
|
|
23
|
-
|
|
24
|
-
def __init__(self, socket: Any, leave_open: bool = False):
|
|
25
|
-
"""
|
|
26
|
-
Create an NNG frame sink from a socket.
|
|
27
|
-
|
|
28
|
-
Args:
|
|
29
|
-
socket: pynng socket (Publisher or Pusher)
|
|
30
|
-
leave_open: If True, doesn't close socket on close
|
|
31
|
-
"""
|
|
32
|
-
self._socket: Any = socket
|
|
33
|
-
self._leave_open = leave_open
|
|
34
|
-
self._closed = False
|
|
35
|
-
|
|
36
|
-
@classmethod
|
|
37
|
-
def create_publisher(cls, url: str) -> "NngFrameSink":
|
|
38
|
-
"""
|
|
39
|
-
Create an NNG Publisher frame sink bound to the specified URL.
|
|
40
|
-
|
|
41
|
-
Args:
|
|
42
|
-
url: NNG URL (e.g., "tcp://127.0.0.1:5555", "ipc:///tmp/mysocket")
|
|
43
|
-
|
|
44
|
-
Returns:
|
|
45
|
-
Frame sink ready to publish messages
|
|
46
|
-
"""
|
|
47
|
-
socket = pynng.Pub0()
|
|
48
|
-
socket.listen(url)
|
|
49
|
-
return cls(socket, leave_open=False)
|
|
50
|
-
|
|
51
|
-
@classmethod
|
|
52
|
-
def create_pusher(cls, url: str, bind_mode: bool = True) -> "NngFrameSink":
|
|
53
|
-
"""
|
|
54
|
-
Create an NNG Pusher frame sink.
|
|
55
|
-
|
|
56
|
-
Args:
|
|
57
|
-
url: NNG URL (e.g., "tcp://127.0.0.1:5555", "ipc:///tmp/mysocket")
|
|
58
|
-
bind_mode: If True, listens (bind); if False, dials (connect)
|
|
59
|
-
|
|
60
|
-
Returns:
|
|
61
|
-
Frame sink ready to push messages
|
|
62
|
-
"""
|
|
63
|
-
socket = pynng.Push0()
|
|
64
|
-
if bind_mode:
|
|
65
|
-
socket.listen(url)
|
|
66
|
-
else:
|
|
67
|
-
socket.dial(url)
|
|
68
|
-
return cls(socket, leave_open=False)
|
|
69
|
-
|
|
70
|
-
def write_frame(self, frame_data: bytes) -> None:
|
|
71
|
-
"""Write frame to NNG socket (no length prefix - NNG handles message boundaries)."""
|
|
72
|
-
if self._closed:
|
|
73
|
-
raise ValueError("Cannot write to closed sink")
|
|
74
|
-
|
|
75
|
-
self._socket.send(frame_data)
|
|
76
|
-
|
|
77
|
-
async def write_frame_async(self, frame_data: bytes) -> None:
|
|
78
|
-
"""Write frame asynchronously."""
|
|
79
|
-
if self._closed:
|
|
80
|
-
raise ValueError("Cannot write to closed sink")
|
|
81
|
-
|
|
82
|
-
await self._socket.asend(frame_data)
|
|
83
|
-
|
|
84
|
-
def flush(self) -> None:
|
|
85
|
-
"""Flush is a no-op for NNG (data sent immediately)."""
|
|
86
|
-
pass
|
|
87
|
-
|
|
88
|
-
async def flush_async(self) -> None:
|
|
89
|
-
"""Flush asynchronously is a no-op for NNG."""
|
|
90
|
-
pass
|
|
91
|
-
|
|
92
|
-
def close(self) -> None:
|
|
93
|
-
"""Close the NNG sink."""
|
|
94
|
-
if self._closed:
|
|
95
|
-
return
|
|
96
|
-
self._closed = True
|
|
97
|
-
if not self._leave_open:
|
|
98
|
-
self._socket.close()
|
|
99
|
-
|
|
100
|
-
async def close_async(self) -> None:
|
|
101
|
-
"""Close the NNG sink asynchronously."""
|
|
102
|
-
self.close()
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
class NngFrameSource(IFrameSource):
|
|
106
|
-
"""
|
|
107
|
-
Frame source that subscribes to NNG Pub/Sub or Pull pattern.
|
|
108
|
-
|
|
109
|
-
Each NNG message is treated as a complete frame (no framing needed - NNG handles message boundaries).
|
|
110
|
-
"""
|
|
111
|
-
|
|
112
|
-
def __init__(self, socket: Any, leave_open: bool = False):
|
|
113
|
-
"""
|
|
114
|
-
Create an NNG frame source from a socket.
|
|
115
|
-
|
|
116
|
-
Args:
|
|
117
|
-
socket: pynng socket (Subscriber or Puller)
|
|
118
|
-
leave_open: If True, doesn't close socket on close
|
|
119
|
-
"""
|
|
120
|
-
self._socket: Any = socket
|
|
121
|
-
self._leave_open = leave_open
|
|
122
|
-
self._closed = False
|
|
123
|
-
|
|
124
|
-
@classmethod
|
|
125
|
-
def create_subscriber(cls, url: str, topic: bytes = b"") -> "NngFrameSource":
|
|
126
|
-
"""
|
|
127
|
-
Create an NNG Subscriber frame source connected to the specified URL.
|
|
128
|
-
|
|
129
|
-
Args:
|
|
130
|
-
url: NNG URL (e.g., "tcp://127.0.0.1:5555", "ipc:///tmp/mysocket")
|
|
131
|
-
topic: Optional topic filter (empty for all messages)
|
|
132
|
-
|
|
133
|
-
Returns:
|
|
134
|
-
Frame source ready to receive messages
|
|
135
|
-
"""
|
|
136
|
-
socket = pynng.Sub0()
|
|
137
|
-
socket.subscribe(topic)
|
|
138
|
-
socket.dial(url)
|
|
139
|
-
return cls(socket, leave_open=False)
|
|
140
|
-
|
|
141
|
-
@classmethod
|
|
142
|
-
def create_puller(cls, url: str, bind_mode: bool = True) -> "NngFrameSource":
|
|
143
|
-
"""
|
|
144
|
-
Create an NNG Puller frame source.
|
|
145
|
-
|
|
146
|
-
Args:
|
|
147
|
-
url: NNG URL (e.g., "tcp://127.0.0.1:5555", "ipc:///tmp/mysocket")
|
|
148
|
-
bind_mode: If True, listens (bind); if False, dials (connect)
|
|
149
|
-
|
|
150
|
-
Returns:
|
|
151
|
-
Frame source ready to pull messages
|
|
152
|
-
"""
|
|
153
|
-
socket = pynng.Pull0()
|
|
154
|
-
if bind_mode:
|
|
155
|
-
socket.listen(url)
|
|
156
|
-
else:
|
|
157
|
-
socket.dial(url)
|
|
158
|
-
return cls(socket, leave_open=False)
|
|
159
|
-
|
|
160
|
-
@property
|
|
161
|
-
def has_more_frames(self) -> bool:
|
|
162
|
-
"""Check if more frames available (NNG blocks waiting for messages)."""
|
|
163
|
-
return not self._closed
|
|
164
|
-
|
|
165
|
-
def read_frame(self) -> Optional[bytes]:
|
|
166
|
-
"""Read frame from NNG socket (blocking)."""
|
|
167
|
-
if self._closed:
|
|
168
|
-
return None
|
|
169
|
-
|
|
170
|
-
try:
|
|
171
|
-
return cast("bytes", self._socket.recv())
|
|
172
|
-
except pynng.Closed:
|
|
173
|
-
self._closed = True
|
|
174
|
-
return None
|
|
175
|
-
|
|
176
|
-
async def read_frame_async(self) -> Optional[bytes]:
|
|
177
|
-
"""Read frame asynchronously."""
|
|
178
|
-
if self._closed:
|
|
179
|
-
return None
|
|
180
|
-
|
|
181
|
-
try:
|
|
182
|
-
return cast("bytes", await self._socket.arecv())
|
|
183
|
-
except pynng.Closed:
|
|
184
|
-
self._closed = True
|
|
185
|
-
return None
|
|
186
|
-
|
|
187
|
-
def close(self) -> None:
|
|
188
|
-
"""Close the NNG source."""
|
|
189
|
-
if self._closed:
|
|
190
|
-
return
|
|
191
|
-
self._closed = True
|
|
192
|
-
if not self._leave_open:
|
|
193
|
-
self._socket.close()
|
|
194
|
-
|
|
195
|
-
async def close_async(self) -> None:
|
|
196
|
-
"""Close the NNG source asynchronously."""
|
|
197
|
-
self.close()
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
rocket_welder_sdk/__init__.py,sha256=xAy90cHORXwtphmNrvWaNs-YP4MAx3GIOZX_jJoIWxs,3530
|
|
2
|
-
rocket_welder_sdk/bytes_size.py,sha256=Myl29-wyWCIYdbMmgaxXebT8Dz8_Fwcr3fnfaNW81P0,7463
|
|
3
|
-
rocket_welder_sdk/connection_string.py,sha256=NIC6OiOXF-DeBFCWzgMFOWsenrSS45hY81j_HLMSpgo,9974
|
|
4
|
-
rocket_welder_sdk/controllers.py,sha256=uuVyKsNHtpaIzQt8pXCAu7SywoFa7cfww8VSa4LNi_E,33130
|
|
5
|
-
rocket_welder_sdk/frame_metadata.py,sha256=TMLIY47cIdIlxqk9xj7I3M8FZFmZ3GcVoLZht7prjQM,3929
|
|
6
|
-
rocket_welder_sdk/gst_metadata.py,sha256=6Ov-DekGsKNuAo3UIc-g9fh4_SAPdHYQTnnPqCK3Ks0,16180
|
|
7
|
-
rocket_welder_sdk/keypoints_protocol.py,sha256=NKiSPrevWG4_RrD6jtFxPjwftlaPWe1CqoFVKRMwp4k,21858
|
|
8
|
-
rocket_welder_sdk/opencv_controller.py,sha256=MDM6_yFBB9BaMa5jnZRqw7xZZB-WuLr7EPrrfHQ2DK4,9905
|
|
9
|
-
rocket_welder_sdk/periodic_timer.py,sha256=hnObybmrnf3J47QrNKJhYAytLKwria016123NvPRfQ0,9369
|
|
10
|
-
rocket_welder_sdk/py.typed,sha256=0cXFZXmes4Y-vnl4lO3HtyyyWaFNw85B7tJdFeCtHDc,67
|
|
11
|
-
rocket_welder_sdk/rocket_welder_client.py,sha256=dhjjak7F6xTlLZDVl7TPPiX0KpyWb0DQhrTP3GrkuPM,26655
|
|
12
|
-
rocket_welder_sdk/segmentation_result.py,sha256=c2C42C9l8iaRyTWR6ZOL1kLO4jHP_yjeVMf5DaKkY8E,17525
|
|
13
|
-
rocket_welder_sdk/session_id.py,sha256=sRhzQw90shqq_DJVtrsSggcGZ775kz7cRfbI-1LMeSA,7027
|
|
14
|
-
rocket_welder_sdk/external_controls/__init__.py,sha256=ldOLGhLLS5BQL8m4VKFYV0SvsNNlV2tghlc7rkqadU8,699
|
|
15
|
-
rocket_welder_sdk/external_controls/contracts.py,sha256=3DU6pdpteN50gF2fsS7C2279dGjDa0tZLrLntkBa2LM,2607
|
|
16
|
-
rocket_welder_sdk/external_controls/contracts_old.py,sha256=XWriuXJZu5caTSS0bcTIOZcKnj-IRCm96voA4gqLBfU,2980
|
|
17
|
-
rocket_welder_sdk/high_level/__init__.py,sha256=jzLaAhmay_k03gaPgv9fdfBjn6b1xbiQoqSC-9Vk1aQ,1378
|
|
18
|
-
rocket_welder_sdk/high_level/client.py,sha256=IFnbO9JI1KhnCljHiwFZbhx4qMW_z8BdTz4uAi0d7TA,8284
|
|
19
|
-
rocket_welder_sdk/high_level/connection_strings.py,sha256=q1uZJQ7mt1RR-E8MJzIwG6vz3Ddruoc3pTCdTvg_pe4,10434
|
|
20
|
-
rocket_welder_sdk/high_level/data_context.py,sha256=SXJvDpDBFi8Lm4XqSRSHK7YUUHuugXGo4ZRCb6_z5l0,4833
|
|
21
|
-
rocket_welder_sdk/high_level/frame_sink_factory.py,sha256=JeQXp7_OoAQzcAb6XOsBt_Ewen_KbvYQ82YLDyx71tQ,4000
|
|
22
|
-
rocket_welder_sdk/high_level/schema.py,sha256=2Vv0rDwahtGswWB_ceaCdc7JDtmbkx4wE2jQePzeTpU,5367
|
|
23
|
-
rocket_welder_sdk/high_level/transport_protocol.py,sha256=EFF0bgNn9hxRMj67FwU6MVu-UiEFINSGhd2VC8agrgc,7393
|
|
24
|
-
rocket_welder_sdk/transport/__init__.py,sha256=iU5keW_VYHybvGBkDX1AxcCp9IhYvbqPBegu-w9IPX8,787
|
|
25
|
-
rocket_welder_sdk/transport/frame_sink.py,sha256=YcsTcVGHSDWhhtt-PpWyjIZ9nImAHibgKoN_pcdr4VM,3334
|
|
26
|
-
rocket_welder_sdk/transport/frame_source.py,sha256=G1rBAQS1AgOOdtASB0_CYon8g20hUGXpP2exCp5hlhk,2169
|
|
27
|
-
rocket_welder_sdk/transport/nng_transport.py,sha256=o-qgcmHCGnwtdPe-mwwrC-a9H0rgS-VdH2QvU-6kFlI,5838
|
|
28
|
-
rocket_welder_sdk/transport/stream_transport.py,sha256=FhxFlZT-CTo6aPq6VclM1A_ecqfeHcwR4Ty1vmlt3W0,5886
|
|
29
|
-
rocket_welder_sdk/transport/tcp_transport.py,sha256=Tui6nKgu50C1KV_UDANQKgVK3M52XN7zrkZTcWIpGmY,4745
|
|
30
|
-
rocket_welder_sdk/transport/unix_socket_transport.py,sha256=t44Q2Fj6fMv53Ll561hN35-ZbHPdAQt0t9tUAXoL0rY,12245
|
|
31
|
-
rocket_welder_sdk/ui/__init__.py,sha256=5-fCkv3vG0VVVZkselrifkMmx8d51EJp3nNT9mt4JK4,886
|
|
32
|
-
rocket_welder_sdk/ui/controls.py,sha256=cRBxdUDWMOYlCxtw1PV11fTlte6qLxSfCGpr9bQiLcE,11162
|
|
33
|
-
rocket_welder_sdk/ui/icons.py,sha256=DcDklZkPmiEzlOD4IR7VTJOtGPCuuh_OM_WN7ScghWE,8934592
|
|
34
|
-
rocket_welder_sdk/ui/ui_events_projection.py,sha256=siiNhjLEBOPfTKw1ZhOPGkwIN5rLDH7V9VCZTNrhEtQ,7836
|
|
35
|
-
rocket_welder_sdk/ui/ui_service.py,sha256=uRdpyJGoCQmtOli_HKSrxLwhZYG-XRuHIYdkmFz1zNk,12026
|
|
36
|
-
rocket_welder_sdk/ui/value_types.py,sha256=f7OA_9zgXEDPoITc8v8SfAR23I4XeFhE3E2_GcAbR6k,1616
|
|
37
|
-
rocket_welder_sdk-1.1.43.dist-info/METADATA,sha256=eWh9UMK1a6dno4khPZ5JxoHG-X0Vo4ouvgrcOq5ZIog,24847
|
|
38
|
-
rocket_welder_sdk-1.1.43.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
39
|
-
rocket_welder_sdk-1.1.43.dist-info/top_level.txt,sha256=2iZvBjnwVCUW-uDE23-eJld5PZ9-mlPI69QiXM5IrTA,18
|
|
40
|
-
rocket_welder_sdk-1.1.43.dist-info/RECORD,,
|
|
File without changes
|