From 63a2881be86befad005dc549975c8a23c42307b4 Mon Sep 17 00:00:00 2001 From: tobi-wan-kenobi Date: Sun, 19 Apr 2020 09:49:06 +0200 Subject: [PATCH] [modules/stock] update to latest API --- modules/contrib/stock.py | 51 ++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/modules/contrib/stock.py b/modules/contrib/stock.py index 5333700..1a4f200 100644 --- a/modules/contrib/stock.py +++ b/modules/contrib/stock.py @@ -11,51 +11,50 @@ Parameters: * stock.change : Should we fetch change in stock value (defaults to True) """ -import bumblebee.input -import bumblebee.output -import bumblebee.engine -import bumblebee.util - import json -import requests +import urllib.request import logging -class Module(bumblebee.engine.Module): - def __init__(self, engine, config): - super(Module, self).__init__(engine, config, - bumblebee.output.Widget(full_text=self.value) - ) - self._symbols = self.parameter('symbols', '') - self._change = bumblebee.util.asbool(self.parameter('change', True)) - self._value = None - self.interval_factor(60) - self.interval(60) +import core.module +import core.widget +import core.decorators + +import util.format + +class Module(core.module.Module): + @core.decorators.every(hours=1) + def __init__(self, config): + super().__init__(config, core.widget.Widget(self.value)) + + self.__symbols = self.parameter('symbols', '') + self.__change = util.format.asbool(self.parameter('change', True)) + self.__value = None def value(self, widget): results = [] - if not self._value: + if not self.__value: return 'n/a' - data = json.loads(self._value) + data = json.loads(self.__value) for symbol in data['quoteResponse']['result']: - valkey = 'regularMarketChange' if self._change else 'regularMarketPrice' - sym = 'n/a' if not 'symbol' in symbol else symbol['symbol'] - currency = 'USD' if not 'currency' in symbol else symbol['currency'] + valkey = 'regularMarketChange' if self.__change else 'regularMarketPrice' + sym = symbol.get('symbol', 'n/a') + currency = symbol.get('currency', 'USD') val = 'n/a' if not valkey in symbol else '{:.2f}'.format(symbol[valkey]) results.append('{} {} {}'.format(sym, val, currency)) return u' '.join(results) def fetch(self): - if self._symbols: + if self.__symbols: url = 'https://query1.finance.yahoo.com/v7/finance/quote?symbols=' - url += self._symbols + '&fields=regularMarketPrice,currency,regularMarketChange' - return requests.get(url).text.strip() + url += self.__symbols + '&fields=regularMarketPrice,currency,regularMarketChange' + return urllib.request.urlopen(url).read().strip() else: logging.error('unable to retrieve stock exchange rate') return None - def update(self, widgets): - self._value = self.fetch() + def update(self): + self.__value = self.fetch() # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4