Metadata-Version: 2.4
Name: pynetft
Version: 2.1.1
Summary: Python client for ATI Net F/T Ethernet force/torque sensors
Author: Xudong Han
License-Expression: Apache-2.0
License-File: core/LICENSE
License-File: LICENSE
License-File: LICENSES/curl.txt
License-File: LICENSES/MIT.txt
Classifier: Development Status :: 4 - Beta
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: MacOS
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: C++
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Typing :: Typed
Project-URL: Homepage, https://github.com/netft/pyNetFT
Project-URL: Documentation, https://github.com/netft/pyNetFT/blob/main/docs/api.md
Project-URL: Issues, https://github.com/netft/pyNetFT/issues
Project-URL: Source, https://github.com/netft/pyNetFT
Project-URL: Changelog, https://github.com/netft/pyNetFT/blob/main/CHANGELOG.md
Project-URL: Security, https://github.com/netft/pyNetFT/security/policy
Requires-Python: >=3.10
Description-Content-Type: text/markdown

# pyNetFT

[![CI](https://github.com/netft/pyNetFT/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/netft/pyNetFT/actions/workflows/ci.yml)
[![Wheels](https://github.com/netft/pyNetFT/actions/workflows/wheels.yml/badge.svg?branch=main)](https://github.com/netft/pyNetFT/actions/workflows/wheels.yml)
[![PyPI](https://img.shields.io/pypi/v/pynetft)](https://pypi.org/project/pynetft/)
[![CodeQL](https://github.com/netft/pyNetFT/actions/workflows/codeql.yml/badge.svg?branch=main)](https://github.com/netft/pyNetFT/actions/workflows/codeql.yml)
[![Coverage](https://codecov.io/gh/netft/pyNetFT/graph/badge.svg?branch=main)](https://codecov.io/gh/netft/pyNetFT)
[![Python](https://img.shields.io/badge/Python-3.10%E2%80%933.14-blue)](https://pypi.org/project/pynetft/)
[![License](https://img.shields.io/github/license/netft/pyNetFT?label=license)](LICENSE)

pyNetFT is a synchronous, typed Python SDK for ATI Net F/T Ethernet
force/torque sensors. It discovers the active sensor calibration and streams
RDT measurements through a reviewed snapshot of the native
[netft-cpp](https://github.com/netft/netft-cpp) core.

## Features

- Exposes raw counts, calibrated measurements, native units, and stream health.
- Provides blocking iterator and callback delivery without requiring NumPy.
- Ships typed, self-contained wheels with the native core and HTTP-only curl.
- Supports explicit reconnect and fail-stop recovery behavior.

## Installation

| Install method | Platform | Support |
| --- | --- | --- |
| PyPI wheel | Linux and macOS (x86-64 and ARM64), Windows (x86-64), CPython 3.10–3.14 | Supported |
| Source | Linux, macOS, Windows, CPython 3.10–3.14 | Best effort |

Install from PyPI:

```bash
python -m pip install pynetft
```

Install from source:

```bash
git clone https://github.com/netft/pyNetFT.git
cd pyNetFT
python -m pip install .
```

Supported wheels include curl and require no separate curl installation.
Source builds require a C++17 compiler, CMake 3.16 or newer, and system
libcurl 7.63.0 or newer.

## Quick start

```python
from pynetft import Client, Config

config = Config(sensor_host="192.168.1.1")

with Client(config) as client:
    sample = next(client.samples(timeout=1.0))
    print(sample.force, sample.force_unit.value)
    print(sample.torque, sample.torque_unit.value)
```

`192.168.1.1` is the ATI factory-default sensor address. Replace it with the
address configured for your sensor. Samples preserve the units reported by the
sensor, including the common ATI combination of newtons and
newton-millimeters. HTTP discovery and UDP RDT streaming do not provide
transport encryption, peer authentication, or message integrity; use a
trusted, isolated sensor network.

## Documentation

- [Python SDK tutorial](https://netft.dev/docs/tutorials/sdks/python)
- [Python API reference](https://netft.dev/docs/references/python-api/overview)
- [Units, status, and faults](https://netft.dev/docs/references/data-formats/units-status-and-faults)
- [Security and safety](https://netft.dev/docs/references/security-and-safety)
- [Migrating from pyNetFT 1.x](docs/migration-2.md)

The deprecated `NetFT` and `Response` interfaces remain available throughout
2.x. New applications should use `Client`, `Config`, and `Sample`. PyPy and
asyncio are not supported by the 2.x package.

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md) for the development environment, tests,
hardware-testing policy, and native-core synchronization rules. Report
security issues through [SECURITY.md](SECURITY.md).

## License

pyNetFT is licensed under the [Apache License 2.0](LICENSE). Previous pyNetFT,
netft-cpp, and curl license notices remain in the source and distribution
artifacts.
