General Viewer
Project description
# General Viewer (GViewer)
[![Build Status](https://travis-ci.org/chhsiao90/gviewer.svg?branch=master)](https://travis-ci.org/chhsiao90/gviewer)
[![Coverage Status](https://coveralls.io/repos/github/chhsiao90/gviewer/badge.svg?branch=master)](https://coveralls.io/github/chhsiao90/gviewer?branch=master)
**Simple, Light Weight, Powerful**
GViewer is a terminal UI library that depends on [urwid](https://github.com/urwid/urwid) simplified writing a tui based reporting system.
You could write a powerful terminal UI that display and operate with data as you want with just less and less code.
## Installation
```shell
pip install gviewer
```
## Run Example
There are some example in examples that provide some use cases.
You could see and run the examples.
```shell
python examples/panama.py
```
## Usage
### Data Store
####StaticDataStore
Used for static data list, like log file
Initiate with a list of eny type of content
The content will transfer to the your defined displayer later for display
```python
from gviewer import StaticDataStore
data_store = StaticDataStore(data)
```
#### AsyncDataStore
Used for asynchronous data list, like subscribe an [zeromq](http://zeromq.org/) publisher
```python
def register_func(on_message):
some_listener.on_message(on_message)
data_store = AsyncDataStore(register_func)
```
### Displayer
Defined how you display your data from Data Store to summary/details
```python
from gviewer import BaseDisplayer, View, Group, PropsGroup, Text, Prop
class MyDisplayer(BaseDisplayer):
def to_summary(self, message):
"""
return a str or text markup
reference: http://urwid.org/manual/displayattributes.html#text-markup
"""
return message["summary"]
def get_views(self):
"""return an array of tuple that contains view title and a function that transform message to detail"""
return [
("view1", self.view1),
("view2", self.view2),
]
def view1(self, message):
"""return groups"""
return View(
[Group("title", [Text(m) for m in message["view1"]])]
)
def view2(self, message):
"""return groups"""
return View(
[PropsGroup("title", [Prop(p[0], p[1]) for p in message["view2"]])]
)
```
### GViewer
Main class to start the tui
The constructor accept any of urwid.MainLoop arguments to intiate with custom config
```python
from gviewer import GViewer, DisplayerContext
context = DisplayerContext(data_store, displayer)
viewer = GViewer(context)
viewer.start()
```
## Advanced Usage
### Summary Actions
Bind function to specific key to apply customize action, ex: export
```python
from gviewer import GViewer, DisplayerContext
def custom_export(controller, message, widget, *args, **kwargs):
with open("export", "w") as f:
f.write(str(message))
controller.notify("file is export")
context = DisplayerContext(data_store, displayer, actions=Actions([("a", "Custom export", custom_export)]))
viewer = GViewer(context)
```
### View Actions
Bind function to specific key to apply customize action, ex: export
```python
from gviewer import View, BaseDisplayer
class MyDisplayer(BaseDisplayer):
def get_views(self):
return [("view", self.view)]
def view(self, message):
return View([], actions=Actions([("a", "Custom export", self.custom_export)]))
def custom_export(controller, message, *args, **kwargs):
with open("export", "w") as f:
f.write(str(message))
controller.notify("file is export")
```
## Built-in actions
### Summary
- /: search
- g: top
- G: bottom
- x: clear current item
- X: clear all items
- q: quit
- ?: help
### Detail
- /: search
- tab: next view
- shift+tab: prev view
- n: search next result
- N: search previous result
- e: export current content to file
- q: quit
- ?: help
## Contribution
Please feel free to create issue or create PR
[![Build Status](https://travis-ci.org/chhsiao90/gviewer.svg?branch=master)](https://travis-ci.org/chhsiao90/gviewer)
[![Coverage Status](https://coveralls.io/repos/github/chhsiao90/gviewer/badge.svg?branch=master)](https://coveralls.io/github/chhsiao90/gviewer?branch=master)
**Simple, Light Weight, Powerful**
GViewer is a terminal UI library that depends on [urwid](https://github.com/urwid/urwid) simplified writing a tui based reporting system.
You could write a powerful terminal UI that display and operate with data as you want with just less and less code.
## Installation
```shell
pip install gviewer
```
## Run Example
There are some example in examples that provide some use cases.
You could see and run the examples.
```shell
python examples/panama.py
```
## Usage
### Data Store
####StaticDataStore
Used for static data list, like log file
Initiate with a list of eny type of content
The content will transfer to the your defined displayer later for display
```python
from gviewer import StaticDataStore
data_store = StaticDataStore(data)
```
#### AsyncDataStore
Used for asynchronous data list, like subscribe an [zeromq](http://zeromq.org/) publisher
```python
def register_func(on_message):
some_listener.on_message(on_message)
data_store = AsyncDataStore(register_func)
```
### Displayer
Defined how you display your data from Data Store to summary/details
```python
from gviewer import BaseDisplayer, View, Group, PropsGroup, Text, Prop
class MyDisplayer(BaseDisplayer):
def to_summary(self, message):
"""
return a str or text markup
reference: http://urwid.org/manual/displayattributes.html#text-markup
"""
return message["summary"]
def get_views(self):
"""return an array of tuple that contains view title and a function that transform message to detail"""
return [
("view1", self.view1),
("view2", self.view2),
]
def view1(self, message):
"""return groups"""
return View(
[Group("title", [Text(m) for m in message["view1"]])]
)
def view2(self, message):
"""return groups"""
return View(
[PropsGroup("title", [Prop(p[0], p[1]) for p in message["view2"]])]
)
```
### GViewer
Main class to start the tui
The constructor accept any of urwid.MainLoop arguments to intiate with custom config
```python
from gviewer import GViewer, DisplayerContext
context = DisplayerContext(data_store, displayer)
viewer = GViewer(context)
viewer.start()
```
## Advanced Usage
### Summary Actions
Bind function to specific key to apply customize action, ex: export
```python
from gviewer import GViewer, DisplayerContext
def custom_export(controller, message, widget, *args, **kwargs):
with open("export", "w") as f:
f.write(str(message))
controller.notify("file is export")
context = DisplayerContext(data_store, displayer, actions=Actions([("a", "Custom export", custom_export)]))
viewer = GViewer(context)
```
### View Actions
Bind function to specific key to apply customize action, ex: export
```python
from gviewer import View, BaseDisplayer
class MyDisplayer(BaseDisplayer):
def get_views(self):
return [("view", self.view)]
def view(self, message):
return View([], actions=Actions([("a", "Custom export", self.custom_export)]))
def custom_export(controller, message, *args, **kwargs):
with open("export", "w") as f:
f.write(str(message))
controller.notify("file is export")
```
## Built-in actions
### Summary
- /: search
- g: top
- G: bottom
- x: clear current item
- X: clear all items
- q: quit
- ?: help
### Detail
- /: search
- tab: next view
- shift+tab: prev view
- n: search next result
- N: search previous result
- e: export current content to file
- q: quit
- ?: help
## Contribution
Please feel free to create issue or create PR
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
gviewer-3.0.6.tar.gz
(22.6 kB
view details)
Built Distribution
gviewer-3.0.6-py2-none-any.whl
(37.1 kB
view details)
File details
Details for the file gviewer-3.0.6.tar.gz
.
File metadata
- Download URL: gviewer-3.0.6.tar.gz
- Upload date:
- Size: 22.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ac0b059f8b8406c32108287d61dd53bedeb0d33e31614ca7bbc845b803c333a4 |
|
MD5 | eb0f20f6b0dcca2ae3551b99f99a365f |
|
BLAKE2b-256 | 1b94d8ed9d1329a285ce362c5294c9ebf1c3efdeeb99f651688156836e6c29d6 |
File details
Details for the file gviewer-3.0.6-py2-none-any.whl
.
File metadata
- Download URL: gviewer-3.0.6-py2-none-any.whl
- Upload date:
- Size: 37.1 kB
- Tags: Python 2
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 58c871486ec10cf28a7017a8cbff2bf5b597f2804cafd2ebe342cc1c29c32a79 |
|
MD5 | 639dc07ae2deca71e1cbf509e8837d86 |
|
BLAKE2b-256 | e9cdbf9d66080937ad4aeae5b4eb2704521a3bd29e92627bde6e691e7fb5bcc0 |