-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathserver.py
More file actions
70 lines (54 loc) · 2.19 KB
/
server.py
File metadata and controls
70 lines (54 loc) · 2.19 KB
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import os
from routes.main import router
from routes.routeHandler import RouteHandler
from http.server import BaseHTTPRequestHandler
from response.jsonHandler import JsonHandler
from response.templateHandler import TemplateHandler
from response.staticHandler import StaticHandler
from response.badRequestHandler import BadRequestHandler
class Server(BaseHTTPRequestHandler):
def do_HEAD(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_GET(self):
split_path = os.path.splitext(self.path)
request_extension = split_path[1]
if request_extension is "" or request_extension is ".html":
route_handler = RouteHandler(router.getRoutes())
if route_handler.find(self.path):
route_result = route_handler.get_result()
if "template" in route_result:
handler = TemplateHandler()
handler.find(route_result["template"], route_result["data"])
elif "json" in route_result:
handler = JsonHandler()
handler.format(route_result["data"])
else:
handler = BadRequestHandler()
else:
handler = BadRequestHandler()
elif request_extension is ".py":
handler = BadRequestHandler()
else:
handler = StaticHandler()
handler.find(self.path)
self.respond({
'status': handler.getStatus(),
'type': handler.getType(),
'handler' : handler
})
def handle_http(self, status_code, handler):
self.send_response(status_code)
if status_code is 200:
content = handler.getContents()
self.send_header('Content-type', handler.getContentType())
else:
content = "404 Not Found"
self.end_headers()
if isinstance( content, (bytes, bytearray) ):
return content
return bytes(content, 'UTF-8')
def respond(self, opts):
response = self.handle_http(opts['status'], opts['handler'])
self.wfile.write(response)