Metadata-Version: 2.4
Name: xoople-sdk
Version: 0.2.0
Summary: Official Python SDK for the Xoople Products API.
License-Expression: LicenseRef-Xoople-Proprietary
License-File: LICENSE
Classifier: Development Status :: 3 - Alpha
Classifier: Programming Language :: Python :: 3.12
Requires-Dist: requests>=2.28.1,<3
Requires-Dist: pydantic>=2.8.2
Requires-Dist: azure-identity>=1.16 ; extra == 'entra'
Requires-Python: >=3.12
Project-URL: Homepage, https://xoople.com
Provides-Extra: entra
Description-Content-Type: text/markdown

# xoople-sdk

Official Python SDK for the Xoople Products API.

```python
from xoople.sdk import Config, XoopleClient, StaticToken, models

client = XoopleClient.from_credentials(
    "https://api.xoople.com", StaticToken("...")
)
# Or pass the complete transport configuration directly:
# client = XoopleClient(Config.from_env())

estimate = client.analyses.estimate(request)
analysis = client.analyses.create(request)

# `list` returns a paginator: iterate it for items across every page.
for run in client.analyses.runs.list(analysis.uid):
    print(run.state)

# Sub-resources take the parent analysis uid:
output = client.analyses.outputs.get(analysis.uid, output_uid)
access = client.analyses.outputs.generate_access_url(analysis.uid, output_uid, ttl_seconds=900)

# Custom verbs are plain methods:
client.analyses.cancel(analysis.uid)
client.analyses.schedules.pause(analysis.uid, schedule_uid)

# Cross-analysis reads and catalogs are top-level:
client.schedules.list(state=models.ScheduleStatus.ACTIVE)
client.usage.limits()
client.catalog.measures(product="tabular_time_series")
```

`Config.from_env()` reads `XOOPLE_API_URL` and `XOOPLE_TOKEN`.

Every failure raises a subclass of `xoople.sdk.errors.XoopleError`.
