Metadata-Version: 2.4
Name: cosmos-hub-pipelines-core
Version: 0.0.2a1
Summary: Cosmos Hub Pipelines - Core utilities
Author-email: Your Name <alexander@cosmosid.com>
License-Expression: LicenseRef-CosmosID-Proprietary
Project-URL: Repository, https://dev.azure.com/cosmosid/cosmos-hub/_git/cosmos-hub-pipelines-core
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: cosmos-hub>=0.0.1
Requires-Dist: httpx>=0.27
Requires-Dist: pydantic>=2
Requires-Dist: python-dateutil>=2.8
Dynamic: license-file

# cosmos-hub-pipelines-core

Cosmos Hub Pipelines - Core utilities.

## Installation

```bash
pip install cosmos-hub-pipelines-core
```

## Quick Start

```python
from cosmos_hub.pipelines.core import ...
```

## Development

```bash
uv sync
uv run pytest      # runs with coverage, gated at 80% (excludes _generated/)
uv run ruff check .
uv run ruff format .
```

Tests use `pytest-httpx` to mock the wire (never a real network call) and
`pytest-asyncio` for the couple of tests that exercise a generated service's
raw async client directly. Coverage is measured only over hand-written code
(`auth.py`, `client.py`, `settings.py`, `__init__.py`) — `_generated/` is
excluded since it's vendor code we don't maintain.

## Regenerating the API clients

Each file in `specs/` is an OpenAPI 3 spec for one CosmosID SaaS microservice. Every
spec is generated independently into its own submodule under
`src/cosmos_hub/pipelines/core/_generated/<service>/` using the
[OpenAPI Generator](https://openapi-generator.tech) `python` generator with the
`httpx` library — never hand-edit anything under `_generated/`, it is wholesale
replaced on every run.

```bash
docker pull openapitools/openapi-generator-cli:v7.24.0   # one-time
python scripts/generate_clients.py                        # regenerate everything
python scripts/generate_clients.py admin charge            # regenerate just these
```

To onboard a new service, drop its spec as `specs/<service>_api.{json,yaml}` and rerun
the script — the submodule name and package path are derived automatically from the
filename.

## License

CosmosID SaaS API Client License. Use of this software is licensed, not sold, for the purpose of interoperating with CosmosID's SaaS platform — see [LICENSE](./LICENSE) for full terms. Modification and redistribution are not permitted without CosmosID's written consent.
