diff options
Diffstat (limited to 'lib.py')
| -rw-r--r-- | lib.py | 78 |
1 files changed, 78 insertions, 0 deletions
@@ -0,0 +1,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
\ No newline at end of file |
