Added rest API

This commit is contained in:
Filip Znachor 2022-12-08 15:05:35 +01:00
parent e404753714
commit a26666071a
4 changed files with 58 additions and 4 deletions

36
server/api.py Normal file
View file

@ -0,0 +1,36 @@
from bottle import route, template, error, run, ServerAdapter
from departures import Departure
import threading
class Server(ServerAdapter):
server = None
def run(self, handler):
from wsgiref.simple_server import make_server, WSGIRequestHandler
if self.quiet:
class QuietHandler(WSGIRequestHandler):
def log_request(self, *args, **kw):
pass
self.options['handler_class'] = QuietHandler
self.server = make_server(self.host, self.port, handler, **self.options)
self.server.serve_forever()
def stop(self):
self.server.shutdown()
server = Server(port=8080)
@route('/departures')
def index():
resp = []
for d in Departure.storage:
resp.append(Departure.storage[d].json())
return {'departures': resp}
@error(404)
def error404(error):
return ''
def start():
run(quiet=True, server=server)
thread = threading.Thread(target=start)
thread.start()

View file

@ -91,8 +91,20 @@ class Departure:
self.delay = delay
def get_departure(self):
departure = -round(((datetime.now().timestamp() - (self.departure + self.delay*60))/60)*10)
departure = round(self.get_accurate_departure()*10)
return departure
def get_accurate_departure(self):
return -((datetime.now().timestamp() - (self.departure + self.delay*60))/60)
def __repr__(self):
return f"{self.id}|{self.type}|{self.line}|{self.last_stop}|{self.get_departure()}"
def json(self):
return {
'id': self.id,
'line': self.line,
'type': self.type,
'last_stop': self.last_stop,
'departure': round(self.get_accurate_departure())
}

View file

@ -15,6 +15,7 @@ class LoraController:
def __init__(self):
self.storage = dict()
self.devices = []
# TODO: create separated message pool for each device
self.message_pool = []
self.thread = None

View file

@ -2,7 +2,8 @@ from departures import Departure
from time import sleep
from lora import lora_controller
import threading
from api import server
import sys
class MainLoop:
@ -35,7 +36,11 @@ class MainLoop:
Departure.clear()
sleep(10)
for i in range(10):
sleep(1)
if self.ended:
break
def input_loop(self):
while not self.ended:
@ -56,9 +61,9 @@ class MainLoop:
if command in ["s", "stop"]:
print("Stopping...")
server.stop()
self.ended = True
self.controller.message_pool = []
main_loop = MainLoop("40", lora_controller)
main_loop.input_loop()