Metadata-Version: 2.4
Name: opendata-sdk
Version: 0.1.0
Summary: Python SDK for the opendata.best data API
Project-URL: Homepage, https://opendata.best
Project-URL: Repository, https://github.com/opendata-best/sdk
Author-email: "opendata.best" <hello@opendata.best>
License: MIT
Keywords: api,data,opendata,sdk
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
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: Typing :: Typed
Requires-Python: >=3.9
Requires-Dist: httpx>=0.24.0
Requires-Dist: pydantic>=2.0.0
Provides-Extra: async
Requires-Dist: anyio>=3.0.0; extra == 'async'
Provides-Extra: dev
Requires-Dist: anyio>=3.0.0; extra == 'dev'
Requires-Dist: mypy>=1.0.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
Requires-Dist: pytest>=7.0.0; extra == 'dev'
Requires-Dist: respx>=0.20.0; extra == 'dev'
Requires-Dist: ruff>=0.1.0; extra == 'dev'
Description-Content-Type: text/markdown

# opendata-sdk — Python

Official Python SDK for the [opendata.best](https://opendata.best) data API.

## Installation

```bash
pip install opendata-sdk
```

## Quick Start

```python
from opendata import OpenData

client = OpenData(api_key="pk_live_xxx")

# List products
products = client.products.list()

# Search
page = client.products.search("us_sec", q="Tesla", limit=50)
print(page.meta.total)  # total results
for item in page.data:
    print(item)

# Auto-paginate
for record in client.products.search_all("us_sec", q="Tesla"):
    print(record)

# Export
data = client.products.export("us_sec", format="json", limit=5000)

# Groups
groups = client.groups.list()
results = client.groups.search("us_compliance", q="bank")

# Quota info
print(client.quota)
```

## Async

```python
from opendata import AsyncOpenData

async with AsyncOpenData(api_key="pk_live_xxx") as client:
    products = await client.products.list()

    async for item in client.products.search_all("us_sec", q="Tesla"):
        print(item)
```

## Error Handling

```python
from opendata import OpenData
from opendata import AuthenticationError, NotFoundError, RateLimitError

client = OpenData(api_key="pk_live_xxx")

try:
    product = client.products.get("unknown")
except NotFoundError as e:
    print(f"Not found: {e.message}")
except RateLimitError as e:
    print(f"Quota exceeded ({e.quota_type}), retry after {e.retry_after}s")
except AuthenticationError as e:
    print(f"Auth failed: {e.message}")
```

## License

MIT
