Metadata-Version: 2.4
Name: mons-app
Version: 0.1.0
Summary: Системные сервисы mons для бэкенда приложения
Author: worldz
License: MIT
Project-URL: Homepage, https://github.com/worldz/mons-station-services
Project-URL: Issues, https://github.com/worldz/mons-station-services/issues
Keywords: mons,iot,raspberry-pi,kiosk,widgets
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: POSIX :: Linux
Classifier: Topic :: Home Automation
Classifier: Intended Audience :: Developers
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# mons-app

Системные сервисы [mons](https://github.com/worldz/mons) для бэкенда
приложения: хранилище, виджеты, уведомления, http-сервер с маршрутами и
фоновые задачи. Только стандартная библиотека.

```bash
pip install mons-app
```

```python
from mons_app import App

app = App()

@app.route("/api/stats")
def stats(request):
    return {"temp": 42.0}                 # уйдёт как JSON

@app.route("/api/items/{id}", method="POST")
def create(request):
    return 201, {"id": request.params["id"], "body": request.body}

def widget(mons):                          # фоновая задача
    mons.progress(0.42, title="Диск", hint="свободно 12 ГБ")

if __name__ == "__main__":
    app.every(60, widget)
    app.serve()                            # порт из PORT, слушаем только петлю
```

Ядро запускает бэкенд и кладёт в окружение `PORT`, `MONS_APP_DIR` и
`MONS_CORE` — библиотека берёт всё оттуда, настраивать нечего.

## Client

Если http-сервер не нужен, доступен только клиент:

```python
from mons_app import Client

mons = Client()
mons.save("deadline", 1700000000000)
mons.countdown(1700000000000, title="Таймер")
mons.notify("резервная копия готова")
```

Сетевые ошибки наружу не выпускаются: виджет или сохранение — побочный эффект,
из-за которого фоновая работа не должна падать. Что не сложилось, видно в
журнале ядра.

MIT
