Source code for i3pystatus.exmo
# -*- coding: utf-8 -*-
import requests
from i3pystatus import IntervalModule, formatp
from i3pystatus.core.util import internet, require, user_open
[docs]class Exmo(IntervalModule):
"""
This module fetching and displays exchange rates with EXMO.
Using API <https://exmo.me/en/api>.
.. rubric:: Available formatters
* {buy_price}
* {status}
* {pair}
"""
settings = (
('format', 'Format string used for output'),
('pair', 'Currency pair for display on output'),
('color', 'Standard color'),
('colorize', 'Enable color change on price increase/decrease'),
('color_up', 'Color for price increases'),
('color_down', 'Color for price decreases'),
('interval', 'Update interval.'),
'status'
)
format = '{buy_price}[ {status}] {pair}'
pair = 'BTC_USD'
color = '#FFFFFF'
colorize = False
color_up = '#00FF00'
color_down = '#FF0000'
interval = 60
status = {
'price_up': '▲',
'price_down': '▼',
}
_prev_price = 0
_prev_status = ''
_prev_color = '#FFFFFF'
def __init__(self, *args, **kwargs):
super(Exmo, self).__init__(*args, **kwargs)
self.on_leftclick = [
'open_something',
'https://exmo.me/ru/trade#?pair={}'.format(self.pair)
]
def fetch_data(self):
response = requests.get('https://api.exmo.com/v1/ticker/')
return response.json()
@require(internet)
def run(self):
try:
price_data = self.fetch_data().get(self.pair)
except Exception as e:
self.output = {
'full_text': 'Failed fetching data from server: ' + str(e),
'color': '#FF0000'
}
return
fdict = {
'pair': self.pair.replace('_', '/'),
'buy_price': price_data.get('buy_price', 0),
'status': ''
}
color = self.color
if self._prev_price and fdict['buy_price'] > self._prev_price:
color = self.color_up
fdict['status'] = self.status['price_up']
elif self._prev_price and fdict['buy_price'] < self._prev_price:
color = self.color_down
fdict['status'] = self.status['price_down']
else:
color = self._prev_color
fdict['status'] = self._prev_status
self._prev_price = price_data.get('buy_price', 0)
self._prev_status = fdict['status']
self._prev_color = color
if not self.colorize:
color = self.color
self.output = {
'full_text': formatp(self.format, **fdict).strip(),
'color': color
}
[docs] def open_something(self, url_or_command):
"""
Wrapper function, to pass the arguments to user_open
"""
user_open(url_or_command)