mirror of
https://github.com/ruvnet/RuView
synced 2026-06-17 11:33:19 +00:00
4ec5b166e6
Three fixes to make maturin develop actually work locally:
1. `python/Cargo.toml` removed `*.workspace = true` inheritance —
the python/ crate is intentionally outside the v2/ workspace
(ADR-117 §5.2) so it needs every `[package]` field local.
2. `python/pyproject.toml` `python-source = "python"` was wrong
because pyproject.toml lives at python/ — maturin was looking for
python/python/. Changed to `python-source = "."` so the
`wifi_densepose/` package directory sibling-to-pyproject is found.
3. `python/src/lib.rs` `#[pymodule] fn wifi_densepose_native` →
`#[pymodule] #[pyo3(name = "_native")] fn wifi_densepose_native`.
PyO3 generates `PyInit__native` from the pyo3-name attribute, which
must match the `module-name` in pyproject.toml's [tool.maturin]
block ("wifi_densepose._native"). Without this attribute the wheel
builds but `import wifi_densepose._native` fails with
ModuleNotFoundError.
## Local validation (P1 acceptance gate)
```
$ python -m venv .venv && .venv/Scripts/python -m pip install maturin pytest
$ VIRTUAL_ENV=… maturin develop --release
…
Finished `release` profile [optimized] target(s)
📦 Built wheel for abi3 Python ≥ 3.10
🛠 Installed wifi-densepose-2.0.0a1
$ .venv/Scripts/python -c 'import wifi_densepose; print(wifi_densepose.__version__, wifi_densepose.__rust_version__, wifi_densepose.hello())'
2.0.0a1 2.0.0-alpha.1 ok
$ .venv/Scripts/python -m pytest tests/ -v
tests/test_smoke.py::test_package_imports PASSED
tests/test_smoke.py::test_version_string_well_formed PASSED
tests/test_smoke.py::test_rust_version_surfaced PASSED
tests/test_smoke.py::test_build_features_listed PASSED
tests/test_smoke.py::test_hello_returns_ok PASSED
tests/test_smoke.py::test_native_module_private PASSED
======================== 6 passed in 0.05s =========================
```
P1 closed. Moving to P2 (core type bindings).
Refs #785, ADR-117 §6.
Co-Authored-By: claude-flow <ruv@ruv.net>
100 lines
3.2 KiB
TOML
100 lines
3.2 KiB
TOML
# ADR-117 — `wifi-densepose` v2.x PyPI wheel
|
||
#
|
||
# This is the PyO3+maturin replacement for the legacy pure-Python
|
||
# `wifi-densepose==1.1.0` (last release 2025-06-07). One compiled
|
||
# extension module per OS/arch covers Python 3.10–3.13 via abi3.
|
||
|
||
[build-system]
|
||
requires = ["maturin>=1.7,<2.0"]
|
||
build-backend = "maturin"
|
||
|
||
[project]
|
||
name = "wifi-densepose"
|
||
version = "2.0.0a1"
|
||
description = "WiFi-based human pose estimation, vital sign extraction, and ambient intelligence from Channel State Information (CSI). PyO3 bindings for the Rust core."
|
||
readme = "README.md"
|
||
requires-python = ">=3.10"
|
||
license = { text = "MIT" }
|
||
authors = [
|
||
{ name = "rUv", email = "ruv@ruv.net" },
|
||
]
|
||
keywords = [
|
||
"wifi", "csi", "pose-estimation", "vital-signs",
|
||
"biometric", "ambient-intelligence", "home-assistant", "matter",
|
||
]
|
||
classifiers = [
|
||
"Development Status :: 3 - Alpha",
|
||
"Intended Audience :: Developers",
|
||
"Intended Audience :: Science/Research",
|
||
"License :: OSI Approved :: MIT License",
|
||
"Operating System :: OS Independent",
|
||
"Programming Language :: Python :: 3",
|
||
"Programming Language :: Python :: 3.10",
|
||
"Programming Language :: Python :: 3.11",
|
||
"Programming Language :: Python :: 3.12",
|
||
"Programming Language :: Python :: 3.13",
|
||
"Programming Language :: Rust",
|
||
"Topic :: Scientific/Engineering",
|
||
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
||
"Topic :: Scientific/Engineering :: Image Recognition",
|
||
"Topic :: System :: Hardware",
|
||
"Typing :: Typed",
|
||
]
|
||
dependencies = []
|
||
|
||
[project.optional-dependencies]
|
||
# ADR-117 §5.6 — pure-Python WS/MQTT client. Lands in P4.
|
||
client = [
|
||
"websockets>=12.0",
|
||
"paho-mqtt>=2.1",
|
||
]
|
||
# Developer dependencies for running the test suite + lint.
|
||
dev = [
|
||
"pytest>=8.0",
|
||
"pytest-asyncio>=0.23",
|
||
"ruff>=0.7",
|
||
"mypy>=1.13",
|
||
]
|
||
|
||
[project.urls]
|
||
Homepage = "https://github.com/ruvnet/RuView"
|
||
Repository = "https://github.com/ruvnet/RuView"
|
||
Issues = "https://github.com/ruvnet/RuView/issues"
|
||
Documentation = "https://github.com/ruvnet/RuView/tree/main/docs"
|
||
"ADR-117 (modernization plan)" = "https://github.com/ruvnet/RuView/blob/main/docs/adr/ADR-117-pip-wifi-densepose-modernization.md"
|
||
"Release notes (v0.7.0)" = "https://github.com/ruvnet/RuView/blob/main/docs/releases/v0.7.0-mqtt-matter.md"
|
||
|
||
# Console-script entry points wired up in P5 once the CLI shim exists.
|
||
# [project.scripts]
|
||
# wifi-densepose = "wifi_densepose.cli:main"
|
||
|
||
[tool.maturin]
|
||
# Layout: pyproject.toml + Cargo.toml live at `python/`; the
|
||
# python-source directory `wifi_densepose/` is a sibling (i.e. at
|
||
# `python/wifi_densepose/`). `python-source = "."` tells maturin to
|
||
# look for packages directly under the project root.
|
||
python-source = "."
|
||
module-name = "wifi_densepose._native"
|
||
features = ["pyo3/extension-module"]
|
||
# Strip debug symbols for smaller release wheels (ADR-117 §5.4 5 MB budget).
|
||
strip = true
|
||
|
||
[tool.pytest.ini_options]
|
||
minversion = "8.0"
|
||
testpaths = ["tests"]
|
||
addopts = "-v --strict-markers"
|
||
asyncio_mode = "auto"
|
||
|
||
[tool.ruff]
|
||
line-length = 100
|
||
target-version = "py310"
|
||
|
||
[tool.ruff.lint]
|
||
select = ["E", "F", "W", "I", "UP", "B"]
|
||
|
||
[tool.mypy]
|
||
python_version = "3.10"
|
||
strict = true
|
||
warn_unused_ignores = true
|
||
warn_redundant_casts = true
|