Metadata-Version: 2.4
Name: aas-studio
Version: 0.1.0
Summary: Official Python SDK for AAS Studio — AI-powered Asset Administration Shell extraction from PDFs.
Author: AAS Studio
License: MIT
Project-URL: Homepage, https://aas-studio.eu
Project-URL: Documentation, https://aas-studio.eu/docs/api
Project-URL: Repository, https://github.com/MiguelReisRepo/AAS-Studio
Project-URL: Issues, https://github.com/MiguelReisRepo/AAS-Studio/issues
Keywords: aas,asset-administration-shell,iec-63278,idta,industry-4.0,digital-product-passport,battery-passport,catena-x,eclass
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Manufacturing
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: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# `aas-studio` — Python SDK for AAS Studio

Typed, zero-dependency client for the [AAS Studio](https://aas-studio.eu)
public REST API. Drop a PDF datasheet, get a structured Asset Administration
Shell extraction back.

## Install

```bash
pip install aas-studio
```

Requires Python 3.9+. Uses only the standard library — no `requests`,
no `httpx`, no `pydantic`.

## Auth

Generate a Bearer key at <https://aas-studio.eu/studio/settings/keys>.
Keys start with `sk_aas_` and are shown ONCE — store them in a secret manager.

```python
import os
from aas_studio import AasStudioClient

aas = AasStudioClient(api_key=os.environ["AAS_STUDIO_KEY"])
```

## Quickstart — extract from a PDF

```python
with open("./datasheets/ur10e.pdf", "rb") as f:
    response = aas.extract(
        f.read(),
        file_name="ur10e.pdf",
        id_prefix="urn:acme:aas",
    )

result = response["result"]
print(f"Asset: {result['assetIdShort']} ({len(result['submodels'])} submodels)")
print(f"Provider: {response['provider']}")
for w in response["warnings"]:
    print("warn:", w)
```

## Library — list & fetch saved extractions

```python
# List
page = aas.list_extractions(limit=50)
for ex in page["extractions"]:
    print(f"{ex['id']}  {ex['name']}  ({ex['mode']}, {ex['sourceCount']} sources)")

# Detail — full audit-replay payload
detail = aas.get_extraction(page["extractions"][0]["id"])
print(detail["extraction"]["aas"])    # the AAS itself
print(detail["extraction"]["meta"])   # extractionMeta with traces + cert
```

## Validate / fix existing AAS files

```python
with open("aas.aasx", "rb") as f:
    result = aas.validate(f.read())
if not result["valid"]:
    for err in result["errors"]:
        print(err["message"])

with open("broken.xml", "rb") as f:
    fixed = aas.fix(f.read())
if fixed["changed"]:
    print(fixed["xml"])
```

## Error handling

```python
from aas_studio import (
    AasStudioError,
    AuthError,
    QuotaError,
    FileTooLargeError,
    ProviderError,
)

try:
    aas.extract(pdf_bytes)
except QuotaError as e:
    print(f"Quota: {e.used}/{e.limit} on plan {e.plan}")
except AuthError:
    print("Bad API key — check the dashboard")
except FileTooLargeError:
    print("PDF over 20 MB — split or compress before upload")
except ProviderError as e:
    print(f"Provider failed (id={e.request_id}). Retry-friendly.")
except AasStudioError as e:
    print(f"Other API error: {e} (status={e.status}, request_id={e.request_id})")
```

Every error carries `.request_id` (when the server emitted one) for support
correlation. Quote it when you contact us.

## Configuration

```python
aas = AasStudioClient(
    api_key=os.environ["AAS_STUDIO_KEY"],

    # Self-hosted deployment? Point at your own URL:
    base_url="https://aas.yourcompany.com/api/v1",

    # Default per-call timeout in seconds (per-call override available).
    timeout=60.0,

    # Custom HTTP layer — bring your own `requests`/`httpx` session.
    # Signature: (method, url, headers, body, timeout) -> (status, headers, body_bytes)
    http_client=my_http_client,
)
```

## License

MIT — see [LICENSE](./LICENSE).

## Links

- API docs: <https://aas-studio.eu/docs/api>
- OpenAPI schema: <https://aas-studio.eu/api/v1/openapi.json>
- Issues: <https://github.com/MiguelReisRepo/AAS-Studio/issues>
- Pricing: <https://aas-studio.eu/#pricing>
