aboutsummaryrefslogtreecommitdiff
path: root/backend/server.py
blob: d03215c1a451d9f7d04e57c2900eb47b96759874 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/python3

"""
Runs a basic dev server that serves a WSGI script and image files
"""

from typing import Iterable
import os
from wsgiref import simple_server, util
import mimetypes
from chrona import application

import argparse
parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
parser.parse_args()

def wrappingApp(environ: dict[str, str], start_response) -> Iterable[bytes]:
	""" WSGI handler that uses 'application', but also serves image files """
	urlPath = environ['PATH_INFO']
	if urlPath.startswith('/data/'):
		return application(environ, start_response) # Run WSGI script
	elif urlPath.startswith('/hist_data/img/'): # Serve image file
		imgPath = os.path.join(os.getcwd(), urlPath[1:])
		if os.path.exists(imgPath):
			imgType = mimetypes.guess_type(imgPath)[0]
			start_response('200 OK', [('Content-type', imgType)])
			return util.FileWrapper(open(imgPath, 'rb'))
		else:
			start_response('404 Not Found', [('Content-type', 'text/plain')])
			return [b'No image found']
	else:
		start_response('404 Not Found', [('Content-type', 'text/plain')])
		return [b'Unrecognised path']

# Start server
with simple_server.make_server('', 8000, wrappingApp) as httpd:
    print('Serving HTTP on port 8000...')
    httpd.serve_forever()