Skip to content
Snippets Groups Projects
Commit fbb76461 authored by Felix Schäfer's avatar Felix Schäfer :construction_worker:
Browse files

Apply black, isort

parent f6ae368b
No related branches found
No related tags found
No related merge requests found
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
try: try:
from pretix.base.plugins import PluginConfig from pretix.base.plugins import PluginConfig
except ImportError: except ImportError:
...@@ -8,13 +9,16 @@ __version__ = "1.4.0" ...@@ -8,13 +9,16 @@ __version__ = "1.4.0"
class PluginApp(PluginConfig): class PluginApp(PluginConfig):
name = 'pretix_public_registrations' name = "pretix_public_registrations"
verbose_name = 'Pretix public registrations' verbose_name = "Pretix public registrations"
class PretixPluginMeta: class PretixPluginMeta:
name = _('Pretix public registrations') name = _("Pretix public registrations")
author = 'Felix Schäfer, Dominik Weitz' author = "Felix Schäfer, Dominik Weitz"
description = _('This plugin will give the option to attendees of an event to mark their registration as public. Public registrations will be shown along their answers to questions marked as public by the organizers on a world-readable page.') description = _(
"This plugin will give the option to attendees of an event to mark their registration as public. "
"Public registrations will be shown along their answers to questions marked as public by the organizers on a world-readable page."
)
visible = True visible = True
version = __version__ version = __version__
category = "FEATURE" category = "FEATURE"
...@@ -24,4 +28,4 @@ class PluginApp(PluginConfig): ...@@ -24,4 +28,4 @@ class PluginApp(PluginConfig):
from . import signals # NOQA from . import signals # NOQA
default_app_config = 'pretix_public_registrations.PluginApp' default_app_config = "pretix_public_registrations.PluginApp"
...@@ -6,34 +6,34 @@ from pretix.base.forms import SettingsForm ...@@ -6,34 +6,34 @@ from pretix.base.forms import SettingsForm
class PublicRegistrationsForm(SettingsForm): class PublicRegistrationsForm(SettingsForm):
public_registrations_items = forms.MultipleChoiceField( public_registrations_items = forms.MultipleChoiceField(
widget=forms.CheckboxSelectMultiple( widget=forms.CheckboxSelectMultiple(
attrs={'class': 'scrolling-multiple-choice'} attrs={"class": "scrolling-multiple-choice"}
), ),
label=_('Show public registrations for'), label=_("Show public registrations for"),
required=True, required=True,
choices=[], choices=[],
) )
public_registrations_questions = forms.MultipleChoiceField( public_registrations_questions = forms.MultipleChoiceField(
widget=forms.CheckboxSelectMultiple( widget=forms.CheckboxSelectMultiple(
attrs={'class': 'scrolling-multiple-choice'} attrs={"class": "scrolling-multiple-choice"}
), ),
label=_('Publicly show answers for'), label=_("Publicly show answers for"),
required=True, required=True,
choices=[], choices=[],
) )
public_registrations_show_attendee_name = forms.BooleanField( public_registrations_show_attendee_name = forms.BooleanField(
label=_('Show attendee name'), label=_("Show attendee name"),
required=False, required=False,
) )
public_registrations_show_item_name = forms.BooleanField( public_registrations_show_item_name = forms.BooleanField(
label=_('Show product name'), label=_("Show product name"),
required=False, required=False,
) )
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields['public_registrations_items'].choices = [ self.fields["public_registrations_items"].choices = [
(i.pk, i.name) for i in self.obj.items.all() (i.pk, i.name) for i in self.obj.items.all()
] ]
self.fields['public_registrations_questions'].choices = [ self.fields["public_registrations_questions"].choices = [
(q.pk, q.question) for q in self.obj.questions.all() (q.pk, q.question) for q in self.obj.questions.all()
] ]
from django import forms from django import forms
from django.dispatch import receiver from django.dispatch import receiver
from django.template.loader import get_template from django.template.loader import get_template
from django.utils.translation import gettext_lazy as _
from django.urls import resolve, reverse from django.urls import resolve, reverse
from django.utils.translation import gettext_lazy as _
from django_gravatar.helpers import get_gravatar_url from django_gravatar.helpers import get_gravatar_url
from pretix.base.models import Order, OrderPosition, QuestionAnswer
from pretix.base.settings import settings_hierarkey
from pretix.base.signals import event_copy_data from pretix.base.signals import event_copy_data
from pretix.control.signals import nav_event_settings
from pretix.presale.signals import ( from pretix.presale.signals import (
question_form_fields, front_page_bottom, process_response, html_head front_page_bottom,
html_head,
process_response,
question_form_fields,
) )
from pretix.control.signals import nav_event_settings
from pretix.base.models import Order, OrderPosition, QuestionAnswer
from pretix.base.settings import settings_hierarkey
settings_hierarkey.add_default("public_registrations_items", [], list)
settings_hierarkey.add_default('public_registrations_items', [], list) settings_hierarkey.add_default("public_registrations_questions", [], list)
settings_hierarkey.add_default('public_registrations_questions', [], list) settings_hierarkey.add_default("public_registrations_show_attendee_name", False, bool)
settings_hierarkey.add_default('public_registrations_show_attendee_name', False, bool) settings_hierarkey.add_default("public_registrations_show_item_name", False, bool)
settings_hierarkey.add_default('public_registrations_show_item_name', False, bool)
@receiver(html_head, dispatch_uid="public_registrations_html_head") @receiver(html_head, dispatch_uid="public_registrations_html_head")
def add_public_registrations_html_head(sender, request=None, **kwargs): def add_public_registrations_html_head(sender, request=None, **kwargs):
url = resolve(request.path_info) url = resolve(request.path_info)
if "event.index" not in url.url_name: return "" if "event.index" not in url.url_name:
cached = sender.cache.get('public_registrations_html_head') return ""
cached = sender.cache.get("public_registrations_html_head")
if cached is None: if cached is None:
cached = get_template("pretix_public_registrations/head.html").render() cached = get_template("pretix_public_registrations/head.html").render()
sender.cache.set('public_registrations_html_head', cached) sender.cache.set("public_registrations_html_head", cached)
return cached return cached
@receiver(question_form_fields, dispatch_uid="public_registration_question") @receiver(question_form_fields, dispatch_uid="public_registration_question")
def add_public_registration_question(sender, position, **kwargs): def add_public_registration_question(sender, position, **kwargs):
if str(position.item.pk) not in sender.settings.get('public_registrations_items'): if str(position.item.pk) not in sender.settings.get("public_registrations_items"):
return {} return {}
public_questions = sender.questions.filter( public_questions = sender.questions.filter(
pk__in=sender.settings.get('public_registrations_questions') pk__in=sender.settings.get("public_registrations_questions")
) )
headers = ( headers = (
[_("Product")] if sender.settings.get('public_registrations_show_item_name') else [] (
) + ( [_("Product")]
[_("Name")] if sender.settings.get('public_registrations_show_attendee_name') else [] if sender.settings.get("public_registrations_show_item_name")
) + [ else []
q.question for q in public_questions )
] + (
return {'public_registrations_public_registration': forms.BooleanField( [_("Name")]
label=_('Public registration'), if sender.settings.get("public_registrations_show_attendee_name")
required=False, else []
help_text=_( )
'A gravatar image based on a hash of your e-mail address as well as the answers to ' + [q.question for q in public_questions]
'the following questions will be publicly shown: %(qlist)s' )
) % {'qlist': ", ".join(str(h) for h in headers)}, return {
)} "public_registrations_public_registration": forms.BooleanField(
label=_("Public registration"),
required=False,
help_text=_(
"A gravatar image based on a hash of your e-mail address as well as the answers to "
"the following questions will be publicly shown: %(qlist)s"
)
% {"qlist": ", ".join(str(h) for h in headers)},
)
}
@receiver(signal=front_page_bottom, dispatch_uid="public_registrations_table") @receiver(signal=front_page_bottom, dispatch_uid="public_registrations_table")
def add_public_registrations_table(sender, **kwargs): def add_public_registrations_table(sender, **kwargs):
if not sender.settings.get('public_registrations_items') and not ( if not sender.settings.get("public_registrations_items") and not (
sender.settings.get('public_registrations_questions') sender.settings.get("public_registrations_questions")
and sender.settings.get('public_registrations_show_item_name') and sender.settings.get("public_registrations_show_item_name")
and sender.settings.get('public_registrations_show_attendee_name') and sender.settings.get("public_registrations_show_attendee_name")
): ):
return "" return ""
public_questions = sender.questions.filter( public_questions = sender.questions.filter(
pk__in=sender.settings.get('public_registrations_questions') pk__in=sender.settings.get("public_registrations_questions")
) )
headers = ( headers = (
[_("Product")] if sender.settings.get('public_registrations_show_item_name') else [] (
) + ( [_("Product")]
[_("Name")] if sender.settings.get('public_registrations_show_attendee_name') else [] if sender.settings.get("public_registrations_show_item_name")
) + [ else []
q.question for q in public_questions )
] + (
order_positions = OrderPosition.objects.filter( [_("Name")]
order__event=sender, if sender.settings.get("public_registrations_show_attendee_name")
item__pk__in=sender.settings.get('public_registrations_items'), else []
order__testmode=(sender.testmode) )
).exclude( + [q.question for q in public_questions]
order__status=Order.STATUS_CANCELED )
).order_by('order__datetime') order_positions = (
OrderPosition.objects.filter(
order__event=sender,
item__pk__in=sender.settings.get("public_registrations_items"),
order__testmode=(sender.testmode),
)
.exclude(order__status=Order.STATUS_CANCELED)
.order_by("order__datetime")
)
public_order_positions = [ public_order_positions = [
op for op in order_positions op
if op.meta_info_data.get('question_form_data', {}).get('public_registrations_public_registration') for op in order_positions
if op.meta_info_data.get("question_form_data", {}).get(
"public_registrations_public_registration"
)
] ]
answers = QuestionAnswer.objects.filter( answers = QuestionAnswer.objects.filter(
orderposition__in=public_order_positions, question__in=public_questions orderposition__in=public_order_positions, question__in=public_questions
) )
public_answers = { public_answers = {(a.orderposition_id, a.question_id): a for a in answers}
(a.orderposition_id, a.question_id): a
for a in answers
}
public_registrations = [ public_registrations = [
{ {
'gr_url': get_gravatar_url(pop.attendee_email or pop.order.code, size=24, default="wavatar"), "gr_url": get_gravatar_url(
'fields': ( pop.attendee_email or pop.order.code, size=24, default="wavatar"
[pop.item.name] if sender.settings.get('public_registrations_show_item_name') else [] ),
) + ( "fields": (
[pop.attendee_name_cached] if sender.settings.get('public_registrations_show_attendee_name') else [] [pop.item.name]
) + [ if sender.settings.get("public_registrations_show_item_name")
public_answers[(pop.pk, pq.pk)].answer if public_answers.get((pop.pk, pq.pk)) else '' else []
)
+ (
[pop.attendee_name_cached]
if sender.settings.get("public_registrations_show_attendee_name")
else []
)
+ [
public_answers[(pop.pk, pq.pk)].answer
if public_answers.get((pop.pk, pq.pk))
else ""
for pq in public_questions for pq in public_questions
] ],
} for pop in public_order_positions }
for pop in public_order_positions
] ]
template = get_template('pretix_public_registrations/front_page.html') template = get_template("pretix_public_registrations/front_page.html")
return template.render({ return template.render(
'headers': headers, {"headers": headers, "public_registrations": public_registrations}
'public_registrations': public_registrations )
})
@receiver(signal=process_response, dispatch_uid="public_registragions_csp_headers") @receiver(signal=process_response, dispatch_uid="public_registragions_csp_headers")
def add_public_registrations_csp_headers(sender, request=None, response=None, **kwargs): def add_public_registrations_csp_headers(sender, request=None, response=None, **kwargs):
if "event.index" in resolve(request.path_info).url_name: if "event.index" in resolve(request.path_info).url_name:
response['Content-Security-Policy'] = "img-src https://secure.gravatar.com" response["Content-Security-Policy"] = "img-src https://secure.gravatar.com"
return response return response
@receiver(signal=nav_event_settings, dispatch_uid="public_registrations_nav_settings") @receiver(signal=nav_event_settings, dispatch_uid="public_registrations_nav_settings")
def navbar_settings(sender, request=None, **kwargs): def navbar_settings(sender, request=None, **kwargs):
url = resolve(request.path_info) url = resolve(request.path_info)
return [{ return [
'label': _('Public registrations'), {
'url': reverse('plugins:pretix_public_registrations:settings', kwargs={ "label": _("Public registrations"),
'event': request.event.slug, "url": reverse(
'organizer': request.organizer.slug, "plugins:pretix_public_registrations:settings",
}), kwargs={
'active': url.namespace == 'plugins:pretix_public_registrations' and url.url_name == 'settings', "event": request.event.slug,
}] "organizer": request.organizer.slug,
},
),
"active": url.namespace == "plugins:pretix_public_registrations"
and url.url_name == "settings",
}
]
@receiver(signal=event_copy_data, dispatch_uid="public_registrations_event_copy_data") @receiver(signal=event_copy_data, dispatch_uid="public_registrations_event_copy_data")
def event_copy_public_registrations_data(sender, other, item_map, question_map, **_): def event_copy_public_registrations_data(sender, other, item_map, question_map, **_):
sender.settings.set( sender.settings.set(
'public_registrations_items', "public_registrations_items",
[ [
str(item_map[int(old_id)].pk) str(item_map[int(old_id)].pk)
for old_id in other.settings.get('public_registrations_items') for old_id in other.settings.get("public_registrations_items")
] ],
) )
sender.settings.set( sender.settings.set(
'public_registrations_questions', "public_registrations_questions",
[ [
str(question_map[int(old_id)].pk) str(question_map[int(old_id)].pk)
for old_id in other.settings.get('public_registrations_questions') for old_id in other.settings.get("public_registrations_questions")
] ],
) )
...@@ -3,5 +3,9 @@ from django.conf.urls import url ...@@ -3,5 +3,9 @@ from django.conf.urls import url
from .views import PublicParticipationsView from .views import PublicParticipationsView
urlpatterns = [ urlpatterns = [
url(r'^control/event/(?P<organizer>[^/]+)/(?P<event>[^/]+)/public_participations/$', PublicParticipationsView.as_view(), name='settings') url(
r"^control/event/(?P<organizer>[^/]+)/(?P<event>[^/]+)/public_participations/$",
PublicParticipationsView.as_view(),
name="settings",
)
] ]
from django.urls import reverse from django.urls import reverse
from pretix.control.views.event import EventSettingsViewMixin, EventSettingsFormView from pretix.control.views.event import EventSettingsFormView, EventSettingsViewMixin
from pretix.base.models import Event
from .forms import PublicRegistrationsForm from .forms import PublicRegistrationsForm
class PublicParticipationsView(EventSettingsViewMixin, EventSettingsFormView): class PublicParticipationsView(EventSettingsViewMixin, EventSettingsFormView):
form_class = PublicRegistrationsForm form_class = PublicRegistrationsForm
template_name = 'pretix_public_registrations/settings.html' template_name = "pretix_public_registrations/settings.html"
def get_success_url(self, **kwargs): def get_success_url(self, **kwargs):
return reverse('plugins:pretix_public_registrations:settings', kwargs={ return reverse(
'organizer': self.request.event.organizer.slug, "plugins:pretix_public_registrations:settings",
'event': self.request.event.slug, kwargs={
}) "organizer": self.request.event.organizer.slug,
"event": self.request.event.slug,
},
)
...@@ -7,46 +7,47 @@ from setuptools import setup, find_packages ...@@ -7,46 +7,47 @@ from setuptools import setup, find_packages
from pretix_public_registrations import __version__ from pretix_public_registrations import __version__
try: try:
with open(os.path.join(os.path.dirname(__file__), 'README.rst'), encoding='utf-8') as f: with open(
os.path.join(os.path.dirname(__file__), "README.rst"), encoding="utf-8"
) as f:
long_description = f.read() long_description = f.read()
except Exception: except Exception:
long_description = '' long_description = ""
class CustomBuild(build): class CustomBuild(build):
def run(self): def run(self):
management.call_command('compilemessages', verbosity=1) management.call_command("compilemessages", verbosity=1)
build.run(self) build.run(self)
cmdclass = { cmdclass = {"build": CustomBuild}
'build': CustomBuild
}
setup( setup(
name='pretix-public-registrations', name="pretix-public-registrations",
version=__version__, version=__version__,
description='This plugin will give the option to attendees of an event to mark their registration as public. Public registrations will be shown along their answers to questions marked as public by the organizers on a world-readable page.', description="This plugin will give the option to attendees of an event to mark their registration as public. "
"Public registrations will be shown along their answers to questions marked as public by the organizers on a world-readable page.",
long_description=long_description, long_description=long_description,
keywords="pretix public registrations", keywords="pretix public registrations",
url="https://gitlab.fachschaften.org/kif/pretix-public-registrations", url="https://gitlab.fachschaften.org/kif/pretix-public-registrations",
project_urls={ project_urls={
"Bug Tracker": 'https://gitlab.fachschaften.org/kif/pretix-public-registrations/issues', "Bug Tracker": "https://gitlab.fachschaften.org/kif/pretix-public-registrations/issues",
"Source Code": 'https://gitlab.fachschaften.org/kif/pretix-public-registrations/tree/master', "Source Code": "https://gitlab.fachschaften.org/kif/pretix-public-registrations/tree/master",
}, },
author='Felix Schäfer, Dominik Weitz', author="Felix Schäfer, Dominik Weitz",
author_email='admin@kif.rocks', author_email="admin@kif.rocks",
license='MIT', license="MIT",
classifiers=[ classifiers=[
"Development Status :: 5 - Production/Stable", "Development Status :: 5 - Production/Stable",
"Environment :: Plugins", "Environment :: Plugins",
"Framework :: Django", "Framework :: Django",
"License :: OSI Approved :: MIT License", "License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3" "Programming Language :: Python :: 3",
], ],
install_requires=['django-gravatar2'], install_requires=["django-gravatar2"],
packages=find_packages(exclude=['tests', 'tests.*']), packages=find_packages(exclude=["tests", "tests.*"]),
include_package_data=True, include_package_data=True,
cmdclass=cmdclass, cmdclass=cmdclass,
entry_points=""" entry_points="""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment