Added rest API
This commit is contained in:
parent
e404753714
commit
a26666071a
36
server/api.py
Normal file
36
server/api.py
Normal 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()
|
|
@ -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())
|
||||
}
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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()
|
Loading…
Reference in a new issue