Working plugin pulled from aprsd itself.

This is the initial commit of the working yahoo finance stock
quotes plugin.   This was removed from APRSD itself to help
with the APRSD requirements.
This commit is contained in:
Hemna 2021-11-09 14:43:31 -05:00
parent 0e1ac06fb8
commit a226f0486f
5 changed files with 71 additions and 57 deletions

1
AUTHORS Normal file
View File

@ -0,0 +1 @@
Hemna <waboring@hemna.com>

7
ChangeLog Normal file
View File

@ -0,0 +1,7 @@
CHANGES
=======
v0.1.0
------
* Initial commit

View File

@ -1,56 +0,0 @@
import logging
from aprsd import messaging, plugin, trace
import aprsd_stock_plugin
LOG = logging.getLogger("APRSD")
class YahooStockQuote(plugin.APRSDRegexCommandPluginBase):
version = aprsd_stock_plugin.__version__
# Look for any command that starts with w or W
command_regex = "^[wW]"
# the command is for ?
command_name = "weather"
enabled = False
def setup(self):
# Do some checks here?
self.enabled = True
def create_threads(self):
"""This allows you to create and return a custom APRSDThread object.
Create a child of the aprsd.threads.APRSDThread object and return it
It will automatically get started.
You can see an example of one here:
https://github.com/craigerl/aprsd/blob/master/aprsd/threads.py#L141
"""
if self.enabled:
# You can create a background APRSDThread object here
# Just return it for example:
# https://github.com/hemna/aprsd-weewx-plugin/blob/master/aprsd_weewx_plugin/aprsd_weewx_plugin.py#L42-L50
#
return []
@trace.trace
def process(self, packet):
"""This is called when a received packet matches self.command_regex."""
LOG.info("YahooStockQuote Plugin")
packet.get("from")
packet.get("message_text", None)
if self.enabled:
# Now we can process
return "some reply message"
else:
LOG.warning("YahooStockQuote is disabled.")
return messaging.NULL_MESSAGE

View File

@ -0,0 +1,61 @@
import logging
import re
import yfinance as yf
from aprsd import plugin, trace
import aprsd_stock_plugin
LOG = logging.getLogger("APRSD")
class YahooStockQuote(plugin.APRSDRegexCommandPluginBase):
version = aprsd_stock_plugin.__version__
# Look for any command that starts with s or S
command_regex = "^[sS]"
# the command is for ?
command_name = "stock"
enabled = False
def setup(self):
# Do some checks here?
self.enabled = True
@trace.trace
def process(self, packet):
LOG.info(self.__class__.__name__)
# fromcall = packet.get("from")
message = packet.get("message_text", None)
# ack = packet.get("msgNo", "0")
a = re.search(r"^.*\s+(.*)", message)
if a is not None:
searchcall = a.group(1)
stock_symbol = searchcall.upper()
else:
reply = "No stock symbol"
return reply
LOG.info(f"Fetch stock quote for '{stock_symbol}'")
try:
stock = yf.Ticker(stock_symbol)
reply = "{} - ask: {} high: {} low: {}".format(
stock_symbol,
stock.info["ask"],
stock.info["dayHigh"],
stock.info["dayLow"],
)
except Exception as e:
LOG.error(
f"Failed to fetch stock '{stock_symbol}' from yahoo '{e}'",
)
reply = f"Failed to fetch stock '{stock_symbol}'"
return reply.rstrip()

View File

@ -1,2 +1,3 @@
pbr
aprsd>=2.2.0
aprsd>=2.4.0
yfinance