Repository navigation
Expand file tree
/
Copy pathpyproject.toml
More file actions
84 lines (72 loc) · 2.45 KB
/
Copy pathpyproject.toml
File metadata and controls
84 lines (72 loc) · 2.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
[build-system]
requires = ["setuptools>=68", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "orcmesh"
version = "0.2.0"
description = "Native Windows operations console for LoRa mesh networks"
requires-python = ">=3.12"
license = "GPL-3.0-only"
dependencies = [
"meshtastic>=2.5.0,<3",
"PySide6>=6.7,<7",
"PyPubSub>=4.0", # used directly by meshtastic and our controller
"platformdirs>=4,<5",
"pyqtgraph>=0.13",
"numpy>=1.26",
"esptool>=5,<6",
]
[project.scripts]
orcmesh = "meshchat.app:main"
[project.optional-dependencies]
# RTL-SDR spectrum waterfall. Also needs the native librtlsdr driver — on
# Windows, install the WinUSB driver for the dongle with Zadig. OrcMesh runs
# normally without this; the Spectrum page just reports it as unavailable.
sdr = [
"pyrtlsdr>=0.3",
# True 3D waterfall surface (pyqtgraph.opengl.GLSurfacePlotItem) for the
# SIGINT tab. Optional even here: the tab falls back to the 2D waterfall
# when OpenGL is missing or the driver is broken.
"PyOpenGL>=3.1.7",
]
dev = [
"pytest>=8,<10",
"pytest-timeout>=2,<3",
"ruff>=0.4",
"mypy>=1.10",
"pyinstaller>=6,<7",
]
[tool.setuptools.packages.find]
where = ["src"]
# Include the Leaflet web assets in the installed package
[tool.setuptools.package-data]
"meshchat.ui.map" = ["web/**/*"]
# PEP 561 marker so type checkers use the inline annotations
"meshchat" = ["py.typed"]
[tool.pytest.ini_options]
testpaths = ["tests"]
pythonpath = ["src", "."]
timeout = 30
[tool.ruff]
line-length = 100
[tool.ruff.lint]
select = ["E", "F", "W"]
ignore = ["E501"]
[tool.ruff.lint.per-file-ignores]
# Qt/Meshtastic imports are deliberately deferred until after logging and the
# QApplication are configured, so module-level-import-not-at-top is expected.
"src/meshchat/__main__.py" = ["E402"]
# Tests must instantiate QCoreApplication before importing Qt-dependent modules.
"tests/*" = ["E402"]
[tool.mypy]
python_version = "3.12"
ignore_missing_imports = true
# Qt's generated stubs type several virtuals more loosely than PySide6 actually
# accepts (QAbstractItemModel.data, QWidget.update), and QObject.disconnect
# collides with our own connection-teardown method. Overriding these is normal
# PySide6 practice; the errors are stub artifacts, not defects.
disable_error_code = ["override"]
[[tool.mypy.overrides]]
# Optional dependency — absent unless the [sdr] extra is installed.
module = ["rtlsdr.*"]
ignore_missing_imports = true