Provides a platform for automation with code-first approach, with embedded batteries:
It is heavily inspired by node-red and aims to provide same enjoyment during development but without mess of nodes and connections for tasks a little bit more complicated than just hello world.
The platform also tries to be easy in deployment and maintaining. Code could be stored in a SCM (ex: git) and persistent storage is just a single file that could be backed up and restored trivially.
Because memory and CPU consumption relatively low a solution based on the platform could be launched even on Raspberry Pi Zero with 512MB RAM.
pip install binp uvicorn[standard]
Example:
from random import randint
from binp import BINP
binp = BINP()
@binp.app.post('/random', response_model=int)
@binp.journal
async def generate_random():
"""
Generate random number in range 0 ... 1024
"""
return randint(0, 1024)
@binp.action
@binp.journal
async def currency_rate():
"""
Fetch currency rate for EUR -> USD
"""
# go to external service
euro = 1.3
await binp.journal.record('rates fetched', base_currency='USD', euro=euro)
Save as 'example.py' and run it by
uvicorn example:binp.app
TIP: pass
--reload
flag touvicorn
to support automatic reload during development
It will expose
Default configuration can be changed by environment variables:
DEV
- set DEV=true
to enable development modeDB_URL
- database SQLITE URL, default sqlite:///data.db
HTTP port and binding address configured by uvicorn
:
--port
- set listening port, default 8000
--host
- set binding host, default 127.0.0.1
For uvicorn
command should be like
uvicorn <python file without .py>:<binp instance>.app