add controller options to allow multiple routes per controller
This commit is contained in:
@ -3,9 +3,10 @@ from datetime import datetime
|
||||
|
||||
|
||||
class Controller(ABC):
|
||||
def __init__(self, handler, request):
|
||||
def __init__(self, handler, request, options):
|
||||
self.handler = handler
|
||||
self.request = request
|
||||
self.options = options
|
||||
|
||||
def send_response(self, content, code=200, content_type="text/html", last_modified: datetime = None, max_age=None):
|
||||
self.handler.send_response(code)
|
||||
@ -20,6 +21,8 @@ class Controller(ABC):
|
||||
content = content.encode()
|
||||
self.handler.wfile.write(content)
|
||||
|
||||
@abstractmethod
|
||||
def handle_request(self):
|
||||
pass
|
||||
action = "indexAction"
|
||||
if "action" in self.options:
|
||||
action = self.options["action"]
|
||||
getattr(self, action)()
|
||||
|
@ -4,6 +4,6 @@ import json
|
||||
|
||||
|
||||
class ApiController(Controller):
|
||||
def handle_request(self):
|
||||
def indexAction(self):
|
||||
data = json.dumps(FeatureDetector().feature_report())
|
||||
self.send_response(data, content_type="application/json")
|
||||
|
@ -35,7 +35,7 @@ class AssetsController(Controller):
|
||||
except FileNotFoundError:
|
||||
self.send_response("file not found", code=404)
|
||||
|
||||
def handle_request(self):
|
||||
def indexAction(self):
|
||||
filename = self.request.matches.group(1)
|
||||
self.serve_file(filename)
|
||||
|
||||
|
@ -4,6 +4,6 @@ import json
|
||||
|
||||
|
||||
class MetricsController(Controller):
|
||||
def handle_request(self):
|
||||
def indexAction(self):
|
||||
data = json.dumps(Metrics.getSharedInstance().getMetrics())
|
||||
self.send_response(data, content_type="application/json")
|
||||
|
@ -8,7 +8,7 @@ import json
|
||||
|
||||
|
||||
class StatusController(Controller):
|
||||
def handle_request(self):
|
||||
def indexAction(self):
|
||||
pm = PropertyManager.getSharedInstance()
|
||||
# TODO keys that have been left out since they are no longer simple strings: sdr_hw, bands, antenna
|
||||
vars = {
|
||||
@ -25,8 +25,6 @@ class StatusController(Controller):
|
||||
}
|
||||
self.send_response("\n".join(["{key}={value}".format(key=key, value=value) for key, value in vars.items()]))
|
||||
|
||||
|
||||
class StatusJsonController(Controller):
|
||||
def getProfileStats(self, profile):
|
||||
return {
|
||||
"name": profile["name"],
|
||||
@ -43,7 +41,7 @@ class StatusJsonController(Controller):
|
||||
}
|
||||
return stats
|
||||
|
||||
def handle_request(self):
|
||||
def jsonAction(self):
|
||||
pm = PropertyManager.getSharedInstance()
|
||||
|
||||
gps = pm["receiver_gps"]
|
||||
|
@ -25,16 +25,16 @@ class WebpageController(TemplateController, metaclass=ABCMeta):
|
||||
|
||||
|
||||
class IndexController(WebpageController):
|
||||
def handle_request(self):
|
||||
def indexAction(self):
|
||||
self.serve_template("index.html", **self.template_variables())
|
||||
|
||||
|
||||
class MapController(WebpageController):
|
||||
def handle_request(self):
|
||||
def indexAction(self):
|
||||
# TODO check if we have a google maps api key first?
|
||||
self.serve_template("map.html", **self.template_variables())
|
||||
|
||||
|
||||
class FeatureController(WebpageController):
|
||||
def handle_request(self):
|
||||
def indexAction(self):
|
||||
self.serve_template("features.html", **self.template_variables())
|
||||
|
@ -4,7 +4,7 @@ from owrx.connection import WebSocketMessageHandler
|
||||
|
||||
|
||||
class WebSocketController(Controller):
|
||||
def handle_request(self):
|
||||
def indexAction(self):
|
||||
conn = WebSocketConnection(self.handler, WebSocketMessageHandler())
|
||||
# enter read loop
|
||||
conn.handle()
|
||||
|
Reference in New Issue
Block a user