Metadata-Version: 2.4
Name: uais-lib
Version: 0.2.0
Summary: UAIS paylaşılan kütüphane — Stripe billing + Workspace + Auth wrapper'ları
Project-URL: Homepage, https://github.com/mehmetulutug/uais-lib
Project-URL: Repository, https://github.com/mehmetulutug/uais-lib
Project-URL: Issues, https://github.com/mehmetulutug/uais-lib/issues
Author-email: Mehmet Ulutuğ <mehmet@uais.ai>
License: Proprietary
Keywords: billing,stripe,uais,workspace
Classifier: Development Status :: 3 - Alpha
Classifier: License :: Other/Proprietary License
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.12
Requires-Dist: httpx>=0.27
Requires-Dist: pydantic>=2.7
Requires-Dist: python-jose[cryptography]>=3.3.0
Requires-Dist: redis>=5.0
Requires-Dist: sqlalchemy>=2.0
Requires-Dist: stripe<13.0,>=11.0
Requires-Dist: structlog>=24.1
Requires-Dist: tenacity>=8.5
Provides-Extra: dev
Requires-Dist: mypy>=1.10; extra == 'dev'
Requires-Dist: ruff>=0.5; extra == 'dev'
Provides-Extra: observability
Requires-Dist: prometheus-client>=0.20; extra == 'observability'
Provides-Extra: test
Requires-Dist: fakeredis>=2.23; extra == 'test'
Requires-Dist: prometheus-client>=0.20; extra == 'test'
Requires-Dist: pytest-asyncio>=0.23; extra == 'test'
Requires-Dist: pytest-cov>=5.0; extra == 'test'
Requires-Dist: pytest>=8.0; extra == 'test'
Requires-Dist: respx>=0.21; extra == 'test'
Description-Content-Type: text/markdown

# `uais-lib` (Python)

PyPI paketi: `uais-lib`
Modül: `uais_lib`

UAIS ekosisteminin Python backend ortak katmanı. Studio, VIP, WAI, Content (kısmi) bu paketi import eder.

---

## Kurulum (Phase 1 başında geçerli)

```bash
# Tüketici proje pyproject.toml
[project]
dependencies = [
    "uais-lib==0.1.0",   # production: exact pin
]
```

veya geliştirme için:

```bash
pip install uais-lib
# ya da
uv add uais-lib
```

---

## Sub-modüller

| Modül | İçerik | Phase |
|---|---|---|
| [`auth/`](src/uais_lib/auth/) | Zitadel OIDC, JWT, API key | 1 |
| [`billing/`](src/uais_lib/billing/) | Stripe Customer + Subscription + Metered + Webhook | 1 |
| [`db/`](src/uais_lib/db/) | SQLAlchemy + CNPG + RLS | 1 |
| [`queue/`](src/uais_lib/queue/) | NATS JetStream producer + consumer | 1 |
| [`storage/`](src/uais_lib/storage/) | MinIO presigned URL (workspace-scoped) | 1 |
| [`workspace/`](src/uais_lib/workspace/) | Workspace + Member + Tier + Quota + Guard | 1 |
| [`audit/`](src/uais_lib/audit/) | Append-only audit log writer | 1 |
| [`webhooks/`](src/uais_lib/webhooks/) | HMAC sign/verify + idempotency + replay protect | 1 |
| [`errors/`](src/uais_lib/errors/) | `UaisError` + alt sınıflar | 1 |
| [`observability/`](src/uais_lib/observability/) | Prometheus + Loki helpers | 1 |
| [`personas/`](src/uais_lib/personas/) | Karakter persona profilleri (Sermin, Marcus, …) | 2 |
| [`testing/`](src/uais_lib/testing/) | pytest fixtures (mock_stripe, mock_zitadel, mock_nats) | 1 |

---

## Geliştirme (Phase 1 başında geçerli)

```bash
cd python/
uv sync
uv run pytest
uv run ruff check
uv run mypy src/
```

> Phase 0'da kod yok. Phase 1 başında `pyproject.toml.example` → `pyproject.toml` rename + içerik doldurulur.

---

## Test

- Unit testler `tests/` altında, modül-paralel yapı (`tests/billing/test_stripe_client.py`)
- Fixture'lar `uais_lib.testing` modülünde (tüketici de import edip kullanabilir)
- Coverage hedefi: %80+
- CI matrix: Python 3.12 + 3.13, OS Ubuntu

---

## Yayın

`uv build` ile wheel + sdist oluşur. GitHub Actions tag (`v0.x.x`) basıldığında PyPI'ya push eder.

---

## Tüketici örneği

```python
from uais_lib.auth import require_workspace
from uais_lib.billing import StripeClient
from uais_lib.workspace import WorkspaceGuard, QuotaError

stripe = StripeClient(api_key=settings.STRIPE_KEY)
guard = WorkspaceGuard(db=session, redis=redis)

@router.post("/api/v1/jobs")
async def create_job(workspace = Depends(require_workspace)):
    try:
        await guard.consume(workspace, kind="image_gen", count=1)
    except QuotaError:
        raise HTTPException(402)
    # ... job submit
```
