72 lines
1.8 KiB
Python
72 lines
1.8 KiB
Python
import requests
|
|
|
|
import logging
|
|
logger = logging.getLogger(__name__)
|
|
|
|
class FetchUpdates:
|
|
"""Fetches updates from the main server and relays them to the clock"""
|
|
|
|
def __init__(self, server_ip, port):
|
|
"""Both methods return a list as python-object. This should be then converted to a numpy array."""
|
|
# self.server_ip = server_ip
|
|
self.base_url = server_ip + ":" + port
|
|
# self.modules gets added through the caller
|
|
self.update_calls = 0
|
|
self.last_fetch = {}
|
|
|
|
|
|
def start(self):
|
|
# dummy for errorless launching
|
|
pass
|
|
|
|
|
|
def get_updates(self):
|
|
update_url = "http://" + self.base_url + "/getupdates"
|
|
result = self.call_api(update_url)
|
|
|
|
return result
|
|
|
|
|
|
def get_last(self):
|
|
update_url = "http://" + self.base_url + "/getlast"
|
|
result = self.call_api(update_url)
|
|
|
|
return result
|
|
|
|
|
|
def fetch_data(self):
|
|
try:
|
|
if self.update_calls == 0:
|
|
fetch = self.get_last()
|
|
else:
|
|
fetch = self.get_updates()
|
|
if not fetch["is_new"]:
|
|
fetch = self.last_fetch
|
|
else:
|
|
self.last_fetch = fetch
|
|
|
|
data = fetch["data"]
|
|
has_queue = fetch["has_queue"]
|
|
except:
|
|
data = {}
|
|
has_queue = False
|
|
|
|
self.update_calls += 1
|
|
|
|
return has_queue, data
|
|
|
|
|
|
|
|
def call_api(self, url):
|
|
ret = {}
|
|
try:
|
|
result = requests.get(url)
|
|
result = result.json()
|
|
|
|
if result.pop("status") == "ok":
|
|
ret = result
|
|
except:
|
|
logger.error("Bad api call for method {}.".format(url[url.rfind("/"):]))
|
|
|
|
return ret
|