fix: update dependency path, remove dead recipes, apply lint fixes

Fixed broken dependency path (../clients/python -> ../client-py).
Added strict ruff config. Removed dead meshcore/orac/telemetry
justfile recipes (scripts never existed). Applied SIM105
(contextlib.suppress) and I001 (import sorting) lint fixes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
swaitsandClaude Opus 4.6 committed 2026-04-08 13:34:00 -06:00
1 parent b3e8f07459
commit ef8261da57
7 files changed
+71 -29

No files matched your search

+1
View File
@@ -1,2 +1,3 @@
.venv/ .venv/
__pycache__/
meshcore/corpus/generated/ meshcore/corpus/generated/
-14
View File
@@ -2,8 +2,6 @@ set shell := ["bash", "-c"]
_proj := source_directory() _proj := source_directory()
_uv := "uv run --project " + _proj _uv := "uv run --project " + _proj
_uv_meshcore := "uv run --project " + _proj + " --extra meshcore"
_uv_orac := "uv run --project " + _proj + " --extra orac"
[private] [private]
_ensure_tools: _ensure_tools:
@@ -43,15 +41,3 @@ test-commands *args: _ensure_tools
# Two-way LoRa bridge over TCP # Two-way LoRa bridge over TCP
bridge *args: _ensure_tools bridge *args: _ensure_tools
@{{_uv}} {{source_directory()}}/lora_bridge.py {{args}} @{{_uv}} {{source_directory()}}/lora_bridge.py {{args}}
# MeshCore packet decoder/monitor
meshcore *args: _ensure_tools
@{{_uv_meshcore}} {{source_directory()}}/meshcore/meshcore_rx.py {{args}}
# MeshCore AI bot (requires ANTHROPIC_API_KEY)
orac *args: _ensure_tools
@{{_uv_orac}} {{source_directory()}}/meshcore/ai_bot.py {{args}}
# MeshCore repeater telemetry monitor
telemetry *args: _ensure_tools
@{{_uv_meshcore}} {{source_directory()}}/meshcore/telemetry_monitor.py {{args}}
+6 -2
View File
@@ -17,14 +17,16 @@ Both sides:
- Forward received LoRa packets -> TCP -> remote side -> TX - Forward received LoRa packets -> TCP -> remote side -> TX
- Bidirectional: both sides receive AND transmit - Bidirectional: both sides receive AND transmit
""" """
import argparse import argparse
import serial
import socket import socket
import struct import struct
import sys import sys
import threading import threading
import time import time
import serial
import donglora as dl import donglora as dl
@@ -84,7 +86,9 @@ def radio_to_tcp(ser: serial.Serial, sock: socket.socket):
grade = "GOOD" grade = "GOOD"
if grade in ("INVALID", "UNRELIABLE"): if grade in ("INVALID", "UNRELIABLE"):
print(f" RX drop len:{len(payload):3d} rssi:{rssi}dBm snr:{snr}dB [{grade}]") print(
f" RX drop len:{len(payload):3d} rssi:{rssi}dBm snr:{snr}dB [{grade}]"
)
continue continue
tag = f" [{grade}]" if grade == "MARGINAL" else "" tag = f" [{grade}]" if grade == "MARGINAL" else ""
+2 -3
View File
@@ -7,6 +7,7 @@ Usage:
""" """
import argparse import argparse
import contextlib
import sys import sys
import time import time
@@ -48,10 +49,8 @@ try:
print(f" RX: {text!r} RSSI:{resp['rssi']}dBm SNR:{resp['snr']}dB") print(f" RX: {text!r} RSSI:{resp['rssi']}dBm SNR:{resp['snr']}dB")
except KeyboardInterrupt: except KeyboardInterrupt:
try: with contextlib.suppress(Exception):
dl.send(ser, "StopRx") dl.send(ser, "StopRx")
except Exception:
pass
print("\nDone.") print("\nDone.")
except serial.SerialException as e: except serial.SerialException as e:
print(f"\nSerial error: {e}", file=sys.stderr) print(f"\nSerial error: {e}", file=sys.stderr)
+12 -1
View File
@@ -19,4 +19,15 @@ dev = ["ruff"]
package = false package = false
[tool.uv.sources] [tool.uv.sources]
donglora = { path = "../clients/python", editable = true } donglora = { path = "../client-py", editable = true }
[tool.ruff]
line-length = 100
target-version = "py310"
[tool.ruff.lint]
select = ["E", "W", "F", "I", "UP", "B", "C4", "ARG", "SIM", "RUF"]
ignore = ["E501"]
[tool.ruff.lint.isort]
known-first-party = ["donglora"]
+5 -4
View File
@@ -5,6 +5,7 @@ Usage:
python examples/simple_rx.py [PORT] python examples/simple_rx.py [PORT]
""" """
import contextlib
import sys import sys
import serial import serial
@@ -26,12 +27,12 @@ try:
resp = dl.decode_response(data) resp = dl.decode_response(data)
if resp["type"] == "RxPacket": if resp["type"] == "RxPacket":
p = resp["payload"] p = resp["payload"]
print(f" RSSI:{resp['rssi']:4d}dBm SNR:{resp['snr']:3d}dB len:{len(p):3d} {p.hex()}") print(
f" RSSI:{resp['rssi']:4d}dBm SNR:{resp['snr']:3d}dB len:{len(p):3d} {p.hex()}"
)
except KeyboardInterrupt: except KeyboardInterrupt:
try: with contextlib.suppress(Exception):
dl.send(ser, "StopRx") dl.send(ser, "StopRx")
except Exception:
pass
print("\nDone.") print("\nDone.")
except serial.SerialException as e: except serial.SerialException as e:
print(f"\nSerial error: {e}", file=sys.stderr) print(f"\nSerial error: {e}", file=sys.stderr)
Generated
+45 -5
View File
@@ -169,8 +169,8 @@ wheels = [
[[package]] [[package]]
name = "donglora" name = "donglora"
version = "0.1.0" version = "0.2.0"
source = { editable = "../clients/python" } source = { editable = "../client-py" }
dependencies = [ dependencies = [
{ name = "cobs" }, { name = "cobs" },
{ name = "pyserial" }, { name = "pyserial" },
@@ -199,6 +199,13 @@ requires-dist = [
] ]
provides-extras = ["meshcore", "orac"] provides-extras = ["meshcore", "orac"]
[package.metadata.requires-dev]
dev = [
{ name = "pytest" },
{ name = "pytest-cov" },
{ name = "ruff" },
]
[[package]] [[package]]
name = "donglora-examples" name = "donglora-examples"
version = "0.1.0" version = "0.1.0"
@@ -215,14 +222,22 @@ orac = [
{ name = "donglora", extra = ["orac"] }, { name = "donglora", extra = ["orac"] },
] ]
[package.dev-dependencies]
dev = [
{ name = "ruff" },
]
[package.metadata] [package.metadata]
requires-dist = [ requires-dist = [
{ name = "donglora", editable = "../clients/python" }, { name = "donglora", editable = "../client-py" },
{ name = "donglora", extras = ["meshcore"], marker = "extra == 'meshcore'", editable = "../clients/python" }, { name = "donglora", extras = ["meshcore"], marker = "extra == 'meshcore'", editable = "../client-py" },
{ name = "donglora", extras = ["orac"], marker = "extra == 'orac'", editable = "../clients/python" }, { name = "donglora", extras = ["orac"], marker = "extra == 'orac'", editable = "../client-py" },
] ]
provides-extras = ["meshcore", "orac"] provides-extras = ["meshcore", "orac"]
[package.metadata.requires-dev]
dev = [{ name = "ruff" }]
[[package]] [[package]]
name = "exceptiongroup" name = "exceptiongroup"
version = "1.3.1" version = "1.3.1"
@@ -599,6 +614,31 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0", size = 90585, upload-time = "2020-11-23T03:59:13.41Z" }, { url = "https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0", size = 90585, upload-time = "2020-11-23T03:59:13.41Z" },
] ]
[[package]]
name = "ruff"
version = "0.15.9"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/e6/97/e9f1ca355108ef7194e38c812ef40ba98c7208f47b13ad78d023caa583da/ruff-0.15.9.tar.gz", hash = "sha256:29cbb1255a9797903f6dde5ba0188c707907ff44a9006eb273b5a17bfa0739a2", size = 4617361, upload-time = "2026-04-02T18:17:20.829Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/1f/9cdfd0ac4b9d1e5a6cf09bedabdf0b56306ab5e333c85c87281273e7b041/ruff-0.15.9-py3-none-linux_armv6l.whl", hash = "sha256:6efbe303983441c51975c243e26dff328aca11f94b70992f35b093c2e71801e1", size = 10511206, upload-time = "2026-04-02T18:16:41.574Z" },
{ url = "https://files.pythonhosted.org/packages/3d/f6/32bfe3e9c136b35f02e489778d94384118bb80fd92c6d92e7ccd97db12ce/ruff-0.15.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:4965bac6ac9ea86772f4e23587746f0b7a395eccabb823eb8bfacc3fa06069f7", size = 10923307, upload-time = "2026-04-02T18:17:08.645Z" },
{ url = "https://files.pythonhosted.org/packages/ca/25/de55f52ab5535d12e7aaba1de37a84be6179fb20bddcbe71ec091b4a3243/ruff-0.15.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eaf05aad70ca5b5a0a4b0e080df3a6b699803916d88f006efd1f5b46302daab8", size = 10316722, upload-time = "2026-04-02T18:16:44.206Z" },
{ url = "https://files.pythonhosted.org/packages/48/11/690d75f3fd6278fe55fff7c9eb429c92d207e14b25d1cae4064a32677029/ruff-0.15.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9439a342adb8725f32f92732e2bafb6d5246bd7a5021101166b223d312e8fc59", size = 10623674, upload-time = "2026-04-02T18:16:50.951Z" },
{ url = "https://files.pythonhosted.org/packages/bd/ec/176f6987be248fc5404199255522f57af1b4a5a1b57727e942479fec98ad/ruff-0.15.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c5e6faf9d97c8edc43877c3f406f47446fc48c40e1442d58cfcdaba2acea745", size = 10351516, upload-time = "2026-04-02T18:16:57.206Z" },
{ url = "https://files.pythonhosted.org/packages/b2/fc/51cffbd2b3f240accc380171d51446a32aa2ea43a40d4a45ada67368fbd2/ruff-0.15.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b34a9766aeec27a222373d0b055722900fbc0582b24f39661aa96f3fe6ad901", size = 11150202, upload-time = "2026-04-02T18:17:06.452Z" },
{ url = "https://files.pythonhosted.org/packages/d6/d4/25292a6dfc125f6b6528fe6af31f5e996e19bf73ca8e3ce6eb7fa5b95885/ruff-0.15.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:89dd695bc72ae76ff484ae54b7e8b0f6b50f49046e198355e44ea656e521fef9", size = 11988891, upload-time = "2026-04-02T18:17:18.575Z" },
{ url = "https://files.pythonhosted.org/packages/13/e1/1eebcb885c10e19f969dcb93d8413dfee8172578709d7ee933640f5e7147/ruff-0.15.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce187224ef1de1bd225bc9a152ac7102a6171107f026e81f317e4257052916d5", size = 11480576, upload-time = "2026-04-02T18:16:52.986Z" },
{ url = "https://files.pythonhosted.org/packages/ff/6b/a1548ac378a78332a4c3dcf4a134c2475a36d2a22ddfa272acd574140b50/ruff-0.15.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b0c7c341f68adb01c488c3b7d4b49aa8ea97409eae6462d860a79cf55f431b6", size = 11254525, upload-time = "2026-04-02T18:17:02.041Z" },
{ url = "https://files.pythonhosted.org/packages/42/aa/4bb3af8e61acd9b1281db2ab77e8b2c3c5e5599bf2a29d4a942f1c62b8d6/ruff-0.15.9-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:55cc15eee27dc0eebdfcb0d185a6153420efbedc15eb1d38fe5e685657b0f840", size = 11204072, upload-time = "2026-04-02T18:17:13.581Z" },
{ url = "https://files.pythonhosted.org/packages/69/48/d550dc2aa6e423ea0bcc1d0ff0699325ffe8a811e2dba156bd80750b86dc/ruff-0.15.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a6537f6eed5cda688c81073d46ffdfb962a5f29ecb6f7e770b2dc920598997ed", size = 10594998, upload-time = "2026-04-02T18:16:46.369Z" },
{ url = "https://files.pythonhosted.org/packages/63/47/321167e17f5344ed5ec6b0aa2cff64efef5f9e985af8f5622cfa6536043f/ruff-0.15.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6d3fcbca7388b066139c523bda744c822258ebdcfbba7d24410c3f454cc9af71", size = 10359769, upload-time = "2026-04-02T18:17:10.994Z" },
{ url = "https://files.pythonhosted.org/packages/67/5e/074f00b9785d1d2c6f8c22a21e023d0c2c1817838cfca4c8243200a1fa87/ruff-0.15.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:058d8e99e1bfe79d8a0def0b481c56059ee6716214f7e425d8e737e412d69677", size = 10850236, upload-time = "2026-04-02T18:16:48.749Z" },
{ url = "https://files.pythonhosted.org/packages/76/37/804c4135a2a2caf042925d30d5f68181bdbd4461fd0d7739da28305df593/ruff-0.15.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:8e1ddb11dbd61d5983fa2d7d6370ef3eb210951e443cace19594c01c72abab4c", size = 11358343, upload-time = "2026-04-02T18:16:55.068Z" },
{ url = "https://files.pythonhosted.org/packages/88/3d/1364fcde8656962782aa9ea93c92d98682b1ecec2f184e625a965ad3b4a6/ruff-0.15.9-py3-none-win32.whl", hash = "sha256:bde6ff36eaf72b700f32b7196088970bf8fdb2b917b7accd8c371bfc0fd573ec", size = 10583382, upload-time = "2026-04-02T18:17:04.261Z" },
{ url = "https://files.pythonhosted.org/packages/4c/56/5c7084299bd2cacaa07ae63a91c6f4ba66edc08bf28f356b24f6b717c799/ruff-0.15.9-py3-none-win_amd64.whl", hash = "sha256:45a70921b80e1c10cf0b734ef09421f71b5aa11d27404edc89d7e8a69505e43d", size = 11744969, upload-time = "2026-04-02T18:16:59.611Z" },
{ url = "https://files.pythonhosted.org/packages/03/36/76704c4f312257d6dbaae3c959add2a622f63fcca9d864659ce6d8d97d3d/ruff-0.15.9-py3-none-win_arm64.whl", hash = "sha256:0694e601c028fd97dc5c6ee244675bc241aeefced7ef80cd9c6935a871078f53", size = 11005870, upload-time = "2026-04-02T18:17:15.773Z" },
]
[[package]] [[package]]
name = "sniffio" name = "sniffio"
version = "1.3.1" version = "1.3.1"