motorcortex-python 1.0.0rc2__py3-none-any.whl → 1.0.2__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.
- motorcortex/__init__.py +58 -20
- motorcortex/_request_builders.py +1 -1
- motorcortex/_request_utils.py +2 -2
- motorcortex/message_types.py +45 -38
- motorcortex/motorcortex_pb2.py +8 -8
- motorcortex/motorcortex_pb2.pyi +39 -3
- motorcortex/request.py +1 -1
- motorcortex/session.py +1 -1
- motorcortex/subscribe.py +2 -2
- motorcortex/subscription.py +2 -2
- motorcortex/version.py +1 -1
- {motorcortex_python-1.0.0rc2.dist-info → motorcortex_python-1.0.2.dist-info}/METADATA +1 -1
- motorcortex_python-1.0.2.dist-info/RECORD +28 -0
- {motorcortex_python-1.0.0rc2.dist-info → motorcortex_python-1.0.2.dist-info}/WHEEL +1 -1
- motorcortex_python-1.0.0rc2.dist-info/RECORD +0 -28
- {motorcortex_python-1.0.0rc2.dist-info → motorcortex_python-1.0.2.dist-info}/LICENSE +0 -0
- {motorcortex_python-1.0.0rc2.dist-info → motorcortex_python-1.0.2.dist-info}/top_level.txt +0 -0
motorcortex/__init__.py
CHANGED
|
@@ -181,6 +181,56 @@ def makeUrl(address: str, port: int | None) -> str:
|
|
|
181
181
|
return address
|
|
182
182
|
|
|
183
183
|
|
|
184
|
+
def _reconnect_state_update(
|
|
185
|
+
req: Any, sub: Any, state: "ConnectionState", *,
|
|
186
|
+
motorcortex_types: "MessageTypes",
|
|
187
|
+
login: Any,
|
|
188
|
+
password: Any,
|
|
189
|
+
token_interval_sec: float,
|
|
190
|
+
initial_connect_done: list,
|
|
191
|
+
) -> None:
|
|
192
|
+
"""Default ``state_update`` body for :func:`connect` in reconnect mode.
|
|
193
|
+
|
|
194
|
+
Fires on every state transition from the ``StateCallbackHandler``
|
|
195
|
+
worker thread. Only acts on the ``CONNECTION_OK`` edge *after* the
|
|
196
|
+
initial connect has completed — i.e. on a successful **reconnect**:
|
|
197
|
+
|
|
198
|
+
1. Try to restore the previous session via ``restoreSession(token)``.
|
|
199
|
+
Silent 5-second timeout + generic exception swallow — on any
|
|
200
|
+
failure we fall through to step 2 so a torn-down session never
|
|
201
|
+
leaves the reconnect half-authenticated.
|
|
202
|
+
2. Otherwise re-login with the originally supplied credentials.
|
|
203
|
+
3. Kick the token-refresh timer and resubscribe all existing groups
|
|
204
|
+
on the Subscribe side.
|
|
205
|
+
|
|
206
|
+
Extracted from a closure inside :func:`connect` so it can be
|
|
207
|
+
unit-tested without spinning up a real server. ``initial_connect_done``
|
|
208
|
+
is passed as a 1-element list so the caller (``connect``) can flip
|
|
209
|
+
the flag after the first successful connect without rebinding.
|
|
210
|
+
"""
|
|
211
|
+
if state != ConnectionState.CONNECTION_OK or not initial_connect_done[0]:
|
|
212
|
+
return
|
|
213
|
+
|
|
214
|
+
restored = False
|
|
215
|
+
if req.token:
|
|
216
|
+
try:
|
|
217
|
+
restore_reply = req.restoreSession(req.token)
|
|
218
|
+
restore_msg = restore_reply.get(timeout_ms=5000)
|
|
219
|
+
motorcortex_msg = motorcortex_types.motorcortex()
|
|
220
|
+
if restore_msg and restore_msg.status == motorcortex_msg.OK:
|
|
221
|
+
restored = True
|
|
222
|
+
logger.debug("[SESSION] Session restored using token")
|
|
223
|
+
except Exception as e:
|
|
224
|
+
logger.debug(f"[SESSION] Token restore failed: {e}")
|
|
225
|
+
|
|
226
|
+
if not restored:
|
|
227
|
+
logger.debug("[SESSION] Falling back to login")
|
|
228
|
+
req.login(login, password).get()
|
|
229
|
+
|
|
230
|
+
req._startTokenRefresh(token_interval_sec)
|
|
231
|
+
sub.resubscribe()
|
|
232
|
+
|
|
233
|
+
|
|
184
234
|
def connect(
|
|
185
235
|
url: str,
|
|
186
236
|
motorcortex_types: "MessageTypes",
|
|
@@ -233,26 +283,14 @@ def connect(
|
|
|
233
283
|
if reconnect and not kwargs.get("state_update"):
|
|
234
284
|
|
|
235
285
|
def stateUpdate(req, sub, state):
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
if restore_msg and restore_msg.status == motorcortex_msg.OK:
|
|
245
|
-
restored = True
|
|
246
|
-
logger.debug("[SESSION] Session restored using token")
|
|
247
|
-
except Exception as e:
|
|
248
|
-
logger.debug(f"[SESSION] Token restore failed: {e}")
|
|
249
|
-
|
|
250
|
-
if not restored:
|
|
251
|
-
logger.debug("[SESSION] Falling back to login")
|
|
252
|
-
req.login(kwargs.get("login"), kwargs.get("password")).get()
|
|
253
|
-
|
|
254
|
-
req._startTokenRefresh(token_interval_sec)
|
|
255
|
-
sub.resubscribe()
|
|
286
|
+
_reconnect_state_update(
|
|
287
|
+
req, sub, state,
|
|
288
|
+
motorcortex_types=motorcortex_types,
|
|
289
|
+
login=kwargs.get("login"),
|
|
290
|
+
password=kwargs.get("password"),
|
|
291
|
+
token_interval_sec=token_interval_sec,
|
|
292
|
+
initial_connect_done=initial_connect_done,
|
|
293
|
+
)
|
|
256
294
|
|
|
257
295
|
kwargs.update(state_update=stateUpdate)
|
|
258
296
|
|
motorcortex/_request_builders.py
CHANGED
|
@@ -21,7 +21,7 @@ from typing import Any, Optional, TYPE_CHECKING
|
|
|
21
21
|
|
|
22
22
|
from motorcortex.setup_logger import logger
|
|
23
23
|
|
|
24
|
-
if TYPE_CHECKING:
|
|
24
|
+
if TYPE_CHECKING: # pragma: no cover
|
|
25
25
|
from motorcortex.message_types import MessageTypes
|
|
26
26
|
from motorcortex.parameter_tree import ParameterTree
|
|
27
27
|
|
motorcortex/_request_utils.py
CHANGED
|
@@ -242,7 +242,7 @@ def _purge_stale_cache_files(path: str) -> None:
|
|
|
242
242
|
try:
|
|
243
243
|
os.unlink(match)
|
|
244
244
|
logger.debug("[REQUEST] Evicted stale cache file: %s", entry)
|
|
245
|
-
except OSError:
|
|
245
|
+
except OSError: # pragma: no cover
|
|
246
246
|
pass
|
|
247
247
|
|
|
248
248
|
|
|
@@ -276,7 +276,7 @@ def save_parameter_tree_file(path: str, parameter_tree: Any) -> Any:
|
|
|
276
276
|
with os.fdopen(fd, "w") as outfile:
|
|
277
277
|
outfile.write(json.dumps(envelope))
|
|
278
278
|
os.replace(tmp_path, path)
|
|
279
|
-
except Exception:
|
|
279
|
+
except Exception: # pragma: no cover
|
|
280
280
|
# Clean up the temp file if the rename never ran.
|
|
281
281
|
if os.path.exists(tmp_path):
|
|
282
282
|
try:
|
motorcortex/message_types.py
CHANGED
|
@@ -5,38 +5,23 @@
|
|
|
5
5
|
# All rights reserved. Copyright (c) 2016 VECTIONEER.
|
|
6
6
|
#
|
|
7
7
|
|
|
8
|
-
from __future__ import unicode_literals
|
|
9
8
|
import motorcortex.motorcortex_pb2
|
|
10
9
|
import logging
|
|
11
|
-
import sys
|
|
12
10
|
import os
|
|
11
|
+
from importlib.machinery import SourceFileLoader
|
|
12
|
+
from types import ModuleType
|
|
13
13
|
|
|
14
|
-
if sys.version_info[0] >= 3:
|
|
15
|
-
from importlib.machinery import SourceFileLoader
|
|
16
14
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
def importLibrary(name, path):
|
|
16
|
+
loader = SourceFileLoader(name, path)
|
|
17
|
+
mod = ModuleType(loader.name)
|
|
18
|
+
loader.exec_module(mod)
|
|
19
|
+
return mod
|
|
22
20
|
|
|
23
21
|
|
|
24
|
-
def importLibrary(name, path):
|
|
25
|
-
loader = SourceFileLoader(name, path)
|
|
26
|
-
mod = ModuleType(loader.name)
|
|
27
|
-
loader.exec_module(mod)
|
|
28
|
-
return mod
|
|
29
|
-
else:
|
|
30
|
-
from builtins import bytes
|
|
31
|
-
from imp import load_source
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def importLibrary(name, path):
|
|
35
|
-
return load_source(name, path)
|
|
36
|
-
|
|
37
22
|
from json import load
|
|
38
23
|
from inspect import ismodule
|
|
39
|
-
from typing import Dict
|
|
24
|
+
from typing import Any, Dict
|
|
40
25
|
|
|
41
26
|
from collections import namedtuple
|
|
42
27
|
import struct
|
|
@@ -270,7 +255,7 @@ class MessageTypes(object):
|
|
|
270
255
|
self._hashes_by_name[name] = hash
|
|
271
256
|
self._types_by_hash[hash] = PrimitiveTypes(name)
|
|
272
257
|
logging.debug(f"Loaded types from {name}")
|
|
273
|
-
except Exception:
|
|
258
|
+
except Exception: # pragma: no cover
|
|
274
259
|
# Best-effort — not every namespace declares the enum we're
|
|
275
260
|
# probing for. Swallowed by design, but scoped to Exception
|
|
276
261
|
# so KeyboardInterrupt / SystemExit still propagate.
|
|
@@ -282,7 +267,7 @@ class MessageTypes(object):
|
|
|
282
267
|
for key in enum.DESCRIPTOR.values:
|
|
283
268
|
setattr(module, key.name, key.number)
|
|
284
269
|
logging.debug(f"Loaded enumerator {enum_name}")
|
|
285
|
-
except Exception:
|
|
270
|
+
except Exception: # pragma: no cover
|
|
286
271
|
# Same best-effort pattern as _loadPrimitives.
|
|
287
272
|
pass
|
|
288
273
|
|
|
@@ -348,6 +333,27 @@ class MessageTypes(object):
|
|
|
348
333
|
|
|
349
334
|
return None
|
|
350
335
|
|
|
336
|
+
def _safe_decode_value(self, info: Any, value_bytes: bytes) -> Any:
|
|
337
|
+
"""Decode a parameter's value bytes, returning None on failure.
|
|
338
|
+
|
|
339
|
+
Failure modes we tolerate:
|
|
340
|
+
- Empty value bytes (server didn't provide value; e.g. some error paths).
|
|
341
|
+
- Unknown data_type hash (param info malformed or a type the SDK
|
|
342
|
+
doesn't have a decoder for).
|
|
343
|
+
- Decoder raises (corrupt bytes, length mismatch, etc.).
|
|
344
|
+
|
|
345
|
+
The caller checks status to decide whether to trust the returned value.
|
|
346
|
+
"""
|
|
347
|
+
if not value_bytes:
|
|
348
|
+
return None
|
|
349
|
+
value_type = self._types_by_hash.get(info.data_type)
|
|
350
|
+
if value_type is None:
|
|
351
|
+
return None
|
|
352
|
+
try:
|
|
353
|
+
return value_type.decode(value_bytes, info.number_of_elements)
|
|
354
|
+
except Exception:
|
|
355
|
+
return None
|
|
356
|
+
|
|
351
357
|
def decode(self, wire_data):
|
|
352
358
|
"""Decodes data received from the server"""
|
|
353
359
|
|
|
@@ -358,22 +364,23 @@ class MessageTypes(object):
|
|
|
358
364
|
msg.ParseFromString(buf)
|
|
359
365
|
|
|
360
366
|
if type_inst.decode_value == motorcortex_parameter_msg:
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
+
# Always attempt to decode the value bytes. On non-OK status (e.g.
|
|
368
|
+
# TIMEOUT_WAITING_FOR_UPDATE) the server still provides the stale
|
|
369
|
+
# buffer contents for forensic use; preserve them and let the caller
|
|
370
|
+
# decide whether to use the value based on status + timestamp age.
|
|
371
|
+
return ParameterMsg(msg.header, msg.info,
|
|
372
|
+
self._safe_decode_value(msg.info, msg.value),
|
|
373
|
+
msg.status)
|
|
367
374
|
elif type_inst.decode_value == motorcortex_parameter_list_msg:
|
|
368
375
|
params = []
|
|
369
376
|
for param in msg.params:
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
+
# Use the per-element status, not the outer ParameterListMsg status —
|
|
378
|
+
# individual elements can have their own status (e.g. one element
|
|
379
|
+
# times out while others succeed) and that distinction is the whole
|
|
380
|
+
# point of the typed status code.
|
|
381
|
+
params.append(ParameterMsg(param.header, param.info,
|
|
382
|
+
self._safe_decode_value(param.info, param.value),
|
|
383
|
+
param.status))
|
|
377
384
|
return ParameterListMsg(msg.header, params)
|
|
378
385
|
|
|
379
386
|
return msg
|
motorcortex/motorcortex_pb2.py
CHANGED
|
@@ -13,7 +13,7 @@ _sym_db = _symbol_database.Default()
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11motorcortex.proto\x12\x0bmotorcortex\"i\n\x0fParameterOffset\x12\x36\n\x04type\x18\x01 \x02(\x0e\x32\x17.motorcortex.OffsetType:\x0fOFFSET_ELEMENTS\x12\x0e\n\x06offset\x18\x02 \x02(\r\x12\x0e\n\x06length\x18\x03 \x02(\r\"f\n\x05\x45rror\x12\x11\n\ttimestamp\x18\x01 \x02(\x06\x12\x14\n\x0c\x65rror_number\x18\x02 \x02(\x07\x12\x13\n\x0b\x65rror_level\x18\x03 \x02(\x07\x12\x11\n\tsubsystem\x18\x04 \x02(\x07\x12\x0c\n\x04info\x18\x05 \x02(\x07\"a\n\tErrorList\x12\"\n\x06\x65rrors\x18\x01 \x03(\x0b\x32\x12.motorcortex.Error\x12\x18\n\x10number_of_errors\x18\x02 \x02(\x07\x12\x16\n\x0eupdate_counter\x18\x03 \x02(\x07\"\x8a\x02\n\rParameterInfo\x12\n\n\x02id\x18\x01 \x02(\r\x12\x11\n\tdata_type\x18\x02 \x02(\r\x12\x11\n\tdata_size\x18\x03 \x02(\r\x12\x1a\n\x12number_of_elements\x18\x04 \x02(\r\x12\r\n\x05\x66lags\x18\x05 \x02(\r\x12\x13\n\x0bpermissions\x18\x06 \x02(\r\x12.\n\nparam_type\x18\x07 \x02(\x0e\x32\x1a.motorcortex.ParameterType\x12(\n\x08group_id\x18\x08 \x02(\x0e\x32\x16.motorcortex.UserGroup\x12\x1f\n\x04unit\x18\t \x02(\x0e\x32\x11.motorcortex.Unit\x12\x0c\n\x04path\x18\n \x02(\t\"\x94\x01\n\x12GroupParameterInfo\x12\r\n\x05index\x18\x01 \x02(\r\x12\x0e\n\x06offset\x18\x02 \x02(\r\x12\x0c\n\x04size\x18\x03 \x02(\r\x12(\n\x04info\x18\x04 \x02(\x0b\x32\x1a.motorcortex.ParameterInfo\x12\'\n\x06status\x18\x05 \x02(\x0e\x32\x17.motorcortex.StatusCode\"1\n\x06Header\x12\x14\n\x0c\x66rameCounter\x18\x01 \x02(\x07\x12\x11\n\ttimestamp\x18\x02 \x02(\x06\"Z\n\x08GroupMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12)\n\x06params\x18\x02 \x03(\x0b\x32\x19.motorcortex.ParameterMsg\"Y\n\tStatusMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\'\n\x06status\x18\x02 \x02(\x0e\x32\x17.motorcortex.StatusCode\"P\n\x08LoginMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\r\n\x05login\x18\x02 \x02(\t\x12\x10\n\x08password\x18\x03 \x02(\t\"9\n\x12GetSessionTokenMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\"n\n\x0fSessionTokenMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\r\n\x05token\x18\x02 \x02(\t\x12\'\n\x06status\x18\x03 \x02(\x0e\x32\x17.motorcortex.StatusCode\"G\n\x11RestoreSessionMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\r\n\x05token\x18\x02 \x02(\t\"0\n\tLogoutMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\":\n\x13GetParameterTreeMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\"\x9a\x01\n\x10ParameterTreeMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12*\n\x06params\x18\x02 \x03(\x0b\x32\x1a.motorcortex.ParameterInfo\x12\x0c\n\x04hash\x18\x03 \x02(\r\x12\'\n\x06status\x18\x04 \x02(\x0e\x32\x17.motorcortex.StatusCode\">\n\x17GetParameterTreeHashMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\"r\n\x14ParameterTreeHashMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\x0c\n\x04hash\x18\x02 \x02(\r\x12\'\n\x06status\x18\x03 \x02(\x0e\x32\x17.motorcortex.StatusCode\"h\n\x0e\x43reateGroupMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\x13\n\x0b\x66rq_divider\x18\x02 \x02(\r\x12\r\n\x05\x61lias\x18\x03 \x02(\t\x12\r\n\x05paths\x18\x04 \x03(\t\"\xaa\x01\n\x0eGroupStatusMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\n\n\x02id\x18\x02 \x02(\r\x12\r\n\x05\x61lias\x18\x03 \x02(\t\x12/\n\x06params\x18\x04 \x03(\x0b\x32\x1f.motorcortex.GroupParameterInfo\x12\'\n\x06status\x18\x05 \x02(\x0e\x32\x17.motorcortex.StatusCode\"D\n\x0eRemoveGroupMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\r\n\x05\x61lias\x18\x02 \x02(\t\"D\n\x0fGetParameterMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\x0c\n\x04path\x18\x02 \x02(\t\"\x95\x01\n\x0cParameterMsg\x12\r\n\x05value\x18\x01 \x02(\x0c\x12#\n\x06header\x18\x02 \x01(\x0b\x32\x13.motorcortex.Header\x12(\n\x04info\x18\x03 \x01(\x0b\x32\x1a.motorcortex.ParameterInfo\x12\'\n\x06status\x18\x04 \x02(\x0e\x32\x17.motorcortex.StatusCode\"h\n\x13GetParameterListMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12,\n\x06params\x18\x02 \x03(\x0b\x32\x1c.motorcortex.GetParameterMsg\"\x8b\x01\n\x10ParameterListMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12)\n\x06params\x18\x02 \x03(\x0b\x32\x19.motorcortex.ParameterMsg\x12\'\n\x06status\x18\x03 \x02(\x0e\x32\x17.motorcortex.StatusCode\"\x81\x01\n\x0fSetParameterMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12,\n\x06offset\x18\x02 \x01(\x0b\x32\x1c.motorcortex.ParameterOffset\x12\x0c\n\x04path\x18\x03 \x02(\t\x12\r\n\x05value\x18\x04 \x02(\x0c\"h\n\x13SetParameterListMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12,\n\x06params\x18\x02 \x03(\x0b\x32\x1c.motorcortex.SetParameterMsg\"\x99\x01\n\x15OverwriteParameterMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12,\n\x06offset\x18\x02 \x01(\x0b\x32\x1c.motorcortex.ParameterOffset\x12\x10\n\x08\x61\x63tivate\x18\x03 \x02(\x08\x12\x0c\n\x04path\x18\x04 \x02(\t\x12\r\n\x05value\x18\x05 \x02(\x0c\"H\n\x13ReleaseParameterMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\x0c\n\x04path\x18\x02 \x02(\t\"O\n\x07SaveMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\x0c\n\x04path\x18\x02 \x02(\t\x12\x11\n\tfile_name\x18\x03 \x02(\t\"O\n\x07LoadMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\x0c\n\x04path\x18\x02 \x02(\t\x12\x11\n\tfile_name\x18\x03 \x02(\t\"C\n\rConsoleCmdMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\r\n\x05value\x18\x02 \x02(\t\"b\n\x11\x43onsoleCmdListMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12(\n\x04\x63mds\x18\x02 \x03(\x0b\x32\x1a.motorcortex.ConsoleCmdMsg*\xab\x02\n\x04Unit\x12\x12\n\x0eunit_undefined\x10\x00\x12\n\n\x06Length\x10\x0f\x12\x06\n\x02mm\x10\x01\x12\x05\n\x01m\x10\x02\x12\n\n\x05\x41ngle\x10\xf1\x01\x12\x07\n\x03rad\x10\x31\x12\x07\n\x03\x64\x65g\x10\x41\x12\t\n\x04Time\x10\xf2\x01\x12\x0b\n\x07nanosec\x10\x12\x12\x0c\n\x08microsec\x10\"\x12\x0c\n\x08millisec\x10\x32\x12\x07\n\x03sec\x10\x42\x12\x0b\n\x06Weight\x10\xf3\x01\x12\x08\n\x04gram\x10\x13\x12\x06\n\x02kg\x10#\x12\r\n\x08Velocity\x10\xf4\x01\x12\t\n\x05m_sec\x10\x14\x12\x0b\n\x07rad_sec\x10$\x12\x11\n\x0c\x41\x63\x63\x65leration\x10\xf5\x01\x12\n\n\x06m_sec2\x10\x15\x12\x0c\n\x08rad_sec2\x10%\x12\n\n\x05\x46orce\x10\xf6\x01\x12\x05\n\x01N\x10\x16\x12\x06\n\x02Nm\x10&\x12\x0b\n\x07percent\x10\x17*_\n\tUserGroup\x12\x18\n\x14user_group_undefined\x10\x00\x12\n\n\x06SYSTEM\x10\x01\x12\x11\n\rADMINISTRATOR\x10\x03\x12\x0c\n\x08OPERATOR\x10\x07\x12\x0b\n\x07MONITOR\x10\x0f*\xc4\x01\n\nPermission\x12\x18\n\x14permission_undefined\x10\x00\x12\x0e\n\tUSER_READ\x10\x80\x02\x12\x0f\n\nUSER_WRITE\x10\x80\x01\x12\x10\n\x0cUSER_EXECUTE\x10@\x12\x0e\n\nGROUP_READ\x10 \x12\x0f\n\x0bGROUP_WRITE\x10\x10\x12\x11\n\rGROUP_EXECUTE\x10\x08\x12\x0f\n\x0bOTHERS_READ\x10\x04\x12\x10\n\x0cOTHERS_WRITE\x10\x02\x12\x12\n\x0eOTHERS_EXECUTE\x10\x01*\xd4\x01\n\x08\x44\x61taType\x12\x17\n\x13\x64\x61ta_type_undefined\x10\x00\x12\x08\n\x04INT8\x10\x01\x12\t\n\x05UINT8\x10\x02\x12\t\n\x05INT16\x10\x03\x12\n\n\x06UINT16\x10\x04\x12\t\n\x05INT32\x10\x05\x12\n\n\x06UINT32\x10\x06\x12\t\n\x05INT64\x10\x07\x12\n\n\x06UINT64\x10\x08\x12\x08\n\x04\x42OOL\x10\t\x12\n\n\x05\x46LOAT\x10\x81\x02\x12\x0b\n\x06\x44OUBLE\x10\x82\x02\x12\t\n\x04\x43HAR\x10\x81\x04\x12\x0b\n\x06STRING\x10\x82\x04\x12\n\n\x05\x42YTES\x10\x99\t\x12\x0e\n\tUSER_TYPE\x10\x80\n*\x84\x01\n\rParameterType\x12\x18\n\x14param_type_undefined\x10\x00\x12\t\n\x05INPUT\x10\x01\x12\n\n\x06OUTPUT\x10\x10\x12\x0e\n\tPARAMETER\x10\x80\x02\x12\x17\n\x12PARAMETER_VOLATILE\x10\x81\x02\x12\x19\n\x14PARAMETER_PERSISTENT\x10\x82\x02*\
|
|
16
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11motorcortex.proto\x12\x0bmotorcortex\"i\n\x0fParameterOffset\x12\x36\n\x04type\x18\x01 \x02(\x0e\x32\x17.motorcortex.OffsetType:\x0fOFFSET_ELEMENTS\x12\x0e\n\x06offset\x18\x02 \x02(\r\x12\x0e\n\x06length\x18\x03 \x02(\r\"f\n\x05\x45rror\x12\x11\n\ttimestamp\x18\x01 \x02(\x06\x12\x14\n\x0c\x65rror_number\x18\x02 \x02(\x07\x12\x13\n\x0b\x65rror_level\x18\x03 \x02(\x07\x12\x11\n\tsubsystem\x18\x04 \x02(\x07\x12\x0c\n\x04info\x18\x05 \x02(\x07\"a\n\tErrorList\x12\"\n\x06\x65rrors\x18\x01 \x03(\x0b\x32\x12.motorcortex.Error\x12\x18\n\x10number_of_errors\x18\x02 \x02(\x07\x12\x16\n\x0eupdate_counter\x18\x03 \x02(\x07\"\x8a\x02\n\rParameterInfo\x12\n\n\x02id\x18\x01 \x02(\r\x12\x11\n\tdata_type\x18\x02 \x02(\r\x12\x11\n\tdata_size\x18\x03 \x02(\r\x12\x1a\n\x12number_of_elements\x18\x04 \x02(\r\x12\r\n\x05\x66lags\x18\x05 \x02(\r\x12\x13\n\x0bpermissions\x18\x06 \x02(\r\x12.\n\nparam_type\x18\x07 \x02(\x0e\x32\x1a.motorcortex.ParameterType\x12(\n\x08group_id\x18\x08 \x02(\x0e\x32\x16.motorcortex.UserGroup\x12\x1f\n\x04unit\x18\t \x02(\x0e\x32\x11.motorcortex.Unit\x12\x0c\n\x04path\x18\n \x02(\t\"\x94\x01\n\x12GroupParameterInfo\x12\r\n\x05index\x18\x01 \x02(\r\x12\x0e\n\x06offset\x18\x02 \x02(\r\x12\x0c\n\x04size\x18\x03 \x02(\r\x12(\n\x04info\x18\x04 \x02(\x0b\x32\x1a.motorcortex.ParameterInfo\x12\'\n\x06status\x18\x05 \x02(\x0e\x32\x17.motorcortex.StatusCode\"1\n\x06Header\x12\x14\n\x0c\x66rameCounter\x18\x01 \x02(\x07\x12\x11\n\ttimestamp\x18\x02 \x02(\x06\"Z\n\x08GroupMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12)\n\x06params\x18\x02 \x03(\x0b\x32\x19.motorcortex.ParameterMsg\"Y\n\tStatusMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\'\n\x06status\x18\x02 \x02(\x0e\x32\x17.motorcortex.StatusCode\"P\n\x08LoginMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\r\n\x05login\x18\x02 \x02(\t\x12\x10\n\x08password\x18\x03 \x02(\t\"9\n\x12GetSessionTokenMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\"n\n\x0fSessionTokenMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\r\n\x05token\x18\x02 \x02(\t\x12\'\n\x06status\x18\x03 \x02(\x0e\x32\x17.motorcortex.StatusCode\"G\n\x11RestoreSessionMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\r\n\x05token\x18\x02 \x02(\t\"0\n\tLogoutMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\":\n\x13GetParameterTreeMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\"\x9a\x01\n\x10ParameterTreeMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12*\n\x06params\x18\x02 \x03(\x0b\x32\x1a.motorcortex.ParameterInfo\x12\x0c\n\x04hash\x18\x03 \x02(\r\x12\'\n\x06status\x18\x04 \x02(\x0e\x32\x17.motorcortex.StatusCode\">\n\x17GetParameterTreeHashMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\"r\n\x14ParameterTreeHashMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\x0c\n\x04hash\x18\x02 \x02(\r\x12\'\n\x06status\x18\x03 \x02(\x0e\x32\x17.motorcortex.StatusCode\"h\n\x0e\x43reateGroupMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\x13\n\x0b\x66rq_divider\x18\x02 \x02(\r\x12\r\n\x05\x61lias\x18\x03 \x02(\t\x12\r\n\x05paths\x18\x04 \x03(\t\"\xaa\x01\n\x0eGroupStatusMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\n\n\x02id\x18\x02 \x02(\r\x12\r\n\x05\x61lias\x18\x03 \x02(\t\x12/\n\x06params\x18\x04 \x03(\x0b\x32\x1f.motorcortex.GroupParameterInfo\x12\'\n\x06status\x18\x05 \x02(\x0e\x32\x17.motorcortex.StatusCode\"D\n\x0eRemoveGroupMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\r\n\x05\x61lias\x18\x02 \x02(\t\"D\n\x0fGetParameterMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\x0c\n\x04path\x18\x02 \x02(\t\"\x95\x01\n\x0cParameterMsg\x12\r\n\x05value\x18\x01 \x02(\x0c\x12#\n\x06header\x18\x02 \x01(\x0b\x32\x13.motorcortex.Header\x12(\n\x04info\x18\x03 \x01(\x0b\x32\x1a.motorcortex.ParameterInfo\x12\'\n\x06status\x18\x04 \x02(\x0e\x32\x17.motorcortex.StatusCode\"h\n\x13GetParameterListMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12,\n\x06params\x18\x02 \x03(\x0b\x32\x1c.motorcortex.GetParameterMsg\"\x8b\x01\n\x10ParameterListMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12)\n\x06params\x18\x02 \x03(\x0b\x32\x19.motorcortex.ParameterMsg\x12\'\n\x06status\x18\x03 \x02(\x0e\x32\x17.motorcortex.StatusCode\"\x81\x01\n\x0fSetParameterMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12,\n\x06offset\x18\x02 \x01(\x0b\x32\x1c.motorcortex.ParameterOffset\x12\x0c\n\x04path\x18\x03 \x02(\t\x12\r\n\x05value\x18\x04 \x02(\x0c\"h\n\x13SetParameterListMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12,\n\x06params\x18\x02 \x03(\x0b\x32\x1c.motorcortex.SetParameterMsg\"\x99\x01\n\x15OverwriteParameterMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12,\n\x06offset\x18\x02 \x01(\x0b\x32\x1c.motorcortex.ParameterOffset\x12\x10\n\x08\x61\x63tivate\x18\x03 \x02(\x08\x12\x0c\n\x04path\x18\x04 \x02(\t\x12\r\n\x05value\x18\x05 \x02(\x0c\"H\n\x13ReleaseParameterMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\x0c\n\x04path\x18\x02 \x02(\t\"O\n\x07SaveMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\x0c\n\x04path\x18\x02 \x02(\t\x12\x11\n\tfile_name\x18\x03 \x02(\t\"O\n\x07LoadMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\x0c\n\x04path\x18\x02 \x02(\t\x12\x11\n\tfile_name\x18\x03 \x02(\t\"C\n\rConsoleCmdMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12\r\n\x05value\x18\x02 \x02(\t\"b\n\x11\x43onsoleCmdListMsg\x12#\n\x06header\x18\x01 \x01(\x0b\x32\x13.motorcortex.Header\x12(\n\x04\x63mds\x18\x02 \x03(\x0b\x32\x1a.motorcortex.ConsoleCmdMsg*\xab\x02\n\x04Unit\x12\x12\n\x0eunit_undefined\x10\x00\x12\n\n\x06Length\x10\x0f\x12\x06\n\x02mm\x10\x01\x12\x05\n\x01m\x10\x02\x12\n\n\x05\x41ngle\x10\xf1\x01\x12\x07\n\x03rad\x10\x31\x12\x07\n\x03\x64\x65g\x10\x41\x12\t\n\x04Time\x10\xf2\x01\x12\x0b\n\x07nanosec\x10\x12\x12\x0c\n\x08microsec\x10\"\x12\x0c\n\x08millisec\x10\x32\x12\x07\n\x03sec\x10\x42\x12\x0b\n\x06Weight\x10\xf3\x01\x12\x08\n\x04gram\x10\x13\x12\x06\n\x02kg\x10#\x12\r\n\x08Velocity\x10\xf4\x01\x12\t\n\x05m_sec\x10\x14\x12\x0b\n\x07rad_sec\x10$\x12\x11\n\x0c\x41\x63\x63\x65leration\x10\xf5\x01\x12\n\n\x06m_sec2\x10\x15\x12\x0c\n\x08rad_sec2\x10%\x12\n\n\x05\x46orce\x10\xf6\x01\x12\x05\n\x01N\x10\x16\x12\x06\n\x02Nm\x10&\x12\x0b\n\x07percent\x10\x17*_\n\tUserGroup\x12\x18\n\x14user_group_undefined\x10\x00\x12\n\n\x06SYSTEM\x10\x01\x12\x11\n\rADMINISTRATOR\x10\x03\x12\x0c\n\x08OPERATOR\x10\x07\x12\x0b\n\x07MONITOR\x10\x0f*\xc4\x01\n\nPermission\x12\x18\n\x14permission_undefined\x10\x00\x12\x0e\n\tUSER_READ\x10\x80\x02\x12\x0f\n\nUSER_WRITE\x10\x80\x01\x12\x10\n\x0cUSER_EXECUTE\x10@\x12\x0e\n\nGROUP_READ\x10 \x12\x0f\n\x0bGROUP_WRITE\x10\x10\x12\x11\n\rGROUP_EXECUTE\x10\x08\x12\x0f\n\x0bOTHERS_READ\x10\x04\x12\x10\n\x0cOTHERS_WRITE\x10\x02\x12\x12\n\x0eOTHERS_EXECUTE\x10\x01*\xd4\x01\n\x08\x44\x61taType\x12\x17\n\x13\x64\x61ta_type_undefined\x10\x00\x12\x08\n\x04INT8\x10\x01\x12\t\n\x05UINT8\x10\x02\x12\t\n\x05INT16\x10\x03\x12\n\n\x06UINT16\x10\x04\x12\t\n\x05INT32\x10\x05\x12\n\n\x06UINT32\x10\x06\x12\t\n\x05INT64\x10\x07\x12\n\n\x06UINT64\x10\x08\x12\x08\n\x04\x42OOL\x10\t\x12\n\n\x05\x46LOAT\x10\x81\x02\x12\x0b\n\x06\x44OUBLE\x10\x82\x02\x12\t\n\x04\x43HAR\x10\x81\x04\x12\x0b\n\x06STRING\x10\x82\x04\x12\n\n\x05\x42YTES\x10\x99\t\x12\x0e\n\tUSER_TYPE\x10\x80\n*\x84\x01\n\rParameterType\x12\x18\n\x14param_type_undefined\x10\x00\x12\t\n\x05INPUT\x10\x01\x12\n\n\x06OUTPUT\x10\x10\x12\x0e\n\tPARAMETER\x10\x80\x02\x12\x17\n\x12PARAMETER_VOLATILE\x10\x81\x02\x12\x19\n\x14PARAMETER_PERSISTENT\x10\x82\x02*\xbb\x02\n\nStatusCode\x12\x06\n\x02OK\x10\x00\x12\x12\n\x0eREAD_ONLY_MODE\x10\x01\x12\x0c\n\x06\x46\x41ILED\x10\x80\xfe\x03\x12\x15\n\x10\x46\x41ILED_TO_DECODE\x10\x80 \x12\x15\n\x10SUB_LIST_IS_FULL\x10\x80\"\x12\x19\n\x14WRONG_PARAMETER_PATH\x10\x80$\x12 \n\x1b\x46\x41ILED_TO_SET_REQUESTED_FRQ\x10\x80&\x12\x18\n\x13\x46\x41ILED_TO_OPEN_FILE\x10\x80(\x12\x17\n\x12GROUP_LIST_IS_FULL\x10\x80*\x12\x1f\n\x1aTIMEOUT_WAITING_FOR_UPDATE\x10\x80,\x12\x13\n\x0eWRONG_PASSWORD\x10\x80\x42\x12\x17\n\x12USER_NOT_LOGGED_IN\x10\x80\x44\x12\x16\n\x11PERMISSION_DENIED\x10\x80\x46*v\n\nErrorLevel\x12\x19\n\x15\x65rror_level_undefined\x10\x00\x12\x08\n\x04INFO\x10\x01\x12\x0b\n\x07WARNING\x10\x02\x12\x14\n\x10\x46ORCED_DISENGAGE\x10\x03\x12\x0c\n\x08SHUTDOWN\x10\x04\x12\x12\n\x0e\x45MERGENCY_STOP\x10\x05*_\n\nOffsetType\x12\x19\n\x15offset_type_undefined\x10\x00\x12\x13\n\x0fOFFSET_ELEMENTS\x10\x01\x12\x10\n\x0cOFFSET_BYTES\x10\x02\x12\x0f\n\x0bOFFSET_BITS\x10\x03*<\n\rParameterFlag\x12\x12\n\x0eLINK_IS_ACTIVE\x10\x01\x12\x17\n\x13OVERWRITE_IS_ACTIVE\x10\x02')
|
|
17
17
|
|
|
18
18
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
|
19
19
|
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'motorcortex_pb2', globals())
|
|
@@ -31,13 +31,13 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
31
31
|
_PARAMETERTYPE._serialized_start=4203
|
|
32
32
|
_PARAMETERTYPE._serialized_end=4335
|
|
33
33
|
_STATUSCODE._serialized_start=4338
|
|
34
|
-
_STATUSCODE._serialized_end=
|
|
35
|
-
_ERRORLEVEL._serialized_start=
|
|
36
|
-
_ERRORLEVEL._serialized_end=
|
|
37
|
-
_OFFSETTYPE._serialized_start=
|
|
38
|
-
_OFFSETTYPE._serialized_end=
|
|
39
|
-
_PARAMETERFLAG._serialized_start=
|
|
40
|
-
_PARAMETERFLAG._serialized_end=
|
|
34
|
+
_STATUSCODE._serialized_end=4653
|
|
35
|
+
_ERRORLEVEL._serialized_start=4655
|
|
36
|
+
_ERRORLEVEL._serialized_end=4773
|
|
37
|
+
_OFFSETTYPE._serialized_start=4775
|
|
38
|
+
_OFFSETTYPE._serialized_end=4870
|
|
39
|
+
_PARAMETERFLAG._serialized_start=4872
|
|
40
|
+
_PARAMETERFLAG._serialized_end=4932
|
|
41
41
|
_PARAMETEROFFSET._serialized_start=34
|
|
42
42
|
_PARAMETEROFFSET._serialized_end=139
|
|
43
43
|
_ERROR._serialized_start=141
|
motorcortex/motorcortex_pb2.pyi
CHANGED
|
@@ -19,10 +19,10 @@ import builtins as _builtins
|
|
|
19
19
|
import sys
|
|
20
20
|
import typing as _typing
|
|
21
21
|
|
|
22
|
-
if sys.version_info >= (3,
|
|
23
|
-
from typing import TypeAlias as _TypeAlias
|
|
22
|
+
if sys.version_info >= (3, 11):
|
|
23
|
+
from typing import TypeAlias as _TypeAlias, Never as _Never
|
|
24
24
|
else:
|
|
25
|
-
from typing_extensions import TypeAlias as _TypeAlias
|
|
25
|
+
from typing_extensions import TypeAlias as _TypeAlias, Never as _Never
|
|
26
26
|
|
|
27
27
|
DESCRIPTOR: _descriptor.FileDescriptor
|
|
28
28
|
|
|
@@ -399,6 +399,8 @@ class _StatusCodeEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[_StatusCode
|
|
|
399
399
|
"""Failed to open/save/load a file."""
|
|
400
400
|
GROUP_LIST_IS_FULL: _StatusCode.ValueType # 5376
|
|
401
401
|
"""Failed to create new group, because the group list is full. Release at least one group."""
|
|
402
|
+
TIMEOUT_WAITING_FOR_UPDATE: _StatusCode.ValueType # 5632
|
|
403
|
+
"""GetParameter wait deadline expired before a fresh value was produced for the requested parameter."""
|
|
402
404
|
WRONG_PASSWORD: _StatusCode.ValueType # 8448
|
|
403
405
|
"""Login failed, wrong login or password."""
|
|
404
406
|
USER_NOT_LOGGED_IN: _StatusCode.ValueType # 8704
|
|
@@ -433,6 +435,8 @@ FAILED_TO_OPEN_FILE: StatusCode.ValueType # 5120
|
|
|
433
435
|
"""Failed to open/save/load a file."""
|
|
434
436
|
GROUP_LIST_IS_FULL: StatusCode.ValueType # 5376
|
|
435
437
|
"""Failed to create new group, because the group list is full. Release at least one group."""
|
|
438
|
+
TIMEOUT_WAITING_FOR_UPDATE: StatusCode.ValueType # 5632
|
|
439
|
+
"""GetParameter wait deadline expired before a fresh value was produced for the requested parameter."""
|
|
436
440
|
WRONG_PASSWORD: StatusCode.ValueType # 8448
|
|
437
441
|
"""Login failed, wrong login or password."""
|
|
438
442
|
USER_NOT_LOGGED_IN: StatusCode.ValueType # 8704
|
|
@@ -568,6 +572,7 @@ class ParameterOffset(_message.Message):
|
|
|
568
572
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
569
573
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["length", b"length", "offset", b"offset", "type", b"type"] # noqa: Y015
|
|
570
574
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
575
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
571
576
|
|
|
572
577
|
Global___ParameterOffset: _TypeAlias = ParameterOffset # noqa: Y015
|
|
573
578
|
|
|
@@ -610,6 +615,7 @@ class Error(_message.Message):
|
|
|
610
615
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
611
616
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["error_level", b"error_level", "error_number", b"error_number", "info", b"info", "subsystem", b"subsystem", "timestamp", b"timestamp"] # noqa: Y015
|
|
612
617
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
618
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
613
619
|
|
|
614
620
|
Global___Error: _TypeAlias = Error # noqa: Y015
|
|
615
621
|
|
|
@@ -647,6 +653,7 @@ class ErrorList(_message.Message):
|
|
|
647
653
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
648
654
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["errors", b"errors", "number_of_errors", b"number_of_errors", "update_counter", b"update_counter"] # noqa: Y015
|
|
649
655
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
656
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
650
657
|
|
|
651
658
|
Global___ErrorList: _TypeAlias = ErrorList # noqa: Y015
|
|
652
659
|
|
|
@@ -709,6 +716,7 @@ class ParameterInfo(_message.Message):
|
|
|
709
716
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
710
717
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["data_size", b"data_size", "data_type", b"data_type", "flags", b"flags", "group_id", b"group_id", "id", b"id", "number_of_elements", b"number_of_elements", "param_type", b"param_type", "path", b"path", "permissions", b"permissions", "unit", b"unit"] # noqa: Y015
|
|
711
718
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
719
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
712
720
|
|
|
713
721
|
Global___ParameterInfo: _TypeAlias = ParameterInfo # noqa: Y015
|
|
714
722
|
|
|
@@ -753,6 +761,7 @@ class GroupParameterInfo(_message.Message):
|
|
|
753
761
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
754
762
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["index", b"index", "info", b"info", "offset", b"offset", "size", b"size", "status", b"status"] # noqa: Y015
|
|
755
763
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
764
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
756
765
|
|
|
757
766
|
Global___GroupParameterInfo: _TypeAlias = GroupParameterInfo # noqa: Y015
|
|
758
767
|
|
|
@@ -781,6 +790,7 @@ class Header(_message.Message):
|
|
|
781
790
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
782
791
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["frameCounter", b"frameCounter", "timestamp", b"timestamp"] # noqa: Y015
|
|
783
792
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
793
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
784
794
|
|
|
785
795
|
Global___Header: _TypeAlias = Header # noqa: Y015
|
|
786
796
|
|
|
@@ -813,6 +823,7 @@ class GroupMsg(_message.Message):
|
|
|
813
823
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
814
824
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header", "params", b"params"] # noqa: Y015
|
|
815
825
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
826
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
816
827
|
|
|
817
828
|
Global___GroupMsg: _TypeAlias = GroupMsg # noqa: Y015
|
|
818
829
|
|
|
@@ -847,6 +858,7 @@ class StatusMsg(_message.Message):
|
|
|
847
858
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
848
859
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header", "status", b"status"] # noqa: Y015
|
|
849
860
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
861
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
850
862
|
|
|
851
863
|
Global___StatusMsg: _TypeAlias = StatusMsg # noqa: Y015
|
|
852
864
|
|
|
@@ -893,6 +905,7 @@ class LoginMsg(_message.Message):
|
|
|
893
905
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
894
906
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header", "login", b"login", "password", b"password"] # noqa: Y015
|
|
895
907
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
908
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
896
909
|
|
|
897
910
|
Global___LoginMsg: _TypeAlias = LoginMsg # noqa: Y015
|
|
898
911
|
|
|
@@ -923,6 +936,7 @@ class GetSessionTokenMsg(_message.Message):
|
|
|
923
936
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
924
937
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header"] # noqa: Y015
|
|
925
938
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
939
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
926
940
|
|
|
927
941
|
Global___GetSessionTokenMsg: _TypeAlias = GetSessionTokenMsg # noqa: Y015
|
|
928
942
|
|
|
@@ -971,6 +985,7 @@ class SessionTokenMsg(_message.Message):
|
|
|
971
985
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
972
986
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header", "status", b"status", "token", b"token"] # noqa: Y015
|
|
973
987
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
988
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
974
989
|
|
|
975
990
|
Global___SessionTokenMsg: _TypeAlias = SessionTokenMsg # noqa: Y015
|
|
976
991
|
|
|
@@ -1015,6 +1030,7 @@ class RestoreSessionMsg(_message.Message):
|
|
|
1015
1030
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1016
1031
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header", "token", b"token"] # noqa: Y015
|
|
1017
1032
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1033
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1018
1034
|
|
|
1019
1035
|
Global___RestoreSessionMsg: _TypeAlias = RestoreSessionMsg # noqa: Y015
|
|
1020
1036
|
|
|
@@ -1051,6 +1067,7 @@ class LogoutMsg(_message.Message):
|
|
|
1051
1067
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1052
1068
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header"] # noqa: Y015
|
|
1053
1069
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1070
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1054
1071
|
|
|
1055
1072
|
Global___LogoutMsg: _TypeAlias = LogoutMsg # noqa: Y015
|
|
1056
1073
|
|
|
@@ -1085,6 +1102,7 @@ class GetParameterTreeMsg(_message.Message):
|
|
|
1085
1102
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1086
1103
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header"] # noqa: Y015
|
|
1087
1104
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1105
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1088
1106
|
|
|
1089
1107
|
Global___GetParameterTreeMsg: _TypeAlias = GetParameterTreeMsg # noqa: Y015
|
|
1090
1108
|
|
|
@@ -1132,6 +1150,7 @@ class ParameterTreeMsg(_message.Message):
|
|
|
1132
1150
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1133
1151
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["hash", b"hash", "header", b"header", "params", b"params", "status", b"status"] # noqa: Y015
|
|
1134
1152
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1153
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1135
1154
|
|
|
1136
1155
|
Global___ParameterTreeMsg: _TypeAlias = ParameterTreeMsg # noqa: Y015
|
|
1137
1156
|
|
|
@@ -1171,6 +1190,7 @@ class GetParameterTreeHashMsg(_message.Message):
|
|
|
1171
1190
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1172
1191
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header"] # noqa: Y015
|
|
1173
1192
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1193
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1174
1194
|
|
|
1175
1195
|
Global___GetParameterTreeHashMsg: _TypeAlias = GetParameterTreeHashMsg # noqa: Y015
|
|
1176
1196
|
|
|
@@ -1215,6 +1235,7 @@ class ParameterTreeHashMsg(_message.Message):
|
|
|
1215
1235
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1216
1236
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["hash", b"hash", "header", b"header", "status", b"status"] # noqa: Y015
|
|
1217
1237
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1238
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1218
1239
|
|
|
1219
1240
|
Global___ParameterTreeHashMsg: _TypeAlias = ParameterTreeHashMsg # noqa: Y015
|
|
1220
1241
|
|
|
@@ -1279,6 +1300,7 @@ class CreateGroupMsg(_message.Message):
|
|
|
1279
1300
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1280
1301
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["alias", b"alias", "frq_divider", b"frq_divider", "header", b"header", "paths", b"paths"] # noqa: Y015
|
|
1281
1302
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1303
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1282
1304
|
|
|
1283
1305
|
Global___CreateGroupMsg: _TypeAlias = CreateGroupMsg # noqa: Y015
|
|
1284
1306
|
|
|
@@ -1337,6 +1359,7 @@ class GroupStatusMsg(_message.Message):
|
|
|
1337
1359
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1338
1360
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["alias", b"alias", "header", b"header", "id", b"id", "params", b"params", "status", b"status"] # noqa: Y015
|
|
1339
1361
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1362
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1340
1363
|
|
|
1341
1364
|
Global___GroupStatusMsg: _TypeAlias = GroupStatusMsg # noqa: Y015
|
|
1342
1365
|
|
|
@@ -1379,6 +1402,7 @@ class RemoveGroupMsg(_message.Message):
|
|
|
1379
1402
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1380
1403
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["alias", b"alias", "header", b"header"] # noqa: Y015
|
|
1381
1404
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1405
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1382
1406
|
|
|
1383
1407
|
Global___RemoveGroupMsg: _TypeAlias = RemoveGroupMsg # noqa: Y015
|
|
1384
1408
|
|
|
@@ -1419,6 +1443,7 @@ class GetParameterMsg(_message.Message):
|
|
|
1419
1443
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1420
1444
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header", "path", b"path"] # noqa: Y015
|
|
1421
1445
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1446
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1422
1447
|
|
|
1423
1448
|
Global___GetParameterMsg: _TypeAlias = GetParameterMsg # noqa: Y015
|
|
1424
1449
|
|
|
@@ -1471,6 +1496,7 @@ class ParameterMsg(_message.Message):
|
|
|
1471
1496
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1472
1497
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header", "info", b"info", "status", b"status", "value", b"value"] # noqa: Y015
|
|
1473
1498
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1499
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1474
1500
|
|
|
1475
1501
|
Global___ParameterMsg: _TypeAlias = ParameterMsg # noqa: Y015
|
|
1476
1502
|
|
|
@@ -1513,6 +1539,7 @@ class GetParameterListMsg(_message.Message):
|
|
|
1513
1539
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1514
1540
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header", "params", b"params"] # noqa: Y015
|
|
1515
1541
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1542
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1516
1543
|
|
|
1517
1544
|
Global___GetParameterListMsg: _TypeAlias = GetParameterListMsg # noqa: Y015
|
|
1518
1545
|
|
|
@@ -1561,6 +1588,7 @@ class ParameterListMsg(_message.Message):
|
|
|
1561
1588
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1562
1589
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header", "params", b"params", "status", b"status"] # noqa: Y015
|
|
1563
1590
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1591
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1564
1592
|
|
|
1565
1593
|
Global___ParameterListMsg: _TypeAlias = ParameterListMsg # noqa: Y015
|
|
1566
1594
|
|
|
@@ -1617,6 +1645,7 @@ class SetParameterMsg(_message.Message):
|
|
|
1617
1645
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1618
1646
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header", "offset", b"offset", "path", b"path", "value", b"value"] # noqa: Y015
|
|
1619
1647
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1648
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1620
1649
|
|
|
1621
1650
|
Global___SetParameterMsg: _TypeAlias = SetParameterMsg # noqa: Y015
|
|
1622
1651
|
|
|
@@ -1665,6 +1694,7 @@ class SetParameterListMsg(_message.Message):
|
|
|
1665
1694
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1666
1695
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header", "params", b"params"] # noqa: Y015
|
|
1667
1696
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1697
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1668
1698
|
|
|
1669
1699
|
Global___SetParameterListMsg: _TypeAlias = SetParameterListMsg # noqa: Y015
|
|
1670
1700
|
|
|
@@ -1729,6 +1759,7 @@ class OverwriteParameterMsg(_message.Message):
|
|
|
1729
1759
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1730
1760
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["activate", b"activate", "header", b"header", "offset", b"offset", "path", b"path", "value", b"value"] # noqa: Y015
|
|
1731
1761
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1762
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1732
1763
|
|
|
1733
1764
|
Global___OverwriteParameterMsg: _TypeAlias = OverwriteParameterMsg # noqa: Y015
|
|
1734
1765
|
|
|
@@ -1775,6 +1806,7 @@ class ReleaseParameterMsg(_message.Message):
|
|
|
1775
1806
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1776
1807
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header", "path", b"path"] # noqa: Y015
|
|
1777
1808
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1809
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1778
1810
|
|
|
1779
1811
|
Global___ReleaseParameterMsg: _TypeAlias = ReleaseParameterMsg # noqa: Y015
|
|
1780
1812
|
|
|
@@ -1825,6 +1857,7 @@ class SaveMsg(_message.Message):
|
|
|
1825
1857
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1826
1858
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["file_name", b"file_name", "header", b"header", "path", b"path"] # noqa: Y015
|
|
1827
1859
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1860
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1828
1861
|
|
|
1829
1862
|
Global___SaveMsg: _TypeAlias = SaveMsg # noqa: Y015
|
|
1830
1863
|
|
|
@@ -1875,6 +1908,7 @@ class LoadMsg(_message.Message):
|
|
|
1875
1908
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1876
1909
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["file_name", b"file_name", "header", b"header", "path", b"path"] # noqa: Y015
|
|
1877
1910
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1911
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1878
1912
|
|
|
1879
1913
|
Global___LoadMsg: _TypeAlias = LoadMsg # noqa: Y015
|
|
1880
1914
|
|
|
@@ -1915,6 +1949,7 @@ class ConsoleCmdMsg(_message.Message):
|
|
|
1915
1949
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1916
1950
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["header", b"header", "value", b"value"] # noqa: Y015
|
|
1917
1951
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1952
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1918
1953
|
|
|
1919
1954
|
Global___ConsoleCmdMsg: _TypeAlias = ConsoleCmdMsg # noqa: Y015
|
|
1920
1955
|
|
|
@@ -1957,5 +1992,6 @@ class ConsoleCmdListMsg(_message.Message):
|
|
|
1957
1992
|
def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ...
|
|
1958
1993
|
_ClearFieldArgType: _TypeAlias = _typing.Literal["cmds", b"cmds", "header", b"header"] # noqa: Y015
|
|
1959
1994
|
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
|
|
1995
|
+
def WhichOneof(self, oneof_group: _Never) -> None: ...
|
|
1960
1996
|
|
|
1961
1997
|
Global___ConsoleCmdListMsg: _TypeAlias = ConsoleCmdListMsg # noqa: Y015
|
motorcortex/request.py
CHANGED
|
@@ -59,7 +59,7 @@ def _register_shutdown(inst: "Request") -> None:
|
|
|
59
59
|
try:
|
|
60
60
|
import threading
|
|
61
61
|
threading._register_atexit(_close_at_exit, inst) # type: ignore[attr-defined]
|
|
62
|
-
except (AttributeError, ImportError):
|
|
62
|
+
except (AttributeError, ImportError): # pragma: no cover
|
|
63
63
|
atexit.register(_close_at_exit, inst)
|
|
64
64
|
|
|
65
65
|
|
motorcortex/session.py
CHANGED
|
@@ -41,7 +41,7 @@ from typing import Any, Optional, Type, TYPE_CHECKING
|
|
|
41
41
|
|
|
42
42
|
from motorcortex.exceptions import McxConnectionError
|
|
43
43
|
|
|
44
|
-
if TYPE_CHECKING:
|
|
44
|
+
if TYPE_CHECKING: # pragma: no cover
|
|
45
45
|
from motorcortex.request import Request, ConnectionState
|
|
46
46
|
from motorcortex.subscribe import Subscribe
|
|
47
47
|
from motorcortex.message_types import MessageTypes
|
motorcortex/subscribe.py
CHANGED
|
@@ -20,7 +20,7 @@ from motorcortex.setup_logger import logger
|
|
|
20
20
|
from motorcortex.nng_url import NngUrl
|
|
21
21
|
from motorcortex import _connection_state, _request_utils, _subscribe_dispatch
|
|
22
22
|
|
|
23
|
-
if TYPE_CHECKING:
|
|
23
|
+
if TYPE_CHECKING: # pragma: no cover
|
|
24
24
|
from motorcortex.message_types import MessageTypes
|
|
25
25
|
|
|
26
26
|
|
|
@@ -64,7 +64,7 @@ def _register_shutdown(inst: "Subscribe") -> None:
|
|
|
64
64
|
try:
|
|
65
65
|
import threading
|
|
66
66
|
threading._register_atexit(_close_at_exit, inst) # type: ignore[attr-defined]
|
|
67
|
-
except (AttributeError, ImportError):
|
|
67
|
+
except (AttributeError, ImportError): # pragma: no cover
|
|
68
68
|
atexit.register(_close_at_exit, inst)
|
|
69
69
|
|
|
70
70
|
|
motorcortex/subscription.py
CHANGED
|
@@ -272,8 +272,8 @@ class Subscription(object):
|
|
|
272
272
|
|
|
273
273
|
Examples:
|
|
274
274
|
>>> def update(parameters):
|
|
275
|
-
>>>
|
|
276
|
-
>>>
|
|
275
|
+
>>> # parameters is a list of Parameter tuples
|
|
276
|
+
>>> print(parameters)
|
|
277
277
|
>>> data_sub.notify(update)
|
|
278
278
|
|
|
279
279
|
"""
|
motorcortex/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = '1.0.
|
|
1
|
+
__version__ = '1.0.2'
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
motorcortex/__init__.py,sha256=eVuJIbn8gj549T1HZ7JKZ1i4gx0aibuOLJ-apB6CO3g,15204
|
|
2
|
+
motorcortex/_connection_state.py,sha256=0jos75PAyMsN3ew6HRoRDbLY-lGCzDit-SiUR7ZvnlA,2203
|
|
3
|
+
motorcortex/_request_builders.py,sha256=ZP-WKS56CkrpoKbpU6FEM5e5E_MAr_P2PEQPZYaS5ls,5265
|
|
4
|
+
motorcortex/_request_utils.py,sha256=K8UCqgDx7DenZlY-l8zEqowIM0yiVPuLciTy9KX5wBY,12155
|
|
5
|
+
motorcortex/_subscribe_dispatch.py,sha256=mPXSqo44RgGryLZabj5xmBd7riW154kA8fnCEQ3Mjho,2942
|
|
6
|
+
motorcortex/exceptions.py,sha256=9xFscRC2yEO2AxesxJ15p6DimDVRIdOeCdj4gF0gahs,2239
|
|
7
|
+
motorcortex/init_threads.py,sha256=rT0VRhdwQfI0ziTi_jeEaLxTzCtkgVo71gmQIeQyuv8,3343
|
|
8
|
+
motorcortex/message_types.py,sha256=jUqAE1-jsZ4a3fL0FzEavBwyseklDF5GfQvxhQMOmH0,16261
|
|
9
|
+
motorcortex/motorcortex_hash.json,sha256=727K4JXwdtqzkIPtlq7ROSVOKLEsy1za3D7IjlLqFpA,3572
|
|
10
|
+
motorcortex/motorcortex_pb2.py,sha256=ySYY3aFY_t8DYPkNNmb8lMg4s3AOIc9zvO9d5bAfHvw,12839
|
|
11
|
+
motorcortex/motorcortex_pb2.pyi,sha256=gaDUuFREaK0_Sp90fpNCsTjIirRjcI6cAco-El9Kmp4,72704
|
|
12
|
+
motorcortex/nng_url.py,sha256=LXmeu_Z1Hn0_YkF4QqLN2SiEvG2_AvKlsYK1Cox_1RQ,1386
|
|
13
|
+
motorcortex/parameter_tree.py,sha256=i9nyo40okT8Y8WfPF2M9FZmCo59oXWuu3PXxmfexFtU,2696
|
|
14
|
+
motorcortex/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
+
motorcortex/reply.py,sha256=GMTaDQ_jeu32H5Zl4LA2Smw_PzNuho2cLuzY-1vvJQ0,3889
|
|
16
|
+
motorcortex/request.py,sha256=O0fnJDbUDS9y_SjJ8sPorU7nGQ3gr8RLDhBjGvnHpAY,26273
|
|
17
|
+
motorcortex/session.py,sha256=yxn_qGXx4MTcFGYrrdl6QXWESv3anBlsioNMucvlHmI,7058
|
|
18
|
+
motorcortex/setup_logger.py,sha256=ynWC2xMPC5lw_ubU1AL7lbuxm4VK2xqkLRNisAv_fZM,195
|
|
19
|
+
motorcortex/state_callback_handler.py,sha256=Vr9XZ5vN7-CKJdvbJlFkenwH6JfhuInkM1RQvRnlhPY,3069
|
|
20
|
+
motorcortex/subscribe.py,sha256=E4Hz03vF2Jgk1vXqhHf42Rd-y337Rt78zY70X2NrXeo,15755
|
|
21
|
+
motorcortex/subscription.py,sha256=UTPmLOl41Tn3mRl3Hyam2R9bCg9D5y5EJsiChYERu5E,15425
|
|
22
|
+
motorcortex/timespec.py,sha256=bZ-CD2EY0ALoWmJyluThxkiqfVCiGZqPPHRlKSvq7Fs,4573
|
|
23
|
+
motorcortex/version.py,sha256=ZTipNH6wyC6qsq1H_lZsvJyVruUa1nu3y4EysMdkpuU,22
|
|
24
|
+
motorcortex_python-1.0.2.dist-info/LICENSE,sha256=m5IaPTxipQwDCpY_YUD927y5QnUzqKGLVUY8E2KxDMk,1165
|
|
25
|
+
motorcortex_python-1.0.2.dist-info/METADATA,sha256=ghM1WccanWR1oyGtsvnIW67hrU1QK2Y1fq5KjfaWjqA,6141
|
|
26
|
+
motorcortex_python-1.0.2.dist-info/WHEEL,sha256=51RkbunBAw4BWsgaQWTpPhg4Diwp3c9P5iaLk67Hdtg,92
|
|
27
|
+
motorcortex_python-1.0.2.dist-info/top_level.txt,sha256=2Glsldo3S13fGB0ub_vogd7y-RQYYNXDjnm-qESmjBY,12
|
|
28
|
+
motorcortex_python-1.0.2.dist-info/RECORD,,
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
motorcortex/__init__.py,sha256=tB_kAiYoTroBlVUEyldv2EVYUX9uvNprGpeMW7lroE0,13874
|
|
2
|
-
motorcortex/_connection_state.py,sha256=0jos75PAyMsN3ew6HRoRDbLY-lGCzDit-SiUR7ZvnlA,2203
|
|
3
|
-
motorcortex/_request_builders.py,sha256=bMZAP1ko6jju1wXs5p6TCp4D93wbvSgpKRf3gvW9_Bg,5245
|
|
4
|
-
motorcortex/_request_utils.py,sha256=npW68Mr8YJk6jGek3CDIAZoFGFULQwaIRhlnNW0aDeA,12115
|
|
5
|
-
motorcortex/_subscribe_dispatch.py,sha256=mPXSqo44RgGryLZabj5xmBd7riW154kA8fnCEQ3Mjho,2942
|
|
6
|
-
motorcortex/exceptions.py,sha256=9xFscRC2yEO2AxesxJ15p6DimDVRIdOeCdj4gF0gahs,2239
|
|
7
|
-
motorcortex/init_threads.py,sha256=rT0VRhdwQfI0ziTi_jeEaLxTzCtkgVo71gmQIeQyuv8,3343
|
|
8
|
-
motorcortex/message_types.py,sha256=FA9jcrHS8lf_KxMi4qF5-bTDvZoGRoZ4paPS8oCF35k,15643
|
|
9
|
-
motorcortex/motorcortex_hash.json,sha256=727K4JXwdtqzkIPtlq7ROSVOKLEsy1za3D7IjlLqFpA,3572
|
|
10
|
-
motorcortex/motorcortex_pb2.py,sha256=bMRS3TcCJMbBGYqGKnmTiQZaTmpbiJv0iYU3EF8s29Q,12790
|
|
11
|
-
motorcortex/motorcortex_pb2.pyi,sha256=8mxofEtlFESwybu9eeo_i5iMw35eNqsmr2DjHU9pg1k,70451
|
|
12
|
-
motorcortex/nng_url.py,sha256=LXmeu_Z1Hn0_YkF4QqLN2SiEvG2_AvKlsYK1Cox_1RQ,1386
|
|
13
|
-
motorcortex/parameter_tree.py,sha256=i9nyo40okT8Y8WfPF2M9FZmCo59oXWuu3PXxmfexFtU,2696
|
|
14
|
-
motorcortex/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
-
motorcortex/reply.py,sha256=GMTaDQ_jeu32H5Zl4LA2Smw_PzNuho2cLuzY-1vvJQ0,3889
|
|
16
|
-
motorcortex/request.py,sha256=r16i1CZOl8qVvSrVNqMocdsOQCjiKw21XfKtN6PqMc0,26253
|
|
17
|
-
motorcortex/session.py,sha256=d5V3q5S5cATJ4Dm9W-lZo388o98ccX48B1fAjgQZ-5U,7038
|
|
18
|
-
motorcortex/setup_logger.py,sha256=ynWC2xMPC5lw_ubU1AL7lbuxm4VK2xqkLRNisAv_fZM,195
|
|
19
|
-
motorcortex/state_callback_handler.py,sha256=Vr9XZ5vN7-CKJdvbJlFkenwH6JfhuInkM1RQvRnlhPY,3069
|
|
20
|
-
motorcortex/subscribe.py,sha256=A0lFkkFTqEh8vSdGvr1JBq25gjo-xh4Ai_kcoW4aPIA,15715
|
|
21
|
-
motorcortex/subscription.py,sha256=n_7OKE_u-Sz0T49S54RuYXlJ2uzXPFzxeXIGg91lfLM,15406
|
|
22
|
-
motorcortex/timespec.py,sha256=bZ-CD2EY0ALoWmJyluThxkiqfVCiGZqPPHRlKSvq7Fs,4573
|
|
23
|
-
motorcortex/version.py,sha256=HSDW64W4Mh5MIMnoVrIKrC33CHH7K3FbyThUjjRUJgE,25
|
|
24
|
-
motorcortex_python-1.0.0rc2.dist-info/LICENSE,sha256=m5IaPTxipQwDCpY_YUD927y5QnUzqKGLVUY8E2KxDMk,1165
|
|
25
|
-
motorcortex_python-1.0.0rc2.dist-info/METADATA,sha256=oKj46hEnPen9bc0IiWBcu_pcQ82AM0R9TYZW0Y_VPUs,6144
|
|
26
|
-
motorcortex_python-1.0.0rc2.dist-info/WHEEL,sha256=hPN0AlP2dZM_3ZJZWP4WooepkmU9wzjGgCLCeFjkHLA,92
|
|
27
|
-
motorcortex_python-1.0.0rc2.dist-info/top_level.txt,sha256=2Glsldo3S13fGB0ub_vogd7y-RQYYNXDjnm-qESmjBY,12
|
|
28
|
-
motorcortex_python-1.0.0rc2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|