From ee2bc93608d353be8ab85246d85c98f2455d94b3 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 29 Oct 2024 11:30:35 +0100 Subject: [PATCH] Fix handling of device_info_updated signal --- src/pretix/api/views/device.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/pretix/api/views/device.py b/src/pretix/api/views/device.py index 770498bd97..6db8e5a56a 100644 --- a/src/pretix/api/views/device.py +++ b/src/pretix/api/views/device.py @@ -20,6 +20,7 @@ # . # import base64 +import copy import logging from cryptography.hazmat.backends.openssl.backend import Backend @@ -146,6 +147,8 @@ class InitializeView(APIView): permission_classes = () def post(self, request, format=None): + from pretix.base.signals import device_info_updated + serializer = InitializationRequestSerializer(data=request.data) serializer.is_valid(raise_exception=True) @@ -160,6 +163,8 @@ class InitializeView(APIView): if device.revoked: raise ValidationError({'token': ['This initialization token has been revoked.']}) + old_instance = copy.copy(device) + device.initialized = now() device.hardware_brand = serializer.validated_data.get('hardware_brand') device.hardware_model = serializer.validated_data.get('hardware_model') @@ -174,6 +179,10 @@ class InitializeView(APIView): device.log_action('pretix.device.initialized', data=serializer.validated_data, auth=device) + device_info_updated.send( + sender=Device, old_device=old_instance, new_device=device + ) + serializer = DeviceSerializer(device) return Response(serializer.data) @@ -182,9 +191,12 @@ class UpdateView(APIView): authentication_classes = (DeviceTokenAuthentication,) def post(self, request, format=None): + from pretix.base.signals import device_info_updated + serializer = UpdateRequestSerializer(data=request.data) serializer.is_valid(raise_exception=True) device = request.auth + old_instance = copy.copy(device) device.hardware_brand = serializer.validated_data.get('hardware_brand') device.hardware_model = serializer.validated_data.get('hardware_model') device.os_name = serializer.validated_data.get('os_name') @@ -200,9 +212,8 @@ class UpdateView(APIView): device.save() device.log_action('pretix.device.updated', data=serializer.validated_data, auth=device) - from ...base.signals import device_info_updated device_info_updated.send( - sender=Device, old_device=request.auth, new_device=device + sender=Device, old_device=old_instance, new_device=device ) serializer = DeviceSerializer(device)