Skip to content
Snippets Groups Projects
Commit 95d735a4 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Merge branch 'prepare-release-2.0b1' into 'release/2.0'

Prepare release 2.0b1

See merge request !25
parents b8a68452 96be3cc5
No related branches found
No related tags found
1 merge request!25Prepare release 2.0b1
Pipeline #39481 failed
Showing with 327 additions and 201 deletions
......@@ -6,6 +6,19 @@ All notable changes to this project will be documented in this file.
The format is based on `Keep a Changelog`_,
and this project adheres to `Semantic Versioning`_.
`2.0b1`_ - 2021-11-07
---------------------
Added
~~~~~
* Provide API view for accessing the current PDF file of a live document (secured with OAuth2).
Changed
~~~~~~~
* German translations were updated.
`2.0b0`_ - 2021-11-03
--------------------
......@@ -22,3 +35,4 @@ Added
.. _Semantic Versioning: https://semver.org/spec/v2.0.0.html
.. _2.0b0: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.0b0
.. _2.0b1: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.0b1
from django.apps import apps
from django.db import models
from django.db.models import functions
from django.utils.translation import gettext_lazy as _
from aleksis.core.util.apps import AppConfig
......@@ -14,3 +19,22 @@ class ResintConfig(AppConfig):
([2020, 2021], "Frank Poetzsch-Heffter", "p-h@katharineum.de"),
([2019], "Julian Leucker", "leuckeju@katharineum.de"),
)
@classmethod
def get_all_scopes(cls) -> dict[str, str]:
"""Return all OAuth scopes and their descriptions for this app."""
LiveDocument = apps.get_model("resint", "LiveDocument")
label_prefix = _("Access PDF file for live document")
scopes = dict(
LiveDocument.objects.annotate(
scope=functions.Concat(
models.Value(f"{LiveDocument.SCOPE_PREFIX}_"),
models.F("slug"),
output_field=models.CharField(),
),
label=functions.Concat(models.Value(f"{label_prefix}: "), models.F("name")),
)
.values_list("scope", "label")
.distinct()
)
return scopes
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-03 15:32+0100\n"
"POT-Creation-Date: 2021-11-07 11:59+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -18,6 +18,10 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: aleksis/apps/resint/apps.py:27
msgid "Access PDF file for live document"
msgstr ""
#: aleksis/apps/resint/menus.py:37
msgid "Documents"
msgstr ""
......@@ -32,7 +36,7 @@ msgstr ""
msgid "Poster groups"
msgstr ""
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:212
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:219
#: aleksis/apps/resint/templates/resint/live_document/list.html:8
#: aleksis/apps/resint/templates/resint/live_document/list.html:9
msgid "Live documents"
......@@ -46,7 +50,7 @@ msgstr ""
msgid "If you use 'example', the filename will be 'example.pdf'."
msgstr ""
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:156
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:158
#: aleksis/apps/resint/templates/resint/group/list.html:19
msgid "Name"
msgstr ""
......@@ -118,23 +122,23 @@ msgstr ""
msgid "Posters"
msgstr ""
#: aleksis/apps/resint/models.py:153
#: aleksis/apps/resint/models.py:155
msgid "Slug"
msgstr ""
#: aleksis/apps/resint/models.py:154
#: aleksis/apps/resint/models.py:156
msgid "This will be used for the name of the current PDF file."
msgstr ""
#: aleksis/apps/resint/models.py:162
#: aleksis/apps/resint/models.py:164
msgid "Current file"
msgstr ""
#: aleksis/apps/resint/models.py:166
#: aleksis/apps/resint/models.py:168
msgid "Was the last update triggered manually?"
msgstr ""
#: aleksis/apps/resint/models.py:211
#: aleksis/apps/resint/models.py:218
msgid "Live document"
msgstr ""
......@@ -262,34 +266,34 @@ msgstr ""
msgid "Upload poster"
msgstr ""
#: aleksis/apps/resint/views.py:48 aleksis/apps/resint/views.py:59
#: aleksis/apps/resint/views.py:50 aleksis/apps/resint/views.py:61
msgid "The poster group has been saved."
msgstr ""
#: aleksis/apps/resint/views.py:69
#: aleksis/apps/resint/views.py:71
msgid "The poster group has been deleted."
msgstr ""
#: aleksis/apps/resint/views.py:112
#: aleksis/apps/resint/views.py:114
msgid "The poster has been uploaded."
msgstr ""
#: aleksis/apps/resint/views.py:123
#: aleksis/apps/resint/views.py:125
msgid "The poster has been changed."
msgstr ""
#: aleksis/apps/resint/views.py:133
#: aleksis/apps/resint/views.py:135
msgid "The poster has been deleted."
msgstr ""
#: aleksis/apps/resint/views.py:195
#: aleksis/apps/resint/views.py:197
msgid "The live document has been created."
msgstr ""
#: aleksis/apps/resint/views.py:210
#: aleksis/apps/resint/views.py:212
msgid "The live document has been saved."
msgstr ""
#: aleksis/apps/resint/views.py:221
#: aleksis/apps/resint/views.py:223
msgid "The live document has been deleted."
msgstr ""
......@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-03 15:32+0100\n"
"PO-Revision-Date: 2021-11-03 14:45+0000\n"
"POT-Creation-Date: 2021-11-07 11:59+0100\n"
"PO-Revision-Date: 2021-11-07 11:17+0000\n"
"Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n"
"Language-Team: German <https://translate.edugit.org/projects/aleksis/"
"aleksis-app-resint/de/>\n"
......@@ -19,6 +19,10 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.8\n"
#: aleksis/apps/resint/apps.py:27
msgid "Access PDF file for live document"
msgstr "PDF-Datei für Live-Dokument abrufen"
#: aleksis/apps/resint/menus.py:37
msgid "Documents"
msgstr "Dokumente"
......@@ -33,7 +37,7 @@ msgstr "Dokumente verwalten"
msgid "Poster groups"
msgstr "Dokumentengruppen"
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:212
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:219
#: aleksis/apps/resint/templates/resint/live_document/list.html:8
#: aleksis/apps/resint/templates/resint/live_document/list.html:9
msgid "Live documents"
......@@ -47,7 +51,7 @@ msgstr "Slug für den URL-Namen"
msgid "If you use 'example', the filename will be 'example.pdf'."
msgstr "Wenn Sie 'beispiel' nutzen, wird der Dateiname 'beispiel.pdf' sein."
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:156
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:158
#: aleksis/apps/resint/templates/resint/group/list.html:19
msgid "Name"
msgstr "Name"
......@@ -119,23 +123,23 @@ msgstr "Dokument"
msgid "Posters"
msgstr "Dokumente"
#: aleksis/apps/resint/models.py:153
#: aleksis/apps/resint/models.py:155
msgid "Slug"
msgstr "Slug"
#: aleksis/apps/resint/models.py:154
#: aleksis/apps/resint/models.py:156
msgid "This will be used for the name of the current PDF file."
msgstr "Dies wird für den Namen der aktuellen PDF-Datei benutzt werden."
#: aleksis/apps/resint/models.py:162
#: aleksis/apps/resint/models.py:164
msgid "Current file"
msgstr "Aktuelle Datei"
#: aleksis/apps/resint/models.py:166
#: aleksis/apps/resint/models.py:168
msgid "Was the last update triggered manually?"
msgstr "Wurde die letzte Aktualisierung manuell ausgelöst?"
#: aleksis/apps/resint/models.py:211
#: aleksis/apps/resint/models.py:218
msgid "Live document"
msgstr "Live-Dokument"
......@@ -266,35 +270,35 @@ msgstr "Anzeigen"
msgid "Upload poster"
msgstr "Dokument hochladen"
#: aleksis/apps/resint/views.py:48 aleksis/apps/resint/views.py:59
#: aleksis/apps/resint/views.py:50 aleksis/apps/resint/views.py:61
msgid "The poster group has been saved."
msgstr "Die Dokumentengruppe wurde gespeichert."
#: aleksis/apps/resint/views.py:69
#: aleksis/apps/resint/views.py:71
msgid "The poster group has been deleted."
msgstr "Die Dokumentengruppe wurde gelöscht."
#: aleksis/apps/resint/views.py:112
#: aleksis/apps/resint/views.py:114
msgid "The poster has been uploaded."
msgstr "Das Dokument wurde hochgeladen."
#: aleksis/apps/resint/views.py:123
#: aleksis/apps/resint/views.py:125
msgid "The poster has been changed."
msgstr "Das Dokument wurde verändert."
#: aleksis/apps/resint/views.py:133
#: aleksis/apps/resint/views.py:135
msgid "The poster has been deleted."
msgstr "Das Dokument wurde gelöscht."
#: aleksis/apps/resint/views.py:195
#: aleksis/apps/resint/views.py:197
msgid "The live document has been created."
msgstr "Das Live-Dokument wurde erstellt."
#: aleksis/apps/resint/views.py:210
#: aleksis/apps/resint/views.py:212
msgid "The live document has been saved."
msgstr "Das Live-Dokument wurde gespeichert."
#: aleksis/apps/resint/views.py:221
#: aleksis/apps/resint/views.py:223
msgid "The live document has been deleted."
msgstr "Das Live-Dokument wurde gelöscht."
......
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-03 15:32+0100\n"
"POT-Creation-Date: 2021-11-07 11:59+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -18,6 +18,10 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: aleksis/apps/resint/apps.py:27
msgid "Access PDF file for live document"
msgstr ""
#: aleksis/apps/resint/menus.py:37
msgid "Documents"
msgstr ""
......@@ -32,7 +36,7 @@ msgstr ""
msgid "Poster groups"
msgstr ""
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:212
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:219
#: aleksis/apps/resint/templates/resint/live_document/list.html:8
#: aleksis/apps/resint/templates/resint/live_document/list.html:9
msgid "Live documents"
......@@ -46,7 +50,7 @@ msgstr ""
msgid "If you use 'example', the filename will be 'example.pdf'."
msgstr ""
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:156
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:158
#: aleksis/apps/resint/templates/resint/group/list.html:19
msgid "Name"
msgstr ""
......@@ -118,23 +122,23 @@ msgstr ""
msgid "Posters"
msgstr ""
#: aleksis/apps/resint/models.py:153
#: aleksis/apps/resint/models.py:155
msgid "Slug"
msgstr ""
#: aleksis/apps/resint/models.py:154
#: aleksis/apps/resint/models.py:156
msgid "This will be used for the name of the current PDF file."
msgstr ""
#: aleksis/apps/resint/models.py:162
#: aleksis/apps/resint/models.py:164
msgid "Current file"
msgstr ""
#: aleksis/apps/resint/models.py:166
#: aleksis/apps/resint/models.py:168
msgid "Was the last update triggered manually?"
msgstr ""
#: aleksis/apps/resint/models.py:211
#: aleksis/apps/resint/models.py:218
msgid "Live document"
msgstr ""
......@@ -262,34 +266,34 @@ msgstr ""
msgid "Upload poster"
msgstr ""
#: aleksis/apps/resint/views.py:48 aleksis/apps/resint/views.py:59
#: aleksis/apps/resint/views.py:50 aleksis/apps/resint/views.py:61
msgid "The poster group has been saved."
msgstr ""
#: aleksis/apps/resint/views.py:69
#: aleksis/apps/resint/views.py:71
msgid "The poster group has been deleted."
msgstr ""
#: aleksis/apps/resint/views.py:112
#: aleksis/apps/resint/views.py:114
msgid "The poster has been uploaded."
msgstr ""
#: aleksis/apps/resint/views.py:123
#: aleksis/apps/resint/views.py:125
msgid "The poster has been changed."
msgstr ""
#: aleksis/apps/resint/views.py:133
#: aleksis/apps/resint/views.py:135
msgid "The poster has been deleted."
msgstr ""
#: aleksis/apps/resint/views.py:195
#: aleksis/apps/resint/views.py:197
msgid "The live document has been created."
msgstr ""
#: aleksis/apps/resint/views.py:210
#: aleksis/apps/resint/views.py:212
msgid "The live document has been saved."
msgstr ""
#: aleksis/apps/resint/views.py:221
#: aleksis/apps/resint/views.py:223
msgid "The live document has been deleted."
msgstr ""
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-03 15:32+0100\n"
"POT-Creation-Date: 2021-11-07 11:59+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -17,6 +17,10 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: aleksis/apps/resint/apps.py:27
msgid "Access PDF file for live document"
msgstr ""
#: aleksis/apps/resint/menus.py:37
msgid "Documents"
msgstr ""
......@@ -31,7 +35,7 @@ msgstr ""
msgid "Poster groups"
msgstr ""
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:212
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:219
#: aleksis/apps/resint/templates/resint/live_document/list.html:8
#: aleksis/apps/resint/templates/resint/live_document/list.html:9
msgid "Live documents"
......@@ -45,7 +49,7 @@ msgstr ""
msgid "If you use 'example', the filename will be 'example.pdf'."
msgstr ""
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:156
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:158
#: aleksis/apps/resint/templates/resint/group/list.html:19
msgid "Name"
msgstr ""
......@@ -117,23 +121,23 @@ msgstr ""
msgid "Posters"
msgstr ""
#: aleksis/apps/resint/models.py:153
#: aleksis/apps/resint/models.py:155
msgid "Slug"
msgstr ""
#: aleksis/apps/resint/models.py:154
#: aleksis/apps/resint/models.py:156
msgid "This will be used for the name of the current PDF file."
msgstr ""
#: aleksis/apps/resint/models.py:162
#: aleksis/apps/resint/models.py:164
msgid "Current file"
msgstr ""
#: aleksis/apps/resint/models.py:166
#: aleksis/apps/resint/models.py:168
msgid "Was the last update triggered manually?"
msgstr ""
#: aleksis/apps/resint/models.py:211
#: aleksis/apps/resint/models.py:218
msgid "Live document"
msgstr ""
......@@ -261,34 +265,34 @@ msgstr ""
msgid "Upload poster"
msgstr ""
#: aleksis/apps/resint/views.py:48 aleksis/apps/resint/views.py:59
#: aleksis/apps/resint/views.py:50 aleksis/apps/resint/views.py:61
msgid "The poster group has been saved."
msgstr ""
#: aleksis/apps/resint/views.py:69
#: aleksis/apps/resint/views.py:71
msgid "The poster group has been deleted."
msgstr ""
#: aleksis/apps/resint/views.py:112
#: aleksis/apps/resint/views.py:114
msgid "The poster has been uploaded."
msgstr ""
#: aleksis/apps/resint/views.py:123
#: aleksis/apps/resint/views.py:125
msgid "The poster has been changed."
msgstr ""
#: aleksis/apps/resint/views.py:133
#: aleksis/apps/resint/views.py:135
msgid "The poster has been deleted."
msgstr ""
#: aleksis/apps/resint/views.py:195
#: aleksis/apps/resint/views.py:197
msgid "The live document has been created."
msgstr ""
#: aleksis/apps/resint/views.py:210
#: aleksis/apps/resint/views.py:212
msgid "The live document has been saved."
msgstr ""
#: aleksis/apps/resint/views.py:221
#: aleksis/apps/resint/views.py:223
msgid "The live document has been deleted."
msgstr ""
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-03 15:32+0100\n"
"POT-Creation-Date: 2021-11-07 11:59+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -17,6 +17,10 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: aleksis/apps/resint/apps.py:27
msgid "Access PDF file for live document"
msgstr ""
#: aleksis/apps/resint/menus.py:37
msgid "Documents"
msgstr ""
......@@ -31,7 +35,7 @@ msgstr ""
msgid "Poster groups"
msgstr ""
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:212
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:219
#: aleksis/apps/resint/templates/resint/live_document/list.html:8
#: aleksis/apps/resint/templates/resint/live_document/list.html:9
msgid "Live documents"
......@@ -45,7 +49,7 @@ msgstr ""
msgid "If you use 'example', the filename will be 'example.pdf'."
msgstr ""
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:156
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:158
#: aleksis/apps/resint/templates/resint/group/list.html:19
msgid "Name"
msgstr ""
......@@ -117,23 +121,23 @@ msgstr ""
msgid "Posters"
msgstr ""
#: aleksis/apps/resint/models.py:153
#: aleksis/apps/resint/models.py:155
msgid "Slug"
msgstr ""
#: aleksis/apps/resint/models.py:154
#: aleksis/apps/resint/models.py:156
msgid "This will be used for the name of the current PDF file."
msgstr ""
#: aleksis/apps/resint/models.py:162
#: aleksis/apps/resint/models.py:164
msgid "Current file"
msgstr ""
#: aleksis/apps/resint/models.py:166
#: aleksis/apps/resint/models.py:168
msgid "Was the last update triggered manually?"
msgstr ""
#: aleksis/apps/resint/models.py:211
#: aleksis/apps/resint/models.py:218
msgid "Live document"
msgstr ""
......@@ -261,34 +265,34 @@ msgstr ""
msgid "Upload poster"
msgstr ""
#: aleksis/apps/resint/views.py:48 aleksis/apps/resint/views.py:59
#: aleksis/apps/resint/views.py:50 aleksis/apps/resint/views.py:61
msgid "The poster group has been saved."
msgstr ""
#: aleksis/apps/resint/views.py:69
#: aleksis/apps/resint/views.py:71
msgid "The poster group has been deleted."
msgstr ""
#: aleksis/apps/resint/views.py:112
#: aleksis/apps/resint/views.py:114
msgid "The poster has been uploaded."
msgstr ""
#: aleksis/apps/resint/views.py:123
#: aleksis/apps/resint/views.py:125
msgid "The poster has been changed."
msgstr ""
#: aleksis/apps/resint/views.py:133
#: aleksis/apps/resint/views.py:135
msgid "The poster has been deleted."
msgstr ""
#: aleksis/apps/resint/views.py:195
#: aleksis/apps/resint/views.py:197
msgid "The live document has been created."
msgstr ""
#: aleksis/apps/resint/views.py:210
#: aleksis/apps/resint/views.py:212
msgid "The live document has been saved."
msgstr ""
#: aleksis/apps/resint/views.py:221
#: aleksis/apps/resint/views.py:223
msgid "The live document has been deleted."
msgstr ""
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-03 15:32+0100\n"
"POT-Creation-Date: 2021-11-07 11:59+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -17,6 +17,10 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: aleksis/apps/resint/apps.py:27
msgid "Access PDF file for live document"
msgstr ""
#: aleksis/apps/resint/menus.py:37
msgid "Documents"
msgstr ""
......@@ -31,7 +35,7 @@ msgstr ""
msgid "Poster groups"
msgstr ""
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:212
#: aleksis/apps/resint/menus.py:68 aleksis/apps/resint/models.py:219
#: aleksis/apps/resint/templates/resint/live_document/list.html:8
#: aleksis/apps/resint/templates/resint/live_document/list.html:9
msgid "Live documents"
......@@ -45,7 +49,7 @@ msgstr ""
msgid "If you use 'example', the filename will be 'example.pdf'."
msgstr ""
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:156
#: aleksis/apps/resint/models.py:25 aleksis/apps/resint/models.py:158
#: aleksis/apps/resint/templates/resint/group/list.html:19
msgid "Name"
msgstr ""
......@@ -117,23 +121,23 @@ msgstr ""
msgid "Posters"
msgstr ""
#: aleksis/apps/resint/models.py:153
#: aleksis/apps/resint/models.py:155
msgid "Slug"
msgstr ""
#: aleksis/apps/resint/models.py:154
#: aleksis/apps/resint/models.py:156
msgid "This will be used for the name of the current PDF file."
msgstr ""
#: aleksis/apps/resint/models.py:162
#: aleksis/apps/resint/models.py:164
msgid "Current file"
msgstr ""
#: aleksis/apps/resint/models.py:166
#: aleksis/apps/resint/models.py:168
msgid "Was the last update triggered manually?"
msgstr ""
#: aleksis/apps/resint/models.py:211
#: aleksis/apps/resint/models.py:218
msgid "Live document"
msgstr ""
......@@ -261,34 +265,34 @@ msgstr ""
msgid "Upload poster"
msgstr ""
#: aleksis/apps/resint/views.py:48 aleksis/apps/resint/views.py:59
#: aleksis/apps/resint/views.py:50 aleksis/apps/resint/views.py:61
msgid "The poster group has been saved."
msgstr ""
#: aleksis/apps/resint/views.py:69
#: aleksis/apps/resint/views.py:71
msgid "The poster group has been deleted."
msgstr ""
#: aleksis/apps/resint/views.py:112
#: aleksis/apps/resint/views.py:114
msgid "The poster has been uploaded."
msgstr ""
#: aleksis/apps/resint/views.py:123
#: aleksis/apps/resint/views.py:125
msgid "The poster has been changed."
msgstr ""
#: aleksis/apps/resint/views.py:133
#: aleksis/apps/resint/views.py:135
msgid "The poster has been deleted."
msgstr ""
#: aleksis/apps/resint/views.py:195
#: aleksis/apps/resint/views.py:197
msgid "The live document has been created."
msgstr ""
#: aleksis/apps/resint/views.py:210
#: aleksis/apps/resint/views.py:212
msgid "The live document has been saved."
msgstr ""
#: aleksis/apps/resint/views.py:221
#: aleksis/apps/resint/views.py:223
msgid "The live document has been deleted."
msgstr ""
......@@ -149,6 +149,8 @@ class Poster(ExtensibleModel):
class LiveDocument(ExtensiblePolymorphicModel):
"""Model for periodically/automatically updated files."""
SCOPE_PREFIX = "live_document_pdf"
slug = models.SlugField(
verbose_name=_("Slug"),
help_text=_("This will be used for the name of the current PDF file."),
......@@ -193,6 +195,11 @@ class LiveDocument(ExtensiblePolymorphicModel):
"""Get the filename without path of the PDF file."""
return f"{self.slug}.pdf"
@property
def scope(self) -> str:
"""Return OAuth2 scope name to access PDF file via API."""
return f"{self.SCOPE_PREFIX}_{self.slug}"
def save(self, *args, **kwargs):
with reversion.create_revision():
super().save(*args, **kwargs)
......
......@@ -5,6 +5,7 @@ from .views import (
LiveDocumentDeleteView,
LiveDocumentEditView,
LiveDocumentListView,
LiveDocumentShowAPIView,
LiveDocumentShowView,
PosterCurrentView,
PosterDeleteView,
......@@ -42,4 +43,9 @@ urlpatterns = [
path(
"live_documents/<str:slug>.pdf", LiveDocumentShowView.as_view(), name="show_live_document",
),
path(
"api/live_documents/<str:slug>.pdf",
LiveDocumentShowAPIView.as_view(),
name="api_show_live_document",
),
]
from typing import Any, Dict, Type
from typing import Any, Dict, List, Type
from django.contrib.contenttypes.models import ContentType
from django.db.models import QuerySet
......@@ -15,10 +15,12 @@ from django.views.generic.list import ListView
from django_tables2 import SingleTableView
from guardian.shortcuts import get_objects_for_user
from oauth2_provider.views.mixins import ScopedResourceMixin
from reversion.views import RevisionMixin
from rules.contrib.views import PermissionRequiredMixin
from aleksis.core.mixins import AdvancedCreateView, AdvancedDeleteView, AdvancedEditView
from aleksis.core.util.auth_helpers import ClientProtectedResourceMixin
from .forms import PosterGroupForm, PosterUploadForm
from .models import LiveDocument, Poster, PosterGroup
......@@ -221,15 +223,30 @@ class LiveDocumentDeleteView(PermissionRequiredMixin, RevisionMixin, AdvancedDel
success_message = _("The live document has been deleted.")
class LiveDocumentShowView(PermissionRequiredMixin, SingleObjectMixin, View):
"""Show the current version of the live document."""
class LiveDocumentShowBaseView(SingleObjectMixin, View):
"""Base view for showing live documents."""
model = LiveDocument
permission_required = "resint.view_livedocument_rule"
def get(self, request: HttpRequest, *args: Any, **kwargs: Any) -> FileResponse:
live_document = self.get_object()
file = live_document.get_current_file()
if not file:
raise Http404
return FileResponse(file.file, content_type="application/pdf")
return FileResponse(file, content_type="application/pdf")
class LiveDocumentShowView(PermissionRequiredMixin, LiveDocumentShowBaseView):
"""Show the current version of the live document."""
permission_required = "resint.view_livedocument_rule"
class LiveDocumentShowAPIView(
ScopedResourceMixin, ClientProtectedResourceMixin, LiveDocumentShowBaseView
):
"""Show the current version of the live document in API."""
def get_scopes(self, *args, **kwargs) -> List[str]:
"""Return the scope needed to access the PDF file."""
return [self.get_object().scope]
This diff is collapsed.
[tool.poetry]
name = "AlekSIS-App-Resint"
version = "2.0b0"
version = "2.0b1"
packages = [
{ include = "aleksis" }
]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment