Skip to content

Commit

Permalink
Add export for meetings (SEA-1311).
Browse files Browse the repository at this point in the history
  • Loading branch information
cyrillkuettel committed Jun 19, 2024
1 parent 8d115de commit c5c7a94
Show file tree
Hide file tree
Showing 27 changed files with 648 additions and 390 deletions.
Empty file added .chameleon-cache/.gitkeep
Empty file.
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ repos:
- id: untranslated-messages
files: '\.po$'
- repo: https://github.com/PyCQA/flake8
rev: 7.0.0
rev: 7.1.0
hooks:
- id: flake8
types: [file]
Expand Down
26 changes: 15 additions & 11 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# This file was autogenerated by uv via the following command:
# uv pip compile setup.cfg - -o requirements.txt --no-emit-package setuptools
-e .
# via -r -
alembic==1.13.1
# via
# privatim (setup.cfg)
Expand All @@ -22,7 +21,7 @@ bcrypt==4.1.3
# privatim
beaker==1.13.0
# via pyramid-beaker
certifi==2024.2.2
certifi==2024.6.2
# via
# requests
# sentry-sdk
Expand All @@ -36,7 +35,7 @@ click==8.1.7
# privatim
dnspython==2.6.1
# via email-validator
email-validator==2.1.1
email-validator==2.1.2
# via
# privatim (setup.cfg)
# privatim
Expand All @@ -60,7 +59,7 @@ idna==3.7
# via
# email-validator
# requests
mako==1.3.3
mako==1.3.5
# via
# alembic
# pyramid-mako
Expand All @@ -79,7 +78,7 @@ nh3==0.2.17
# via
# privatim (setup.cfg)
# privatim
packaging==24.0
packaging==24.1
# via zope-sqlalchemy
pastedeploy==3.1.0
# via plaster-pastedeploy
Expand All @@ -102,6 +101,10 @@ psycopg2==2.9.9
# privatim
pygments==2.18.0
# via pyramid-debugtoolbar
pypdf==4.2.0
# via
# privatim (setup.cfg)
# privatim
pyramid==2.0.2
# via
# privatim (setup.cfg)
Expand Down Expand Up @@ -147,13 +150,13 @@ python-magic==0.4.27
# privatim
pytz==2024.1
# via sedate
requests==2.31.0
requests==2.32.3
# via apache-libcloud
sedate==1.0.3.post1
sedate==1.1.0
# via
# privatim (setup.cfg)
# privatim
sentry-sdk==2.1.1
sentry-sdk==2.5.1
# via
# privatim (setup.cfg)
# privatim
Expand Down Expand Up @@ -185,13 +188,14 @@ translationstring==1.4
# via pyramid
types-python-dateutil==2.9.0.20240316
# via arrow
typing-extensions==4.11.0
typing-extensions==4.12.2
# via
# privatim (setup.cfg)
# alembic
# privatim
# pypdf
# sqlalchemy
urllib3==2.2.1
urllib3==2.2.2
# via
# requests
# sentry-sdk
Expand Down Expand Up @@ -225,7 +229,7 @@ zope-event==5.0
# privatim (setup.cfg)
# privatim
# zope-schema
zope-interface==6.3
zope-interface==6.4.post2
# via
# privatim (setup.cfg)
# privatim
Expand Down
3 changes: 3 additions & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ install_requires =
pyramid_tm
pyramid_retry
python-magic
pypdf
Pillow
sentry_sdk
sedate
Expand All @@ -53,6 +54,7 @@ install_requires =
typing_extensions
WebOb
waitress
WeasyPrint
WTForms
werkzeug
plaster_pastedeploy
Expand Down Expand Up @@ -116,6 +118,7 @@ test =
bandit[toml]
flake8
flake8-bugbear
freezegun
hypothesis
pytest
pytest-cov
Expand Down
21 changes: 21 additions & 0 deletions src/privatim/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from functools import partial
from fanstatic import Fanstatic
from privatim.layouts.action_menu import ActionMenuEntry
from pyramid.config import Configurator
from pyramid_beaker import session_factory_from_settings
from sqlalchemy import Table, MetaData, Column, ForeignKey
Expand All @@ -25,6 +27,7 @@
if TYPE_CHECKING:
from _typeshed.wsgi import WSGIApplication
from privatim.cli.upgrade import UpgradeContext
from pyramid.interfaces import IRequest


def includeme(config: Configurator) -> None:
Expand Down Expand Up @@ -68,6 +71,24 @@ def includeme(config: Configurator) -> None:
config.add_request_method(user_pic_url, 'user_pic', property=True)
config.add_request_method(MessageQueue, 'messages', reify=True)

def add_action_menu_entry(
request: 'IRequest',
title: str,
url: str,
) -> None:
""" The entries are temporarily stored on the request object. They are
then retrieved in action_menu.py
"""
if not hasattr(request, 'action_menu_entries'):
request.action_menu_entries = []
request.action_menu_entries.append(ActionMenuEntry(title, url))

config.add_request_method(
lambda request: partial(add_action_menu_entry, request),
'add_action_menu_entry',
reify=True
)


def main(
global_config: Any, **settings: Any
Expand Down
5 changes: 2 additions & 3 deletions src/privatim/cli/initialize_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,8 @@ def add_example_content(
status = Status(name='In Überprüfung')
tags = [Tag(name=n) for n in ['AG', 'ZH']]
here = Path(__file__).parent
pdfname = ('sample-pdf-for-initialize-db/privatim_Vernehmlassung_VEMZ'
'.pdf')
pdf = here / pdfname
pdfname = 'privatim_Vernehmlassung_VEMZ.pdf'
pdf = here / 'sample-pdf-for-initialize-db/' / pdfname
content = pdf.read_bytes()
consultation = Consultation(
documents=[ConsultationDocument(name=pdfname, content=content)],
Expand Down
8 changes: 8 additions & 0 deletions src/privatim/layouts/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from typing import TYPE_CHECKING

from privatim.layouts.action_menu import action_menu

from .flash import flash
from .layout import Layout
from .navbar import navbar
Expand Down Expand Up @@ -33,3 +35,9 @@ def includeme(config: 'Configurator') -> None:
name='footer',
renderer='footer.pt'
)

config.add_panel(
panel=action_menu,
name='action_menu',
renderer='action_menu.pt'
)
18 changes: 18 additions & 0 deletions src/privatim/layouts/action_menu.pt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<div class="container" i18n:domain="privatim">
<div class="dropdown">
<a class="btn btn-secondary dropdown-toggle w-20" type="button" id="actionMenuDropdown"
data-bs-toggle="dropdown"
aria-haspopup="true" aria-expanded="false" i18n:translate="">
Actions
</a>
<div class="dropdown-menu dropdown-secondary" aria-labelledby="actionMenuDropdown">
<tal:b tal:condition="action_menu_entries" tal:repeat="action_menu_entry action_menu_entries"
tal:replace="action_menu_entry">
<tal:b tal:condition="len(action_menu_entries) > 1">
<hr class="dropdown-divider">
</tal:b>
<!--? <a class="dropdown-item" href="#" i18n:translate="">Action</a>-->
</tal:b>
</div>
</div>
</div>
27 changes: 27 additions & 0 deletions src/privatim/layouts/action_menu.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from pyramid.interfaces import IRequest
from privatim.types import RenderData


class ActionMenuEntry:
def __init__(self, title: str, url: str):
self.title = title
self.url = url

def __call__(self) -> str:
return f'<a class="dropdown-item" href="{self.url}">{self.title}</a>'

def __str__(self) -> str:
return self.__call__()

def __html__(self) -> str:
return self.__call__()

def __repr__(self) -> str:
return f'<ActionMenuEntry: {self.title}>'


def action_menu(context: object, request: 'IRequest') -> 'RenderData':
action_menu_entries = getattr(request, 'action_menu_entries', [])
return {'action_menu_entries': action_menu_entries}
Binary file modified src/privatim/locale/de/LC_MESSAGES/privatim.mo
Binary file not shown.
28 changes: 22 additions & 6 deletions src/privatim/locale/de/LC_MESSAGES/privatim.po
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE 1.0\n"
"POT-Creation-Date: 2024-06-17 23:23+0200\n"
"POT-Creation-Date: 2024-06-19 22:52+0200\n"
"PO-Revision-Date: 2024-05-21 21:20+0200\n"
"Last-Translator: cyrill <[email protected]>\n"
"Language-Team: German <[email protected]>\n"
Expand Down Expand Up @@ -41,6 +41,10 @@ msgstr "Kontakt"
msgid "Close"
msgstr "Schliessen"

#: src/privatim/layouts/action_menu.pt
msgid "Actions"
msgstr "Aktionen"

#: src/privatim/layouts/macros.pt
msgid "Message"
msgstr "Nachricht"
Expand Down Expand Up @@ -98,6 +102,10 @@ msgstr "Profilbild erfolgreich geändert"
msgid "Successfully deleted file \"${title}\""
msgstr "Datei \"${title}\" erfolgreich gelöscht"

#: src/privatim/views/meetings.py
msgid "Export meeting protocol"
msgstr "Sitzungsprotokoll exportieren"

#: src/privatim/views/meetings.py src/privatim/forms/agenda_item_form.py
msgid "Edit Agenda Item"
msgstr "Traktandum bearbeiten"
Expand Down Expand Up @@ -226,10 +234,12 @@ msgid "Save"
msgstr "Speichern"

#: src/privatim/views/templates/meeting.pt
#: src/privatim/reporting/template/report.pt
msgid "Date / Time:"
msgstr "Datum / Zeit:"

#: src/privatim/views/templates/meeting.pt
#: src/privatim/reporting/template/report.pt
msgid "Attendees:"
msgstr "Teilnehmende:"

Expand All @@ -239,6 +249,7 @@ msgid "Working Group:"
msgstr "Gremium:"

#: src/privatim/views/templates/meeting.pt
#: src/privatim/reporting/template/report.pt
msgid "Agenda Items"
msgstr "Traktanden"

Expand All @@ -248,19 +259,20 @@ msgid "Add Agenda Item"
msgstr "Traktandum hinzufügen"

#: src/privatim/views/templates/working_group.pt
#: src/privatim/reporting/template/report.pt
msgid "Working Group"
msgstr "Gremium"

#: src/privatim/views/templates/working_group.pt
#: src/privatim/forms/meeting_form.py
msgid "Add Meeting"
msgstr "Sitzung hinzufügen"

#: src/privatim/views/templates/working_group.pt
#: src/privatim/forms/working_group_forms.py
msgid "Leader"
msgstr "Leiter"

#: src/privatim/views/templates/working_group.pt
#: src/privatim/forms/meeting_form.py
msgid "Add Meeting"
msgstr "Sitzung hinzufügen"

#: src/privatim/views/templates/working_group.pt
msgid ""
"Here you can add meetings in the context of a working group. Click \"Add "
Expand Down Expand Up @@ -578,5 +590,9 @@ msgstr "Weitere Dokumente hochladen"
msgid "Select..."
msgstr "Auswählen"

#: src/privatim/reporting/template/report.pt
msgid "Protocol of meeting ${document.title}"
msgstr "Protokoll der Sitzung ${document.title}"

#~ msgid "Do you really wish to delete \"${item_title}\"?"
#~ msgstr "Möchten Sie \"${item_title}\" wirklich löschen?"
Binary file modified src/privatim/locale/fr/LC_MESSAGES/privatim.mo
Binary file not shown.
Loading

0 comments on commit c5c7a94

Please sign in to comment.