Metadata-Version: 2.5
Name: gapwise
Version: 0.1.0
Summary: Official Python client for the Gapwise public campus API
Project-URL: Documentation, https://docs.gapwise.ca
Project-URL: Repository, https://github.com/andrewmuratov/gapwise
Project-URL: OpenAPI, https://api.gapwise.ca/openapi.json
Author: Gapwise
License-Expression: MIT
License-File: LICENSE
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: httpx<1,>=0.27
Provides-Extra: test
Requires-Dist: black>=25; extra == 'test'
Requires-Dist: build>=1.2; extra == 'test'
Requires-Dist: pytest-asyncio>=0.24; extra == 'test'
Requires-Dist: pytest>=8; extra == 'test'
Requires-Dist: ruff>=0.12; extra == 'test'
Requires-Dist: twine>=5; extra == 'test'
Description-Content-Type: text/markdown

# `gapwise`

Official typed Python client for the unauthenticated Gapwise Public Campus API v1. It supports Python 3.11+ and defaults to `https://api.gapwise.ca/v1`.

```bash
# Not published to PyPI yet. From a checkout of this repository:
python -m pip install './sdk/python'
```

```python
from gapwise import Gapwise

with Gapwise() as gapwise:
    info = gapwise.info()
    mn = gapwise.buildings.get("MN")
    buildings = gapwise.buildings.list(q="instructional", category="academic")
    places = gapwise.places.list(building="HM", kind="library")
    route = gapwise.routes.calculate(from_building="MN", to_building="IB")

    for place in places.items:
        # Unknown is not closed; keep the distinction in your UI.
        print(place["name"], place["availability"]["state"])
```

```python
from gapwise import AsyncGapwise

async with AsyncGapwise() as gapwise:
    places = await gapwise.places.list(open_now="unknown")
```

Lists return a typed immutable `Page` with `items`, `pagination`, `data_version`, and `request_id`. Configure `base_url`, `timeout`, `headers`, or inject an `httpx.Client`/`AsyncClient`. Injected clients are never closed by the SDK.

Structured API failures raise `GapwiseAPIError` with `status_code`, stable `code`, optional `details`, and `request_id`. Network failures and timeouts raise `GapwiseTransportError`; malformed successful responses raise `GapwiseResponseError`.

API v1, campus data versions, and this package version evolve independently. See [`../../docs/DEVELOPER_PLATFORM.md`](../../docs/DEVELOPER_PLATFORM.md) for filtering, uncertainty, privacy, versioning, rate-limit, and migration guidance.
