Metadata-Version: 2.4
Name: observr
Version: 0.2.0
Summary: Zero-config observability with structured output for AI agents
Project-URL: Homepage, https://github.com/ydking0911/observr
Project-URL: Repository, https://github.com/ydking0911/observr
Project-URL: Issues, https://github.com/ydking0911/observr/issues
License: MIT
Keywords: ai,devtools,logging,observability,tracing
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Debuggers
Requires-Python: >=3.10
Provides-Extra: dev
Requires-Dist: django>=4.2; extra == 'dev'
Requires-Dist: fastapi>=0.110; extra == 'dev'
Requires-Dist: flask>=2.0; extra == 'dev'
Requires-Dist: httpx>=0.27; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: uvicorn>=0.29; extra == 'dev'
Provides-Extra: django
Requires-Dist: django>=4.2; extra == 'django'
Provides-Extra: fastapi
Requires-Dist: fastapi>=0.110; extra == 'fastapi'
Requires-Dist: starlette>=0.36; extra == 'fastapi'
Provides-Extra: flask
Requires-Dist: flask>=2.0; extra == 'flask'
Description-Content-Type: text/markdown

# observr — Python SDK

Zero-config observability for Python services. One line to start tracing.

```python
import observr
observr.init(service="my-api")  # HTTP tracing + logs + dashboard. Done.
```

## Install

```bash
pip install observr
```

## Quickstart

**Flask**
```python
import observr
from flask import Flask

observr.init(service="my-api")
app = Flask(__name__)
```

**FastAPI**
```python
import observr
from fastapi import FastAPI

observr.init(service="my-api")
app = FastAPI()
```

**Manual spans**
```python
with observr.get_client().span("db.query", table="users") as span:
    rows = db.execute("SELECT ...")
    span.set_attribute("row_count", len(rows))
```

## Configuration

```python
observr.init(
    service="my-api",           # Service name shown in dashboard
    collector_url="http://localhost:7676",  # observrd collector URL
    auto_instrument=True,       # Auto-detect Flask / FastAPI
    log_level="DEBUG",          # Minimum log level to capture
)
```

## Links

- [GitHub](https://github.com/ydking0911/observr)
- [Dashboard & collector](https://github.com/ydking0911/observr/tree/main/server)
