[modules/currency] Enable base and symbol configuration
The "base" currency can now be configured using the parameter "source", and the "symbols" to be resolved can be configured using the parameter "destination", which is a comma-separated list. see #169
This commit is contained in:
parent
b4dcfb792c
commit
bf53c5912c
1 changed files with 26 additions and 22 deletions
|
@ -8,6 +8,10 @@ Requires the following python packages:
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
* currency.interval: Interval in minutes between updates, default is 1.
|
* currency.interval: Interval in minutes between updates, default is 1.
|
||||||
|
* currency.source: Source currency (defaults to "GBP")
|
||||||
|
* currency.destination: Comma-separated list of destination currencies (defaults to "USD,EUR")
|
||||||
|
|
||||||
|
Note: source and destination names right now must correspond to the names used by the API of http://fixer.io
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import bumblebee.input
|
import bumblebee.input
|
||||||
|
@ -21,40 +25,40 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
SYMBOL = {
|
||||||
|
"GBP": u"£", "EUR": u"€", "USD": u"$"
|
||||||
|
}
|
||||||
|
|
||||||
class Module(bumblebee.engine.Module):
|
class Module(bumblebee.engine.Module):
|
||||||
def __init__(self, engine, config):
|
def __init__(self, engine, config):
|
||||||
super(Module, self).__init__(engine, config,
|
super(Module, self).__init__(engine, config,
|
||||||
bumblebee.output.Widget(full_text=self.price)
|
bumblebee.output.Widget(full_text=self.price)
|
||||||
)
|
)
|
||||||
self._price = "-"
|
self._data = {}
|
||||||
self._interval = int(self.parameter("interval", "1"))
|
self._interval = int(self.parameter("interval", 1))
|
||||||
|
self._base = self.parameter("source", "GBP")
|
||||||
|
self._symbols = self.parameter("destination", "USD,EUR")
|
||||||
self._nextcheck = 0
|
self._nextcheck = 0
|
||||||
self._valid = False
|
|
||||||
|
|
||||||
def price(self, widget):
|
def price(self, widget):
|
||||||
if not self._valid:
|
if self._data == {}:
|
||||||
return u"?"
|
return "?"
|
||||||
return self._price
|
|
||||||
|
rates = []
|
||||||
|
for sym in self._data["rates"]:
|
||||||
|
rates.append(u"{}{}".format(self._data["rates"][sym], SYMBOL[sym] if sym in SYMBOL else sym))
|
||||||
|
|
||||||
|
return u"{}: {}".format(SYMBOL[self._base] if self._base in SYMBOL else self._base, u"/".join(rates))
|
||||||
|
|
||||||
def update(self, widgets):
|
def update(self, widgets):
|
||||||
timestamp = int(time.time())
|
timestamp = int(time.time())
|
||||||
if self._nextcheck < int(time.time()):
|
if self._nextcheck < int(time.time()):
|
||||||
try:
|
self._data = {}
|
||||||
self._nextcheck = int(time.time()) + self._interval*60
|
self._nextcheck = int(time.time()) + self._interval*60
|
||||||
price_url = "http://api.fixer.io/latest?symbols=USD,EUR&base=GBP"
|
url = "http://api.fixer.io/latest?symbols={}&base={}".format(self._symbols, self._base)
|
||||||
try:
|
try:
|
||||||
price_json = json.loads( requests.get(price_url).text )
|
self._data = json.loads(requests.get(url).text)
|
||||||
gbpeur = str(price_json['rates']['EUR'])
|
except Exception:
|
||||||
gbpusd = str(price_json['rates']['USD'])
|
pass
|
||||||
except ValueError:
|
|
||||||
gbpeur = "-"
|
|
||||||
gbpusd = "-"
|
|
||||||
|
|
||||||
self._price = u"£/€ " + gbpeur + u" | £/$ " + gbpusd
|
|
||||||
self._valid = True
|
|
||||||
except RequestException:
|
|
||||||
self._price = u"£/€ - | £/$ -"
|
|
||||||
self._valid = True
|
|
||||||
|
|
||||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue