Metadata-Version: 2.1
Name: faststan
Version: 0.1.2
Summary: Build data streaming pipelines using faststan
Home-page: https://pypi.org/project/faststan/
License: MIT
Author: gcharbon
Author-email: guillaume.charbonnier@capgemini.com
Requires-Python: >=3.7,<4.0
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Requires-Dist: asyncio-nats-client (>=0.10.0,<0.11.0)
Requires-Dist: asyncio-nats-streaming (>=0.4.0,<0.5.0)
Requires-Dist: fastapi (>=0.61.0,<0.62.0)
Requires-Dist: pydantic (>=1.6.1,<2.0.0)
Requires-Dist: uvicorn (>=0.11.8,<0.12.0)
Description-Content-Type: text/markdown

# FastSTAN

Easily deploy NATS Streaming subscribers using Python.

## Features

- Define subscribers using sync and async python functions
- Automatic data parsing and validation using type annotations and pydantic
- Support custom validation using any function
- Allow several subscribers on same channel
- Support all subscription configuration available in stan.py
- Healthcheck available using HTTP GET request to monitor the applications
- (TODO) Metrics available using HTTP GET requests to monitor subsriptions status
- All of FastAPI features

## Quick start

- Install the package from pypi:

```bash
pip install faststan
```

- Create your first subscriber:

```python
from faststan.faststan import FastSTAN

app = FastSTAN()

@app.subscribe("demo")
def on_event(message: str):
    print(f"INFO :: Received new message: {message}")
```

- Start your subscriber:

```bash
uvicorn app:app
```

## Advanced features

### Using error callbacks

```python
from faststan.faststan import FastSTAN


app = FastSTAN()


def handle_error(error):
    print("ERROR: {error}")


@app.subscribe("demo", error_cb=handle_error)
def on_event(message: str):
    print(f"INFO :: Received new message: {message}")
```

### Using pydantic models

You can use pydantic models in order to automatically parse incoming messages:

```python
from pydantic import BaseModel
from faststan.faststan import FastSTAN


class Event(BaseModel):
    timestamp: int
    temperature: float
    humidity: float


app = FastSTAN()


@app.subscribe("event")
def on_event(event):
    msg = f"INFO :: {event.timestamp} :: Temperature: {event.temperature} | Humidity: {event.humidity}"
    print(msg)
```

