Metadata-Version: 2.4
Name: datus-semantic-metricflow
Version: 0.2.5
Summary: MetricFlow adapter for Datus semantic layer
Author: Datus Team
Requires-Python: >=3.12
Description-Content-Type: text/markdown
Requires-Dist: pydantic>=2.0.0
Requires-Dist: datus-metricflow>=0.2.4
Requires-Dist: datus-semantic-core>=0.2.0
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
Requires-Dist: black>=23.0.0; extra == "dev"
Requires-Dist: ruff>=0.1.0; extra == "dev"

# datus-semantic-metricflow

MetricFlow adapter for Datus semantic layer.

## Installation

```bash
pip install datus-semantic-metricflow
```

Dependencies (`datus-metricflow`, `pydantic`) will be installed automatically.

## Requirements

- Python >= 3.12

## Quick Start

```python
import asyncio
from datus_semantic_metricflow import MetricFlowAdapter, MetricFlowConfig

config = MetricFlowConfig(
    datasource="my_project",
    config_path="/path/to/metricflow/config",  # optional
)

adapter = MetricFlowAdapter(config)

async def main():
    # List metrics
    metrics = await adapter.list_metrics(limit=10)
    for metric in metrics:
        print(f"{metric.name}: {metric.description}")

    # Get dimensions for a metric
    dimensions = await adapter.get_dimensions("revenue")
    for dim in dimensions:
        print(f"{dim.name}: {dim.description}")

    # Query metrics
    result = await adapter.query_metrics(
        metrics=["revenue", "orders"],
        dimensions=["date", "region"],
        limit=100,
    )
    print(f"Columns: {result.columns}")
    print(f"Data: {result.data[:5]}")

asyncio.run(main())
```

## Configuration

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `datasource` | str | Required | Datasource for this semantic layer instance |
| `config_path` | str | None | Path to MetricFlow configuration file |
| `timeout` | int | 300 | Query timeout in seconds |
| `db_config` | dict | None | Datus datasource config; Snowflake supports password or `private_key_file` / `private_key_file_pwd` plus optional `role` |

## API

- `list_metrics(path=None, limit=100, offset=0)` - List available metrics
- `get_dimensions(metric_name, path=None)` - Get dimensions for a metric
- `query_metrics(metrics, dimensions=[], ...)` - Execute metric queries
- `validate_semantic()` - Validate configuration files

## Development

```bash
pip install -e ".[dev]"
pytest
```
