diff --git a/models/database.py b/models/database.py index a95cc808c86f241426fee94c8a632ca7876f2e9e..102a63d6bedba47e5cbfe546fc1b30eb567eb774 100644 --- a/models/database.py +++ b/models/database.py @@ -115,6 +115,12 @@ class ProtocolType(db.Model): if protocoltype.has_private_view_right(user) ] + def get_wiki_infobox(self): + return "Infobox {}".format(self.short_name) + + def get_wiki_infobox_title(self): + return "Vorlage:{}".format(self.get_wiki_infobox()) + class Protocol(db.Model): __tablename__ = "protocols" id = db.Column(db.Integer, primary_key=True) diff --git a/tasks.py b/tasks.py index ebcd560d956d95d94fd678d24e77eb46de0534e3..d52a17349554bb4663841bc3bcf51d1665969bb4 100644 --- a/tasks.py +++ b/tasks.py @@ -45,6 +45,23 @@ mailenv.filters["url_complete"] = url_manager.complete mailenv.filters["datify"] = date_filter mailenv.filters["datetimify"] = datetime_filter +wikienv = app.create_jinja_environment() +wikienv.trim_blocks = True +wikienv.lstrip_blocks = True +wikienv.block_start_string = "<env>" +wikienv.block_end_string = "</env>" +wikienv.variable_start_string = "<var>" +wikienv.variable_end_string = "</var>" +wikienv.comment_start_string = "<comment>" +wikienv.comment_end_string = "</comment>" +wikienv.filters["datify"] = date_filter +wikienv.filters["datify_long"] = date_filter_long +wikienv.filters["datify_short"] = date_filter_short +wikienv.filters["datetimify"] = datetime_filter +wikienv.filters["timify"] = time_filter +wikienv.filters["class"] = class_filter + + ID_FIELD_BEGINNING = "id " def parse_protocol(protocol, **kwargs): @@ -285,19 +302,24 @@ def parse_protocol_async_inner(protocol, encoded_kwargs): compile(latex_source, protocol, show_private=show_private, maxdepth=maxdepth) if protocol.protocoltype.use_wiki: - wiki_source = render_template("protocol.wiki", render_type=RenderType.wikitext, show_private=not protocol.protocoltype.wiki_only_public, **render_kwargs).replace("\n\n\n", "\n\n") - push_to_wiki(protocol, wiki_source, "Automatisch generiert vom Protokollsystem 3.0") + wiki_source = wikienv.get_template("protocol.wiki").render(render_type=RenderType.wikitext, show_private=not protocol.protocoltype.wiki_only_public, **render_kwargs).replace("\n\n\n", "\n\n") + wiki_infobox_source = wikienv.get_template("infobox.wiki").render(protocoltype=protocol.protocoltype) + push_to_wiki(protocol, wiki_source, wiki_infobox_source, "Automatisch generiert vom Protokollsystem 3.0") protocol.done = True db.session.commit() -def push_to_wiki(protocol, content, summary): - push_to_wiki_async.delay(protocol.id, content, summary) +def push_to_wiki(protocol, content, infobox_content, summary): + push_to_wiki_async.delay(protocol.id, content, infobox_content, summary) @celery.task -def push_to_wiki_async(protocol_id, content, summary): +def push_to_wiki_async(protocol_id, content, infobox_content, summary): with WikiClient() as wiki_client, app.app_context(): protocol = Protocol.query.filter_by(id=protocol_id).first() try: + wiki_client.edit_page( + title=protocol.protocoltype.get_wiki_infobox_title(), + content=infobox_content, + summary="Automatisch generiert vom Protokollsystem 3.") wiki_client.edit_page( title=protocol.get_wiki_title(), content=content, diff --git a/templates/infobox.wiki b/templates/infobox.wiki new file mode 100644 index 0000000000000000000000000000000000000000..5715f0353597ee8a776665bf1e94907d8f04a6b9 --- /dev/null +++ b/templates/infobox.wiki @@ -0,0 +1,11 @@ +{{Infobox +| Titel = {{{name|<includeonly>{{PAGENAMEBASE}}</includeonly>}}} +| Feldname1 = Datum +| Daten1 = {{{datum|}}} +| Feldname2 = Zeit +| Daten2 = {{{zeit|}}} +<env> for meta in protocoltype.metas </env> +| Feldname<var>loop.index + 2</var> = <var>meta.name</var> +| Daten<var>loop.index + 2</var> = {{{<var>meta.name|lower</var>|}}} +<env> endfor </env> +}} diff --git a/templates/protocol.wiki b/templates/protocol.wiki index 1bfc8efb0f15b44058db6099a327d97386fa6503..5cb8c6cdd0a1627f47d416680170c089fbd7cfc9 100644 --- a/templates/protocol.wiki +++ b/templates/protocol.wiki @@ -1,48 +1,29 @@ -{# -{{'{{'}}Infobox Protokoll -| name = {{protocol.protocoltype.name}} -{% if protocol.date is not none %} -| datum = {{protocol.date|datify_long}} -{% endif %} -{% if protocol.start_time is not none and protocol.end_time is not none %} -| zeit = von {{protocol.start_time|timify}} bis {{protocol.end_time|timify}} -{% endif %} -{% if protocol.author is not none %} -| protokollant = {{protocol.author}} -{% endif %} -{% if protocol.participants is not none %} -| anwesende = {{protocol.participants}} -{% endif %} -{{'}}'}} -#} -'''{{protocol.protocoltype.name}}''' - -{% if protocol.date is not none %} -Datum: '''{{protocol.date|datify_long}}''' -{% endif %} - -{% if protocol.start_time is not none and protocol.end_time is not none %} -Zeit: '''von {{protocol.start_time|timify}} bis {{protocol.end_time|timify}}''' -{% endif %} - -{% for meta in protocol.metas %} -{{meta.name}}: '''{{meta.value}}''' - -{% endfor %} +{{<var>protocol.protocoltype.get_wiki_infobox()</var> +| name = <var>protocol.protocoltype.name</var> +<env> if protocol.date is not none </env> +| datum = <var>protocol.date|datify_long</var> +<env> endif </env> +<env> if protocol.start_time is not none and protocol.end_time is not none </env> +| zeit = von <var>protocol.start_time|timify</var> bis <var>protocol.end_time|timify</var> +<env> endif </env> +<env> for meta in protocol.metas </env> +| <var>meta.name|lower</var> = <var>meta.value</var> +<env> endfor </env> +}} == Beschlüsse == -{% if protocol.decisions|length > 0 %} - {% for decision in protocol.decisions %} -* {{decision.content}} - {% endfor %} -{% else %} +<env> if protocol.decisions|length > 0 </env> + <env> for decision in protocol.decisions </env> +* <var>decision.content</var> + <env> endfor </env> +<env> else </env> * keine Beschlüsse -{% endif %} +<env> endif </env> -{% for top in tree.children %} - {% if top|class == "Fork" %} -{{top.render(render_type=render_type, level=0, show_private=show_private, protocol=protocol)}} - {% endif %} -{% endfor %} +<env> for top in tree.children </env> + <env> if top|class == "Fork" </env> +<var>top.render(render_type=render_type, level=0, show_private=show_private, protocol=protocol)</var> + <env> endif </env> +<env> endfor </env> -[[Kategorie:{{protocol.protocoltype.wiki_category}}]] +[[Kategorie:<var>protocol.protocoltype.wiki_category</var>]] diff --git a/wiki.py b/wiki.py index 10cf9b778cbe7dd861cd84d36bc6257cd4ff44eb..414892f998cba66e32995ec8207196264197b1ce 100644 --- a/wiki.py +++ b/wiki.py @@ -95,7 +95,7 @@ class WikiClient: req = requests.post(self.endpoint, cookies=self.cookies, data=data, params=params) if req.status_code != HTTP_STATUS_OK: raise WikiException("HTTP status code {} on action {}.".format(req.status_code, action)) - self.cookies = req.cookies + self.cookies.update(req.cookies) return req.json() def main():