Metadata-Version: 2.4
Name: olo-client
Version: 1.0.1
Summary: Python SDK for OLO robot control via ROS
License-Expression: LicenseRef-Proprietary
Project-URL: Homepage, https://olo-robotics.com
Project-URL: Documentation, https://app.olo-robotics.com/docs
Keywords: ros,robotics,robot,control,sdk
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: roslibpy>=1.6.0
Requires-Dist: requests>=2.25.0
Provides-Extra: async
Requires-Dist: aiohttp>=3.8.0; extra == "async"
Provides-Extra: video
Requires-Dist: aiortc>=1.6.0; extra == "video"
Provides-Extra: full
Requires-Dist: aiohttp>=3.8.0; extra == "full"
Requires-Dist: aiortc>=1.6.0; extra == "full"
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
Dynamic: license-file

# OLO Python SDK

Python SDK for controlling robots via ROS (Robot Operating System) through WebSocket connections.

## Installation

```bash
pip install olo-client
```

### Optional Dependencies

For WebRTC video streaming support:

```bash
pip install olo-client[video]
```

For all optional features:

```bash
pip install olo-client[full]
```

## Quick Start

```python
import asyncio
from oloclient import OLOClient

async def main():
    # Connect to ROS bridge
    async with OLOClient(ros_url='ws://localhost:9090') as client:
        # List available topics
        topics = await client.core.list_topics()
        print(f"Found {len(topics)} topics")

asyncio.run(main())
```

## Standalone Platform Auth

For standalone SDK usage, create a personal access token in the OLO web app and pass it to the client.

```python
import asyncio
from oloclient import OLOClient

async def main():
    client = OLOClient(
        server_url='wss://app.olo-robotics.com',
        api_url='https://app.olo-robotics.com',
        auth_token='olo_pat_your_token_here'
    )

    robots = await client.get_user_robots()
    await client.connect(robot_id=robots[0]['id'])
    print(await client.core.list_topics())

asyncio.run(main())
```

Username/password login is still available for compatibility, but two-factor-enabled accounts should use a personal access token instead of putting credentials in code.

## Documentation

For full API documentation, see the [OLO Documentation](https://app.olo-robotics.com/documentation/).
