add some caching for static assets
This commit is contained in:
parent
56dcd00e82
commit
80d387743a
@ -3,15 +3,21 @@ from owrx.websocket import WebSocketConnection
|
|||||||
from owrx.config import PropertyManager
|
from owrx.config import PropertyManager
|
||||||
from owrx.source import SpectrumThread, DspManager, CpuUsageThread
|
from owrx.source import SpectrumThread, DspManager, CpuUsageThread
|
||||||
import json
|
import json
|
||||||
|
import os
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
class Controller(object):
|
class Controller(object):
|
||||||
def __init__(self, handler, matches):
|
def __init__(self, handler, matches):
|
||||||
self.handler = handler
|
self.handler = handler
|
||||||
self.matches = matches
|
self.matches = matches
|
||||||
def send_response(self, content, code = 200, content_type = "text/html"):
|
def send_response(self, content, code = 200, content_type = "text/html", last_modified: datetime = None, max_age = None):
|
||||||
self.handler.send_response(code)
|
self.handler.send_response(code)
|
||||||
if content_type is not None:
|
if content_type is not None:
|
||||||
self.handler.send_header("Content-Type", content_type)
|
self.handler.send_header("Content-Type", content_type)
|
||||||
|
if last_modified is not None:
|
||||||
|
self.handler.send_header("Last-Modified", last_modified.strftime("%a, %d %b %Y %H:%M:%S GMT"))
|
||||||
|
if max_age is not None:
|
||||||
|
self.handler.send_header("Cache-Control", "max-age: {0}".format(max_age))
|
||||||
self.handler.end_headers()
|
self.handler.end_headers()
|
||||||
if (type(content) == str):
|
if (type(content) == str):
|
||||||
content = content.encode()
|
content = content.encode()
|
||||||
@ -27,25 +33,34 @@ class StatusController(Controller):
|
|||||||
def handle_request(self):
|
def handle_request(self):
|
||||||
self.send_response("you have reached the status page!")
|
self.send_response("you have reached the status page!")
|
||||||
|
|
||||||
class IndexController(Controller):
|
|
||||||
def handle_request(self):
|
|
||||||
self.render_template("index.wrx")
|
|
||||||
|
|
||||||
class AssetsController(Controller):
|
class AssetsController(Controller):
|
||||||
def serve_file(self, file):
|
def serve_file(self, file, content_type = None):
|
||||||
try:
|
try:
|
||||||
|
modified = datetime.fromtimestamp(os.path.getmtime('htdocs/' + file))
|
||||||
|
|
||||||
|
if "If-Modified-Since" in self.handler.headers:
|
||||||
|
client_modified = datetime.strptime(self.handler.headers["If-Modified-Since"], "%a, %d %b %Y %H:%M:%S %Z")
|
||||||
|
if modified <= client_modified:
|
||||||
|
self.send_response("", code = 304)
|
||||||
|
return
|
||||||
|
|
||||||
f = open('htdocs/' + file, 'rb')
|
f = open('htdocs/' + file, 'rb')
|
||||||
data = f.read()
|
data = f.read()
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
(content_type, encoding) = mimetypes.MimeTypes().guess_type(file)
|
if content_type is None:
|
||||||
self.send_response(data, content_type = content_type)
|
(content_type, encoding) = mimetypes.MimeTypes().guess_type(file)
|
||||||
|
self.send_response(data, content_type = content_type, last_modified = modified, max_age = 3600)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
self.send_response("file not found", code = 404)
|
self.send_response("file not found", code = 404)
|
||||||
def handle_request(self):
|
def handle_request(self):
|
||||||
filename = self.matches.group(1)
|
filename = self.matches.group(1)
|
||||||
self.serve_file(filename)
|
self.serve_file(filename)
|
||||||
|
|
||||||
|
class IndexController(AssetsController):
|
||||||
|
def handle_request(self):
|
||||||
|
self.serve_file("index.wrx", "text/html")
|
||||||
|
|
||||||
class OpenWebRxClient(object):
|
class OpenWebRxClient(object):
|
||||||
def __init__(self, conn):
|
def __init__(self, conn):
|
||||||
self.conn = conn
|
self.conn = conn
|
||||||
|
Loading…
Reference in New Issue
Block a user