X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=stock_renderer.py;h=41a56ba650a29a4134d89745b05df5f653e8bf6c;hb=138f8de1ece8b876693d7b8dfc6a139e76aa58b9;hp=60e70432ccbbbfee620119dc32b718d407222da8;hpb=fe0774367d9ee7c7968dbe275cd1c8dfff38f12b;p=kiosk.git diff --git a/stock_renderer.py b/stock_renderer.py index 60e7043..41a56ba 100644 --- a/stock_renderer.py +++ b/stock_renderer.py @@ -19,10 +19,10 @@ class stock_quote_renderer(renderer.abstaining_renderer): """Render the stock prices page.""" def __init__( - self, - name_to_timeout_dict: Dict[str, int], - symbols: List[str], - display_subs: Dict[str, str] = None, + self, + name_to_timeout_dict: Dict[str, int], + symbols: List[str], + display_subs: Dict[str, str] = None, ) -> None: super().__init__(name_to_timeout_dict) self.symbols = symbols @@ -44,7 +44,9 @@ class stock_quote_renderer(renderer.abstaining_renderer): return ticker @staticmethod - def get_item_from_dict(keys: List[str], dictionary: Dict[str, Any]) -> Optional[Any]: + def get_item_from_dict( + keys: List[str], dictionary: Dict[str, Any] + ) -> Optional[Any]: result = None for key in keys: result = dictionary.get(key, None) @@ -57,24 +59,20 @@ class stock_quote_renderer(renderer.abstaining_renderer): # First try fast_info price = stock_quote_renderer.get_item_from_dict( - ['last_price', - 'open', - 'previous_close'], - ticker.fast_info) + ["last_price", "open", "previous_close"], ticker.fast_info + ) if price: return price # Next try info price = stock_quote_renderer.get_item_from_dict( - ['bid', - 'ask', - 'lastMarket'], - self.cache_info(ticker)) + ["bid", "ask", "lastMarket"], self.cache_info(ticker) + ) if price: return price # Finally, fall back on history - hist = ticker.history(period="1d").to_dict()['Close'] + hist = ticker.history(period="1d").to_dict()["Close"] latest = None latest_price = None for k, v in hist.items(): @@ -88,20 +86,20 @@ class stock_quote_renderer(renderer.abstaining_renderer): @staticmethod def make_chart(symbol: str, ticker: yf.Ticker, period: str) -> str: - base_filename = f'stock_chart_{symbol}.png' + base_filename = f"stock_chart_{symbol}.png" output_filename = os.path.join(kiosk_constants.pages_dir, base_filename) transparent = go.Layout( - paper_bgcolor='rgba(0,0,0,0)', - plot_bgcolor='rgba(0,0,0,0)', + paper_bgcolor="rgba(0,0,0,0)", + plot_bgcolor="rgba(0,0,0,0)", xaxis_rangeslider_visible=False, ) hist = ticker.history(period=period, interval="1wk") chart = go.Figure( data=go.Candlestick( - open=hist['Open'], - high=hist['High'], - low=hist['Low'], - close=hist['Close'], + open=hist["Open"], + high=hist["High"], + low=hist["Low"], + close=hist["Close"], ), layout=transparent, ) @@ -111,28 +109,22 @@ class stock_quote_renderer(renderer.abstaining_renderer): print(f"Write {output_filename}...") return base_filename - def get_last_close( - self, - ticker: yf.Ticker - ) -> float: + def get_last_close(self, ticker: yf.Ticker) -> float: last_close = stock_quote_renderer.get_item_from_dict( - ['previous_close', - 'open'], - ticker.fast_info) + ["previous_close", "open"], ticker.fast_info + ) if last_close: return last_close last_close = stock_quote_renderer.get_item_from_dict( - ['preMarketPrice'], - self.cache_info(ticker)) + ["preMarketPrice"], self.cache_info(ticker) + ) if last_close: return last_close return self.get_price(ticker) def get_change_and_delta( - self, - ticker: yf.Ticker, - price: float + self, ticker: yf.Ticker, price: float ) -> Tuple[float, float]: """Given the current price, look up opening price and compute delta.""" last_price = self.get_last_close(ticker) @@ -152,15 +144,13 @@ class stock_quote_renderer(renderer.abstaining_renderer): continue name = self.get_ticker_name(ticker) if name is None: - logger.debug(f'Bad name for {symbol} -- skipped.') + logger.debug(f"Bad name for {symbol} -- skipped.") continue price = self.get_price(ticker) if price is None: logger.debug(f"No price information for {symbol} -- skipped.") continue - (percent_change, delta) = self.get_change_and_delta( - ticker, price - ) + (percent_change, delta) = self.get_change_and_delta(ticker, price) chart_filename = stock_quote_renderer.make_chart(symbol, ticker, "1y") print(f"delta: {delta}, change: {percent_change}") if percent_change < 0: @@ -213,6 +203,7 @@ class stock_quote_renderer(renderer.abstaining_renderer): f.write("") return True + # Test -x = stock_quote_renderer({}, ["MSFT", "GOOG", "BTC-USD", "ABHYX", "GC=F", "VNQ"], { "BTC-USD": "BTC", "GC=F": "GOLD" }) -x.periodic_render(None) +# x = stock_quote_renderer({}, ["MSFT", "GOOG", "BTC-USD", "ABHYX", "GC=F", "VNQ"], { "BTC-USD": "BTC", "GC=F": "GOLD" }) +# x.periodic_render(None)