Add JSONField for device metadata (#2550)

This commit is contained in:
Raphael Michel
2022-03-24 11:55:44 +01:00
committed by GitHub
parent 2486c3d205
commit 9e5403333c
5 changed files with 33 additions and 3 deletions

View File

@@ -99,7 +99,8 @@ following endpoint:
"hardware_brand": "Samsung", "hardware_brand": "Samsung",
"hardware_model": "Galaxy S", "hardware_model": "Galaxy S",
"software_brand": "pretixdroid", "software_brand": "pretixdroid",
"software_version": "4.1.0" "software_version": "4.1.0",
"info": {"arbitrary": "data"}
} }
You will receive a response equivalent to the response of your initialization request. You will receive a response equivalent to the response of your initialization request.

View File

@@ -42,6 +42,7 @@ class InitializationRequestSerializer(serializers.Serializer):
hardware_model = serializers.CharField(max_length=190) hardware_model = serializers.CharField(max_length=190)
software_brand = serializers.CharField(max_length=190) software_brand = serializers.CharField(max_length=190)
software_version = serializers.CharField(max_length=190) software_version = serializers.CharField(max_length=190)
info = serializers.JSONField(required=False, allow_null=True)
class UpdateRequestSerializer(serializers.Serializer): class UpdateRequestSerializer(serializers.Serializer):
@@ -49,6 +50,7 @@ class UpdateRequestSerializer(serializers.Serializer):
hardware_model = serializers.CharField(max_length=190) hardware_model = serializers.CharField(max_length=190)
software_brand = serializers.CharField(max_length=190) software_brand = serializers.CharField(max_length=190)
software_version = serializers.CharField(max_length=190) software_version = serializers.CharField(max_length=190)
info = serializers.JSONField(required=False, allow_null=True)
class GateSerializer(serializers.ModelSerializer): class GateSerializer(serializers.ModelSerializer):
@@ -94,6 +96,7 @@ class InitializeView(APIView):
device.hardware_model = serializer.validated_data.get('hardware_model') device.hardware_model = serializer.validated_data.get('hardware_model')
device.software_brand = serializer.validated_data.get('software_brand') device.software_brand = serializer.validated_data.get('software_brand')
device.software_version = serializer.validated_data.get('software_version') device.software_version = serializer.validated_data.get('software_version')
device.info = serializer.validated_data.get('info')
device.api_token = generate_api_token() device.api_token = generate_api_token()
device.save() device.save()
@@ -114,6 +117,7 @@ class UpdateView(APIView):
device.hardware_model = serializer.validated_data.get('hardware_model') device.hardware_model = serializer.validated_data.get('hardware_model')
device.software_brand = serializer.validated_data.get('software_brand') device.software_brand = serializer.validated_data.get('software_brand')
device.software_version = serializer.validated_data.get('software_version') device.software_version = serializer.validated_data.get('software_version')
device.info = serializer.validated_data.get('info')
device.save() device.save()
device.log_action('pretix.device.updated', data=serializer.validated_data, auth=device) device.log_action('pretix.device.updated', data=serializer.validated_data, auth=device)

View File

@@ -0,0 +1,18 @@
# Generated by Django 3.2.12 on 2022-03-22 11:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pretixbase', '0208_auto_20220214_1632'),
]
operations = [
migrations.AddField(
model_name='device',
name='info',
field=models.JSONField(null=True),
),
]

View File

@@ -156,6 +156,9 @@ class Device(LoggedModel):
null=True, null=True,
blank=False blank=False
) )
info = models.JSONField(
null=True, blank=True,
)
objects = ScopedManager(organizer='organizer') objects = ScopedManager(organizer='organizer')

View File

@@ -128,11 +128,15 @@ def test_update_valid_fields(device_client, device: Device):
'hardware_brand': 'Samsung', 'hardware_brand': 'Samsung',
'hardware_model': 'Galaxy S', 'hardware_model': 'Galaxy S',
'software_brand': 'pretixdroid', 'software_brand': 'pretixdroid',
'software_version': '5.0.0' 'software_version': '5.0.0',
}) 'info': {
'foo': 'bar'
},
}, format='json')
assert resp.status_code == 200 assert resp.status_code == 200
device.refresh_from_db() device.refresh_from_db()
assert device.software_version == '5.0.0' assert device.software_version == '5.0.0'
assert device.info == {'foo': 'bar'}
@pytest.mark.django_db @pytest.mark.django_db