projects
/
kiosk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix cameras, improve weather, delegate health renderer to a helper,
[kiosk.git]
/
stock_renderer.py
diff --git
a/stock_renderer.py
b/stock_renderer.py
index 2ff6895cbd30d69bb1151c7e99e5d03471fd6aed..a8a1571c10336c11d9e9480e9e8b058c9371baaf 100644
(file)
--- a/
stock_renderer.py
+++ b/
stock_renderer.py
@@
-1,32
+1,40
@@
#!/usr/bin/env python3
#!/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
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__(
"""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:
) -> None:
- super(
stock_quote_renderer, self).__init__(name_to_timeout_dict, False
)
+ super(
).__init__(name_to_timeout_dict
)
self.symbols = symbols
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()
@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
@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",
"""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 = [
) -> Tuple[float, float]:
"""Given the current price, look up opening price and compute delta."""
keys = [
- "open",
"previousClose",
"previousClose",
+ "open",
]
info = ticker.get_info()
for key in keys:
]
info = ticker.get_info()
for key in keys:
@@
-68,17
+76,15
@@
class stock_quote_renderer(renderer.debuggable_abstaining_renderer):
f.write("<TABLE WIDTH=99%>")
symbols_finished = 0
for symbol in self.symbols:
f.write("<TABLE WIDTH=99%>")
symbols_finished = 0
for symbol in self.symbols:
- # print(f"--- Symbol: {symbol} ---")
ticker = yf.Ticker(symbol)
ticker = yf.Ticker(symbol)
- print(type(ticker))
# print(ticker.get_info())
if ticker is None:
# 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:
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
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("</TR>")
f.write("<TR>")
symbols_finished += 1
f.write("</TR>")
f.write("<TR>")
symbols_finished += 1
+ if self.display_subs is not None and symbol in self.display_subs:
+ symbol = self.display_subs[symbol]
f.write(
f"""
<TD WIDTH=20% HEIGHT=150 BGCOLOR="{cell_color}">
<!-- Container -->
<DIV style="position:relative;
height:150px;">
f.write(
f"""
<TD WIDTH=20% HEIGHT=150 BGCOLOR="{cell_color}">
<!-- Container -->
<DIV style="position:relative;
height:150px;">
- <!-- Symbol -->
+ <!-- Symbol
{symbol}
-->
<DIV style="position:absolute;
bottom:50;
right:-20;
<DIV style="position:absolute;
bottom:50;
right:-20;
@@
-125,7
+133,6
@@
class stock_quote_renderer(renderer.debuggable_abstaining_renderer):
f.write("</TR></TABLE>")
return True
f.write("</TR></TABLE>")
return True
-
# Test
# 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)