X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=stock_renderer.py;h=a8a1571c10336c11d9e9480e9e8b058c9371baaf;hb=da3a11e9fcea80a7700eb54605512d331a9ec612;hp=2ff6895cbd30d69bb1151c7e99e5d03471fd6aed;hpb=c06bfef53f70551e7920bc4facce27f47b89e2ba;p=kiosk.git diff --git a/stock_renderer.py b/stock_renderer.py index 2ff6895..a8a1571 100644 --- a/stock_renderer.py +++ b/stock_renderer.py @@ -1,32 +1,40 @@ #!/usr/bin/env python3 -from typing import Dict, List, Tuple -import yfinance as yf +import logging +from typing import Dict, List, Optional, Tuple + +import yfinance as yf # type: ignore import file_writer import renderer -class stock_quote_renderer(renderer.debuggable_abstaining_renderer): +logger = logging.getLogger(__file__) + + +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] + self, + name_to_timeout_dict: Dict[str, int], + symbols: List[str], + display_subs: Dict[str, str] = None, ) -> None: - super(stock_quote_renderer, self).__init__(name_to_timeout_dict, False) + super().__init__(name_to_timeout_dict) self.symbols = symbols - - def debug_prefix(self) -> str: - return "stock" + self.display_subs = display_subs @staticmethod def get_ticker_name(ticker: yf.ticker.Ticker) -> str: """Get friendly name of a ticker.""" info = ticker.get_info() - return info["shortName"] + if "shortName" in info: + return info["shortName"] + return ticker @staticmethod - def get_price(ticker: yf.ticker.Ticker) -> float: + def get_price(ticker: yf.ticker.Ticker) -> Optional[float]: """Get most recent price of a ticker.""" keys = [ "bid", @@ -49,8 +57,8 @@ class stock_quote_renderer(renderer.debuggable_abstaining_renderer): ) -> Tuple[float, float]: """Given the current price, look up opening price and compute delta.""" keys = [ - "open", "previousClose", + "open", ] info = ticker.get_info() for key in keys: @@ -68,17 +76,15 @@ class stock_quote_renderer(renderer.debuggable_abstaining_renderer): f.write("") symbols_finished = 0 for symbol in self.symbols: - # print(f"--- Symbol: {symbol} ---") ticker = yf.Ticker(symbol) - print(type(ticker)) # print(ticker.get_info()) if ticker is None: - self.debug_print(f"Unknown symbol {symbol} -- ignored.") + logger.debug(f"Unknown symbol {symbol} -- ignored.") continue name = stock_quote_renderer.get_ticker_name(ticker) price = stock_quote_renderer.get_price(ticker) if price is None: - self.debug_print(f"No price information for {symbol} -- skipped.") + logger.debug(f"No price information for {symbol} -- skipped.") continue (percent_change, delta) = stock_quote_renderer.get_change_and_delta( ticker, price @@ -90,13 +96,15 @@ class stock_quote_renderer(renderer.debuggable_abstaining_renderer): f.write("") f.write("") symbols_finished += 1 + if self.display_subs is not None and symbol in self.display_subs: + symbol = self.display_subs[symbol] f.write( f"""
- +
") return True - # Test -# x = stock_quote_renderer({}, ["MSFT", "GOOG", "GBTC", "OPTAX", "VNQ"]) -# x.periodic_render(None) +#x = stock_quote_renderer({}, ["MSFT", "GOOG", "BTC-USD", "OPTAX", "GC=F", "VNQ"], { "BTC-USD": "BTC", "GC=F": "GOLD" }) +#x.periodic_render(None)