mirror of
https://github.com/daniviga/bite.git
synced 2025-02-17 05:59:14 +01:00
Manage serial numbers on POST (#7)
* Update subscription if exists * POST with serial #
This commit is contained in:
parent
e4a3684951
commit
4cebe6a8f5
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,3 +1,5 @@
|
|||||||
|
*.swp
|
||||||
|
|
||||||
# Byte-compiled / optimized / DLL files
|
# Byte-compiled / optimized / DLL files
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.py[cod]
|
*.py[cod]
|
||||||
|
@ -80,7 +80,7 @@ void setup(void) {
|
|||||||
Serial.println("DEBUG: clock updated via NTP.");
|
Serial.println("DEBUG: clock updated via NTP.");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
json["device"] = 1; // FIXME
|
json["device"] = serial;
|
||||||
// payload["id"] = serverName;
|
// payload["id"] = serverName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,16 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.conf import settings
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
|
|
||||||
|
|
||||||
def device_validation(value):
|
def device_validation(value):
|
||||||
published_devices = WhiteList.objects.filter(serial=value,
|
if settings.SKIP_WHITELIST and settings.DEBUG:
|
||||||
is_published=True)
|
return # skip validation in debug mode when SKIP_WHITELIST is True
|
||||||
|
|
||||||
|
published_devices = WhiteList.objects.filter(
|
||||||
|
serial=value,
|
||||||
|
is_published=True
|
||||||
|
)
|
||||||
if not published_devices:
|
if not published_devices:
|
||||||
raise ValidationError("Device is not published")
|
raise ValidationError("Device is not published")
|
||||||
|
|
||||||
|
@ -1,14 +1,21 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from api.models import Device, WhiteList
|
from api.models import Device, device_validation
|
||||||
|
|
||||||
|
|
||||||
class DeviceSerializer(serializers.ModelSerializer):
|
class DeviceSerializer(serializers.ModelSerializer):
|
||||||
|
serial = serializers.CharField(
|
||||||
|
max_length=128,
|
||||||
|
validators=[device_validation],
|
||||||
|
) # disable unique validation
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Device
|
model = Device
|
||||||
fields = ('serial', 'creation_time', 'updated_time',)
|
fields = '__all__'
|
||||||
|
read_only_fields = ('creation_time', 'updated_time')
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
# class WhiteListSerializer(serializers.ModelSerializer):
|
device, created = Device.objects.update_or_create(
|
||||||
# class Meta:
|
serial=validated_data['serial'],
|
||||||
# model = Device
|
defaults={'serial': validated_data['serial']},
|
||||||
# fields = ('serial', 'creation_time', 'updated_time',)
|
)
|
||||||
|
return device
|
||||||
|
@ -125,3 +125,5 @@ USE_TZ = True
|
|||||||
# https://docs.djangoproject.com/en/3.0/howto/static-files/
|
# https://docs.djangoproject.com/en/3.0/howto/static-files/
|
||||||
|
|
||||||
STATIC_URL = '/static/'
|
STATIC_URL = '/static/'
|
||||||
|
|
||||||
|
SKIP_WHITELIST = True
|
||||||
|
@ -1,20 +1,14 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from api.serializers import DeviceSerializer
|
from api.models import Device
|
||||||
from telemetry.models import Telemetry
|
from telemetry.models import Telemetry
|
||||||
|
|
||||||
|
|
||||||
class TelemetrySerializer(serializers.ModelSerializer):
|
class TelemetrySerializer(serializers.ModelSerializer):
|
||||||
# device = DeviceSerializer(read_only=True)
|
device = serializers.SlugRelatedField(
|
||||||
|
slug_field='serial',
|
||||||
def validate(self, data):
|
queryset=Device.objects.all()
|
||||||
return data
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Telemetry
|
model = Telemetry
|
||||||
fields = ('time', 'device', 'clock', 'payload',)
|
fields = ('time', 'device', 'clock', 'payload',)
|
||||||
|
|
||||||
|
|
||||||
# class WhiteListSerializer(serializers.ModelSerializer):
|
|
||||||
# class Meta:
|
|
||||||
# model = Device
|
|
||||||
# fields = ('serial', 'creation_time', 'updated_time',)
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
{"device": 1,
|
{"device": "abcde1234",
|
||||||
|
"clock": 1591194712,
|
||||||
"payload": {
|
"payload": {
|
||||||
"id": "sensor.server.domain",
|
"id": "sensor.server.domain",
|
||||||
"light": 434,
|
"light": 434,
|
||||||
|
Loading…
Reference in New Issue
Block a user