Python bindings for Motorcortex Engine
Project description
motorcortex-python
Python bindings for the Motorcortex real-time control engine. Connect to a Motorcortex server, read and write parameters, and stream live telemetry over a single TLS-secured websocket.
Installation
pip install motorcortex-python
Requires Python ≥ 3.10. Runtime dependencies (pynng, protobuf) are installed automatically.
Quick start
Recommended — Session context manager (close is automatic, even on exceptions):
import motorcortex
with motorcortex.Session(
"wss://192.168.2.100",
certificate="mcx.cert.crt",
login="admin", password="admin",
timeout_ms=1000,
) as s:
# Read a single parameter
reply = s.req.getParameter("root/Control/dummyDouble").get()
print(reply.value)
# Write a parameter
s.req.setParameter("root/Control/dummyDouble", 3.14).get()
# Subscribe to a streamed update (every 10th cycle)
subscription = s.sub.subscribe(
["root/Control/dummyDouble"], "myGroup", frq_divider=10,
)
subscription.get()
subscription.notify(lambda result: print(result[0].value))
Explicit-objects form — the original API, still supported:
types = motorcortex.MessageTypes()
tree = motorcortex.ParameterTree()
req, sub = motorcortex.connect(
"wss://192.168.2.100", types, tree,
certificate="mcx.cert.crt",
login="admin", password="admin",
)
try:
reply = req.getParameter("root/Control/dummyDouble").get()
print(reply.value)
finally:
sub.close()
req.close()
The URL grammar accepts IPv4, hostnames, and IPv6 literals both with and without explicit ports — e.g. wss://host, wss://host:5568:5567, wss://[::1], wss://[fe80::1]:5568:5567.
Documentation
- API reference —
docs/_index.md— flat, method-by-method reference for every public class and function. Regenerated from the docstrings viapydoc-markdown. ARCHITECTURE.md— internals tour: module layout, connection lifecycle, subscribe frame format, parameter-tree cache, threading model, error contract, type conventions.examples/README.md— runnable scripts (quickstart.py,error_handling.py) that demonstrate the canonical usage patterns.CHANGELOG.md— version history.
Repository layout
motorcortex/ Python package
test/
unit/ Offline unit tests (no server)
integration/ Live tests against the vendored test_server
server/ Vendored C++ test_server (CMake project)
docs/ pydoc-markdown + stub generation scripts
benchmark/ Throughput scripts (not part of the test suite)
sandbox/ Ad-hoc repro scripts
Testing
Unit tests run offline and require only the package itself:
pip install -e .
pip install "coverage[toml]>=7.4"
python -m unittest discover -s test/unit -t .
Integration tests spawn the vendored test_server. Build it once, then run the suite:
cmake -S test/server -B test/server/build -DCMAKE_BUILD_TYPE=Release
cmake --build test/server/build
python -m unittest discover -s test/integration -t .
Coverage (line + branch). pyproject.toml sets parallel = true, so each
coverage run writes a per-process data shard; use coverage combine to
merge them before coverage report:
coverage erase
coverage run -m unittest discover -s test/unit -t .
coverage run -m unittest discover -s test/integration -t .
coverage combine
coverage report
See test/README.md for the full testing walkthrough.
Regenerating the API reference
docs/_index.md is committed and should be refreshed
before each release so the rendered reference matches the code at
the tag. The regen is two commands — pydoc-markdown first, then
format_api.sh to wrap >>> examples as fenced Python blocks and
prepend the front matter:
pip install pydoc-markdown
cd docs
pydoc-markdown pydoc-markdown.yml > _index.md
./format_api.sh
The hook-based one-shot version was dropped — it races with the
shell redirect and silently loses output. See docs/readme.md and
the comment in docs/pydoc-markdown.yml for the full rationale.
Release process
See PIPHOWTO.md for PyPI release steps and CHANGELOG.md for version history.
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file motorcortex_python-1.0.0rc1.tar.gz.
File metadata
- Download URL: motorcortex_python-1.0.0rc1.tar.gz
- Upload date:
- Size: 56.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e9efb4dd1d4785abf7a014949bf7afdfdbdd8f509696216ab9fe433afab7bd45
|
|
| MD5 |
95c36109cf9e6df65553890b8dbd680e
|
|
| BLAKE2b-256 |
79b0a566d1a8ba84a095d6aba24a06dee7a240ddc56209441526682413e5b801
|
File details
Details for the file motorcortex_python-1.0.0rc1-py3-none-any.whl.
File metadata
- Download URL: motorcortex_python-1.0.0rc1-py3-none-any.whl
- Upload date:
- Size: 62.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
965160c994d8c94aa90edb603b77d01dce258f235431bde0592fd1e38c1d839f
|
|
| MD5 |
253663c260bcbe8f86c8640f01814997
|
|
| BLAKE2b-256 |
6e326613334bb63043b72e51c4e3caeb4883678867294e11130524ce45b02f40
|