forked from CGM_Public/pretix_original
Add JSONField for device metadata (#2550)
This commit is contained in:
@@ -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.
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
18
src/pretix/base/migrations/0209_device_info.py
Normal file
18
src/pretix/base/migrations/0209_device_info.py
Normal 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),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -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')
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user