Fix #492 -- Force deterministic ordering of some signals

This commit is contained in:
Raphael Michel
2017-05-15 13:09:23 +02:00
parent 5ff6d0b014
commit 7769aaccea
6 changed files with 8 additions and 7 deletions

View File

@@ -50,7 +50,7 @@ class EventPluginSignal(django.dispatch.Signal):
if not hasattr(app, 'compatibility_errors') or not app.compatibility_errors:
response = receiver(signal=self, sender=sender, **named)
responses.append((receiver, response))
return responses
return sorted(responses, key=lambda r: (receiver.__module__, receiver.__name__))
class DeprecatedSignal(django.dispatch.Signal):

View File

@@ -45,12 +45,12 @@ def contextprocessor(request):
if not hasattr(request, 'event'):
for receiver, response in nav_global.send(request, request=request):
_nav_global += response
ctx['nav_global'] = _nav_global
ctx['nav_global'] = sorted(_nav_global, key=lambda n: n['label'])
_nav_topbar = []
for receiver, response in nav_topbar.send(request, request=request):
_nav_topbar += response
ctx['nav_topbar'] = _nav_topbar
ctx['nav_topbar'] = sorted(_nav_topbar, key=lambda n: n['label'])
ctx['js_datetime_format'] = get_javascript_format('DATETIME_INPUT_FORMATS')
ctx['js_date_format'] = get_javascript_format('DATE_INPUT_FORMATS')

View File

@@ -29,7 +29,7 @@ class GlobalSettingsForm(SettingsForm):
))
])
responses = register_global_settings.send(self)
for r, response in responses:
for r, response in sorted(responses, key=lambda r: str(r[0])):
for key, value in response.items():
# We need to be this explicit, since OrderedDict.update does not retain ordering
self.fields[key] = value

View File

@@ -674,7 +674,7 @@ class EventLive(EventPermissionRequiredMixin, TemplateView):
issues.append(_('You need to configure at least one quota to sell anything.'))
responses = event_live_issues.send(self.request.event)
for receiver, response in responses:
for receiver, response in sorted(responses, key=lambda r: str(r[0])):
if response:
issues.append(response)

View File

@@ -48,6 +48,7 @@ class OrganizerDetailViewMixin:
for recv, retv in nav_organizer.send(sender=self.request.organizer, request=self.request,
organizer=self.request.organizer):
ctx['nav_organizer'] += retv
ctx['nav_organizer'].sort(key=lambda n: n['label'])
return ctx
def get_object(self, queryset=None) -> Organizer:

View File

@@ -21,7 +21,6 @@ from pretix.control.permissions import EventPermissionRequiredMixin
from pretix.control.views import ChartContainingView
from pretix.helpers.database import rolledback_transaction
from pretix.plugins.ticketoutputpdf.signals import get_fonts
from .ticketoutput import PdfTicketOutput
logger = logging.getLogger(__name__)
@@ -95,7 +94,8 @@ class EditorView(EventPermissionRequiredMixin, ChartContainingView, TemplateView
p = order.positions.create(item=item, attendee_name=_("John Doe"), price=item.default_price)
prov = PdfTicketOutput(request.event,
override_layout=json.loads(request.POST.get("data")),
override_layout=(json.loads(request.POST.get("data"))
if request.POST.get("data") else None),
override_background=cf.file if cf else None)
fname, mimet, data = prov.generate(p)