diff --git a/templates/footer.html b/templates/footer.html new file mode 100644 index 0000000..2018aaf --- /dev/null +++ b/templates/footer.html @@ -0,0 +1,5 @@ +
+ +
\ No newline at end of file diff --git a/templates/json2html_template.html b/templates/json2html_template.html new file mode 100644 index 0000000..0c50be3 --- /dev/null +++ b/templates/json2html_template.html @@ -0,0 +1,40 @@ + + \ No newline at end of file diff --git a/templates/table_template.html b/templates/table_template.html new file mode 100644 index 0000000..5b9224b --- /dev/null +++ b/templates/table_template.html @@ -0,0 +1,13 @@ + + + + + {{ @json2html_template.html }} + + + +
+
+ {{ @footer.html }} + + \ No newline at end of file diff --git a/templates_engine.py b/templates_engine.py new file mode 100644 index 0000000..7324d4e --- /dev/null +++ b/templates_engine.py @@ -0,0 +1,33 @@ +""" +Features: +include files +insert variables from context dict +""" +from os.path import join +import re +templates_dir = 'templates' + +variable_pattern: re.Pattern = re.compile(r'\{\{ .* }}') +include_pattern: re.Pattern = re.compile(r'\{\{ @.* }}') + + +def render(template_name: str, context: dict): + template_path = join(templates_dir, template_name) + template = get_file_content(template_path) + + for include_statement in re.findall(include_pattern, template): + file_include = include_statement.split(' ')[1][1:] + include_content = get_file_content(join(templates_dir, file_include)) + template = template.replace(include_statement, include_content) + + for var_to_replace in re.findall(variable_pattern, template): + key = var_to_replace.split(' ')[1] + template = template.replace(var_to_replace, context[key]) + + return template + + +def get_file_content(filename: str) -> str: + with open(filename, 'r', encoding='utf-8') as file: + # it will throw exception if file doesn't exist + return file.read() diff --git a/web.py b/web.py index e9dc8a1..dcda109 100644 --- a/web.py +++ b/web.py @@ -5,6 +5,7 @@ import os from EDMCLogging import get_main_logger import utils from model.sqlite_cache import cache +from templates_engine import render """ /leaderboard/{leaderboard_type}/platform/{platform}?[limit= @@ -57,14 +58,14 @@ class Activity: class ActivityHtml: def on_get(self, req: falcon.request.Request, resp: falcon.response.Response, leaderboard: str, platform: str)\ -> None: - Activity().on_get(req, resp, leaderboard, platform) - table_in_json: str = resp.text resp.content_type = falcon.MEDIA_HTML - resp.text = utils.activity_table_html_template.replace( - '{items}', table_in_json - ).replace('{target_column_name}', 'ActionId').replace('{target_new_url}', '/diff/') - # what? f-strings? .format? never heard about them + resp.text = render( + 'table_template.html', + { + 'target_column_name': 'ActionId', + 'target_new_url': '/diff/', + }) class ActivityDiff: @@ -85,10 +86,13 @@ class ActivityDiff: class ActivityDiffHtml: def on_get(self, req: falcon.request.Request, resp: falcon.response.Response, action_id: int) -> None: resp.content_type = falcon.MEDIA_HTML - # table: str = json.dumps(model.get_diff_action_id(action_id)) - resp.text = utils.activity_table_html_template.replace( - '{items}', json.dumps(model.get_diff_action_id(action_id)) - ).replace('{target_column_name}', 'Tag').replace('{target_new_url}', '/jub/squads/now/by-tag/') + resp.text = render( + 'table_template.html', + { + 'target_column_name': 'Tag', + 'target_new_url': '/jub/squads/now/by-tag/' + } + ) class MainPage: