From af3fb6c6eb233af00229a908bab92afbf38bad0b Mon Sep 17 00:00:00 2001 From: SoniEx2 Date: Sun, 19 Jul 2020 20:38:05 -0300 Subject: Move a lot of things around (broken) --- ganarchy/templating/__init__.py | 21 +++++++ ganarchy/templating/environment.py | 29 +++++++++ ganarchy/templating/templates.py | 124 +++++++++++++++++++++++++++++++++++++ ganarchy/templating/toml.py | 33 ++++++++++ 4 files changed, 207 insertions(+) create mode 100644 ganarchy/templating/__init__.py create mode 100644 ganarchy/templating/environment.py create mode 100644 ganarchy/templating/templates.py create mode 100644 ganarchy/templating/toml.py (limited to 'ganarchy/templating') diff --git a/ganarchy/templating/__init__.py b/ganarchy/templating/__init__.py new file mode 100644 index 0000000..d6f6d0c --- /dev/null +++ b/ganarchy/templating/__init__.py @@ -0,0 +1,21 @@ +# This file is part of GAnarchy - decentralized project hub +# Copyright (C) 2020 Soni L. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +"""Templates. + +""" + +# TODO write me diff --git a/ganarchy/templating/environment.py b/ganarchy/templating/environment.py new file mode 100644 index 0000000..a527053 --- /dev/null +++ b/ganarchy/templating/environment.py @@ -0,0 +1,29 @@ +# This file is part of GAnarchy - decentralized project hub +# Copyright (C) 2020 Soni L. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import jinja2 + +import ganarchy.templating.templates +import ganarchy.templating.toml + +def get_env(): + env = jinja2.Environment( + loader=ganarchy.templating.templates.get_template_loader(), + autoescape=False + ) + env.filters['tomlescape'] = ganarchy.templating.toml.tomlescape + env.filters['tomle'] = env.filters['tomlescape'] + return env diff --git a/ganarchy/templating/templates.py b/ganarchy/templating/templates.py new file mode 100644 index 0000000..0f691e0 --- /dev/null +++ b/ganarchy/templating/templates.py @@ -0,0 +1,124 @@ +# This file is part of GAnarchy - decentralized project hub +# Copyright (C) 2020 Soni L. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import jinja2 + +import ganarchy.dirs + +def get_template_loader(): + return jinja2.ChoiceLoader([ + jinja2.FileSystemLoader([ganarchy.dirs.CONFIG_HOME + "/templates"] + [config_dir + "/templates" for config_dir in ganarchy.dirs.CONFIG_DIRS]), + jinja2.DictLoader({ + ## index.html + 'index.html': """ + + + + + {{ ganarchy.title|e }} + + + + + +

{{ ganarchy.title|e }}

+

This is {{ ganarchy.title|e }}. Currently tracking the following projects:

+
    + {% for project in ganarchy.projects -%} +
  • {{ project.title|e }}: {{ project.description|e }}
  • + {% endfor -%} +
+

Powered by GAnarchy. AGPLv3-licensed. Source Code.

+

+ Register web+ganarchy: URI handler. +

+ + +""", + ## index.toml + 'index.toml': """# Generated by GAnarchy + +{%- for project, repos in config.projects.items() %} +[projects.{{project}}] +{%- for repo_url, branches in repos.items() %}{% for branch, options in branches.items() %}{% if options.active %} +"{{repo_url|tomle}}".{% if branch %}"{{branch|tomle}}"{% else %}HEAD{% endif %} = { active=true } +{%- endif %}{% endfor %} +{%- endfor %} +{% endfor -%} +""", + ## project.html FIXME + 'project.html': """ + + + + + {{ project_title|e }} + {% if project_desc %}{% endif %} + + + +

{{ project_title|e }}

+

Tracking {{ project_commit }}

+

{{ project_body|e|replace("\n\n", "

") }}

+
    + {% for url, msg, img, branch in repos -%} +
  • {{ url|e }}{% if branch %} [{{ branch|e }}]{% endif %}: {{ msg|e }}
  • + {% endfor -%} +
+

Powered by GAnarchy. AGPLv3-licensed. Source Code.

+

+ Main page. + Register web+ganarchy: URI handler. +

+ + +""", + ## history.svg FIXME + 'history.svg': """""", + }) + ]) diff --git a/ganarchy/templating/toml.py b/ganarchy/templating/toml.py new file mode 100644 index 0000000..431125d --- /dev/null +++ b/ganarchy/templating/toml.py @@ -0,0 +1,33 @@ +# This file is part of GAnarchy - decentralized project hub +# Copyright (C) 2020 Soni L. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +_tomletrans = str.maketrans({ + 0: '\\u0000', 1: '\\u0001', 2: '\\u0002', 3: '\\u0003', 4: '\\u0004', + 5: '\\u0005', 6: '\\u0006', 7: '\\u0007', 8: '\\b', 9: '\\t', 10: '\\n', + 11: '\\u000B', 12: '\\f', 13: '\\r', 14: '\\u000E', 15: '\\u000F', + 16: '\\u0010', 17: '\\u0011', 18: '\\u0012', 19: '\\u0013', 20: '\\u0014', + 21: '\\u0015', 22: '\\u0016', 23: '\\u0017', 24: '\\u0018', 25: '\\u0019', + 26: '\\u001A', 27: '\\u001B', 28: '\\u001C', 29: '\\u001D', 30: '\\u001E', + 31: '\\u001F', '"': '\\"', '\\': '\\\\' + }) + +def tomlescape(value): + """Escapes a string for use in a TOML string. + + Returns: + str: The escaped string. + """ + return value.translate(_tomletrans) -- cgit 1.4.1