diff --git a/sensor/api/viewsets.py b/sensor/api/viewsets.py index f4d19a9..ba87d5f 100644 --- a/sensor/api/viewsets.py +++ b/sensor/api/viewsets.py @@ -10,4 +10,4 @@ class FileViewSet(viewsets.ModelViewSet): def perform_create(self, serializer): instance = serializer.save() - instance.parse_and_import_to_db() + instance.import_to_db() diff --git a/sensor/models.py b/sensor/models.py index db93c40..ae5c7f8 100644 --- a/sensor/models.py +++ b/sensor/models.py @@ -1,6 +1,7 @@ import json import textwrap +from pathlib import Path from datetime import datetime from datetime import timezone @@ -124,7 +125,7 @@ def clean(self): ) self.file.seek(0) - def import_directly_to_db(self): + def import_json(self): # NOTE: assume uploaded file is JSON with self.file.open(mode="rb") as f: @@ -148,7 +149,7 @@ def import_directly_to_db(self): break Reading.objects.bulk_create(batch, batch_size) - def parse_and_import_to_db(self): + def parse_and_import(self): with self.file.open(mode="rb") as f: @@ -191,7 +192,10 @@ def parse_and_import_to_db(self): def import_to_db(self) -> None: - self.import_directly() + if Path(self.file.path).suffix == ".json": + self.import_json() + else: + self.parse_and_import() class Reading(models.Model): diff --git a/sensor/tasks.py b/sensor/tasks.py index b27b775..f8b5a7b 100644 --- a/sensor/tasks.py +++ b/sensor/tasks.py @@ -4,6 +4,6 @@ @shared_task -def parse_and_import_to_db(file_id): +def import_to_db(file_id): file_obj = File.objects.get(id=file_id) - file_obj.parse_and_import_to_db() + file_obj.import_to_db() diff --git a/sensor/views.py b/sensor/views.py index dcf27b7..841ef24 100644 --- a/sensor/views.py +++ b/sensor/views.py @@ -23,7 +23,7 @@ def upload_file(request): form = FileForm(request.POST, request.FILES) if form.is_valid(): form.save() - form.instance.parse_and_import_to_db() + form.instance.import_to_db() return HttpResponse("File upload was successful") else: return HttpResponse(f"File type creation failed: {form.errors}") diff --git a/tests/sensor/api/test_viewsets.py b/tests/sensor/api/test_viewsets.py index eba0388..c77e1a2 100644 --- a/tests/sensor/api/test_viewsets.py +++ b/tests/sensor/api/test_viewsets.py @@ -129,6 +129,6 @@ def test_parse_and_import_to_db_is_called( ) url = reverse("sensor:upload-file") - with patch("sensor.models.File.parse_and_import_to_db") as importer: + with patch("sensor.models.File.import_to_db") as importer: client.post(url, {"file": file, "type": file_type.id}) assert importer.called diff --git a/tests/sensor/test_models.py b/tests/sensor/test_models.py index 5079a81..d607bd6 100644 --- a/tests/sensor/test_models.py +++ b/tests/sensor/test_models.py @@ -38,7 +38,7 @@ def test_import_directly_to_db( file_obj = File(file=file, type=file_type_obj) file_obj.save() - file_obj.import_directly_to_db() + file_obj.import_json() output = Reading.objects.all() assert output == snapshot @@ -81,7 +81,7 @@ def test_parse_and_import_to_db( file_obj = File(file=file, type=file_type_obj) file_obj.save() - file_obj.parse_and_import_to_db() + file_obj.parse_and_import() output = Reading.objects.all() assert output == snapshot diff --git a/tests/sensor/test_tasks.py b/tests/sensor/test_tasks.py index 7a50b6b..2fd13b1 100644 --- a/tests/sensor/test_tasks.py +++ b/tests/sensor/test_tasks.py @@ -5,17 +5,17 @@ from sensor.models import File from sensor.models import FileType -from sensor.tasks import parse_and_import_to_db +from sensor.tasks import import_to_db @pytest.mark.django_db -def test_parse_and_import_to_db_is_called(): +def test_import_to_db_is_called(): - with patch("sensor.models.File.parse_and_import_to_db") as importer: + with patch("sensor.models.File.import_to_db") as importer: file_obj = File.objects.create( file=ContentFile(b"", name="sensor-readings.txt"), type=FileType.objects.create(name="type") ) - parse_and_import_to_db(file_id=file_obj.id) + import_to_db(file_id=file_obj.id) assert importer.called, "parse_and_import_to_db was not called!" diff --git a/tests/sensor/test_views.py b/tests/sensor/test_views.py index 3cb2d69..0bcfed6 100644 --- a/tests/sensor/test_views.py +++ b/tests/sensor/test_views.py @@ -104,6 +104,6 @@ def test_parse_and_import_to_db_is_called( ) url = reverse("sensor:upload-file") - with patch("sensor.models.File.parse_and_import_to_db") as importer: + with patch("sensor.models.File.import_to_db") as importer: client.post(url,{"file": file, "type": file_type.id}) assert importer.called