blob: 66d2ccdccb7e6c84079470051fa7af8b4bf45736 (
plain) (
blame)
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
70
71
72
73
74
75
76
77
78
|
import os
import io
import re
posts = {}
gets = {}
def find_get(path):
try:
return gets[path]()
except KeyError:
return "404"
def find_post(path, request):
try:
return posts[path](request)
except KeyError:
return "404"
def get_relative_path():
return os.path.dirname(os.path.abspath(__file__))
def read_html(relative_file_path):
""" Reads the html file on the file location provided
and injects any external files (marked with {{file_path}} )
that may be present. """
dir_path = get_relative_path()
file_path = os.path.join(dir_path, relative_file_path)
with open(file_path) as file:
html_content = file.read()
html_content = inject_external_files(html_content)
return html_content
def inject_external_files(html_content):
""" Replaces {{ 'file_path' }} with the file content of that
file path. Useful for seperation of javascript and css files."""
pattern = r'{{([^<]+)}}'
external_files = re.findall(pattern, html_content)
new_html_content = html_content
for match in external_files:
external_file_path = match.replace(' ', '')
external_file = open(os.path.join(get_relative_path(), external_file_path))
file_content = external_file.read()
external_file.close()
if match.find('.css') != -1:
file_content = '<style>\n' + file_content + '</style>'
elif match.find('.js') != -1:
file_content = '<script>\n' + file_content + '</script>'
to_be_replaced = '{{' + match + '}}'
new_html_content = new_html_content.replace(to_be_replaced, file_content)
return new_html_content
def post(route = '/'):
""" A decorator that takes in the route path as argument, and then
puts the post handler in the dictionary, with the route as a key. """
def decorator(handler_function):
posts[route] = handler_function
return handler_function
return decorator
def get(route = '/'):
""" A decorator that takes in the route path as argument, and then
puts the get handler in the dictionary, with the route as a key. """
def decorator(handler_function):
gets[route] = handler_function
return handler_function
return decorator
|