Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/federicoceratto/dashing

Terminal dashboards for Python
https://github.com/federicoceratto/dashing

charts dashboard gauges python python3 terminal terminal-based

Last synced: 23 days ago
JSON representation

Terminal dashboards for Python

Awesome Lists containing this project

README

        

image:https://img.shields.io/badge/status-alpha-orange.svg[badge]
image:https://img.shields.io/badge/version-0.1.0-orange.svg[badge]
image:https://img.shields.io/pypi/v/dashing.svg?style=plastic["Latest Version", link="https://pypi.python.org/pypi/dashing"]
image:https://img.shields.io/badge/License-LGPL%20v3-blue.svg[License]
image:https://api.reuse.software/badge/github.com/FedericoCeratto/dashing[REUSE,link="https://api.reuse.software/info/github.com/FedericoCeratto/dashing"]

Dashing is a library to quickly create terminal-based dashboards in Python.

image:https://raw.githubusercontent.com/FedericoCeratto/dashing/gh-pages/tty.gif[Example]

Similar libraries for other languages: https://github.com/gizak/termui[termui] https://github.com/chjj/blessed[blessed] https://github.com/yaronn/blessed-contrib[blessed-contrib]

Features:
- [x] Sub-character resolution (partially filled blocks)
- [x] Horizontal and vertical bars with gradient coloring
- [x] Text and log panes with automated scrolling
- [x] Automatic scaling of all elements
- [x] Vertical and horizontal tile splitting
- [x] Braille-filled charts
- [x] Theming with 24-bit RGB and HSV colors
- [x] Color gradients

=== Dependencies

The link:https://pypi.python.org/pypi/blessed[blessed] library.

=== Installation

Use packages from your Linux distribution, or:

[source,bash]
----
pip install dashing
----

=== Usage

See the documentation at https://dashing.readthedocs.io/en/latest/

.Usage
[source,python]
----
import math
from time import time, sleep

from dashing import (
ColorRangeVGauge,
HBrailleChart,
HChart,
HGauge,
HSplit,
Log,
Text,
VChart,
VGauge,
VSplit,
)

if __name__ == '__main__':

ui = HSplit(
VSplit(
HGauge(val=50, title="only title", border_color=5),
HGauge(label="only label", val=20, border_color=5),
HGauge(label="only label", val=30, border_color=5),
HGauge(label="only label", val=50, border_color=5),
HGauge(label="only label", val=80, border_color=5),
HGauge(val=20),
HGauge(label="label, no border", val=55),
HSplit(
VGauge(val=0, border_color=2),
VGauge(val=5, border_color=2),
VGauge(val=30, border_color=2),
VGauge(val=50, border_color=2),
VGauge(val=80, border_color=2, color=4),
VGauge(val=95, border_color=2, color=3),
ColorRangeVGauge(
val=100,
border_color=2,
colormap=(
(33, 2),
(66, 3),
(100, 1),
)
),
)
),
VSplit(
Text('Hello World,\nthis is dashing.', border_color=2),
Log(title='logs', border_color=5),
VChart(border_color=2, color=2),
HChart(border_color=2, color=2),
HBrailleChart(border_color=2, color=2),
# HBrailleFilledChart(border_color=2, color=2),
),
title='Dashing',
)
log = ui.items[1].items[1]
vchart = ui.items[1].items[2]
hchart = ui.items[1].items[3]
bchart = ui.items[1].items[4]
# bfchart = ui.items[1].items[5]
log.append("0 -----")
log.append("1 Hello")
log.append("2 -----")
prev_time = time()

with open_terminal() as terminal:
for cycle in range(0, 200):
ui.items[0].items[0].value = int(50 + 49.9 * math.sin(cycle / 80.0))
ui.items[0].items[1].value = int(50 + 45 * math.sin(cycle / 20.0))
ui.items[0].items[2].value = int(50 + 45 * math.sin(cycle / 30.0 + 3))

vgauges = ui.items[0].items[-1].items
for gaugenum, vg in enumerate(vgauges):
vg.value = 50 + 49.9 * math.sin(cycle / 12.0 + gaugenum)

t = int(time())
if t != prev_time:
log.append("%s" % t)
prev_time = t
vchart.append(50 + 50 * math.sin(cycle / 16.0))
hchart.append(99.9 * abs(math.sin(cycle / 26.0)))
bchart.append(50 + 50 * math.sin(cycle / 6.0))
# bfchart.append(50 + 50 * math.sin(cycle / 16.0))

ui.display(terminal)

sleep(1.0 / 25)
----