From f5ff716ff3e713060b401f5020fdc75dd97407c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniele=20Vigan=C3=B2?= Date: Sun, 21 Jun 2020 22:51:06 +0200 Subject: [PATCH] Do not crash mqtt-to-db if devices isn't proviosioned --- bite/telemetry/management/commands/mqtt-to-db.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/bite/telemetry/management/commands/mqtt-to-db.py b/bite/telemetry/management/commands/mqtt-to-db.py index 0d2de1b..73e1ee8 100644 --- a/bite/telemetry/management/commands/mqtt-to-db.py +++ b/bite/telemetry/management/commands/mqtt-to-db.py @@ -8,6 +8,8 @@ from asyncio_mqtt import Client from django.conf import settings from django.core.management.base import BaseCommand +from django.core.exceptions import ObjectDoesNotExist + from api.models import Device from telemetry.models import Telemetry @@ -20,7 +22,10 @@ class Command(BaseCommand): @sync_to_async def get_device(self, serial): - return Device.objects.get(serial=serial) + try: + return Device.objects.get(serial=serial) + except ObjectDoesNotExist: + return None @sync_to_async def store_telemetry(self, device, payload): @@ -39,7 +44,12 @@ class Command(BaseCommand): async for message in messages: payload = json.loads(message.payload.decode('utf-8')) device = await self.get_device(message.topic) - await self.store_telemetry(device, payload) + if device is not None: + await self.store_telemetry(device, payload) + else: + self.stdout.write( + self.style.ERROR( + 'DEBUG: message discarded')) def handle(self, *args, **options): client = mqtt.Client()