diff --git a/bats_ai/core/admin/__init__.py b/bats_ai/core/admin/__init__.py index fe5a419e..c1f483e2 100644 --- a/bats_ai/core/admin/__init__.py +++ b/bats_ai/core/admin/__init__.py @@ -3,7 +3,6 @@ from .configuration import ConfigurationAdmin from .exported_annotation import ExportedAnnotationFileAdmin from .grts_cells import GRTSCellsAdmin -from .image import ImageAdmin from .nabat.admin import ( NABatCompressedSpectrogramAdmin, NABatRecordingAdmin, @@ -21,7 +20,6 @@ __all__ = [ 'AnnotationsAdmin', - 'ImageAdmin', 'RecordingAdmin', 'SpectrogramAdmin', 'SequenceAnnotationsAdmin', diff --git a/bats_ai/core/admin/image.py b/bats_ai/core/admin/image.py deleted file mode 100644 index 2f06989a..00000000 --- a/bats_ai/core/admin/image.py +++ /dev/null @@ -1,41 +0,0 @@ -from django.contrib import admin, messages -from django.db.models import QuerySet -from django.http import HttpRequest - -from bats_ai.core.models import Image -from bats_ai.tasks.tasks import image_compute_checksum - - -@admin.register(Image) -class ImageAdmin(admin.ModelAdmin): - list_display = ['id', 'name', 'short_checksum', 'created', 'owner'] - list_display_links = ['id', 'name'] - list_filter = [ - ('checksum', admin.EmptyFieldListFilter), - ('created', admin.DateFieldListFilter), - 'owner__username', - ] - list_select_related = True - # list_select_related = ['owner'] - - search_fields = ['name'] - actions = ['compute_checksum'] - - fields = ['name', 'blob', 'checksum', 'owner', 'created', 'modified'] - autocomplete_fields = ['owner'] - readonly_fields = ['checksum', 'created', 'modified'] - - @admin.display( - description='Checksum prefix', - empty_value='Not computed', - # Sorting by checksum also sorts the prefix values - ordering='checksum', - ) - def short_checksum(self, image: Image): - return image.short_checksum - - @admin.action(description='Recompute checksum') - def compute_checksum(self, request: HttpRequest, queryset: QuerySet): - for image in queryset: - image_compute_checksum.delay(image.pk) - self.message_user(request, f'{len(queryset)} images queued', messages.SUCCESS) diff --git a/bats_ai/core/migrations/0024_delete_image.py b/bats_ai/core/migrations/0024_delete_image.py new file mode 100644 index 00000000..25034e46 --- /dev/null +++ b/bats_ai/core/migrations/0024_delete_image.py @@ -0,0 +1,14 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0023_recordingtag_recording_tags_and_more'), + ] + + operations = [ + migrations.DeleteModel( + name='Image', + ), + ] diff --git a/bats_ai/core/models/__init__.py b/bats_ai/core/models/__init__.py index ad11fab9..5401f260 100644 --- a/bats_ai/core/models/__init__.py +++ b/bats_ai/core/models/__init__.py @@ -3,7 +3,6 @@ from .configuration import Configuration from .exported_file import ExportedAnnotationFile from .grts_cells import GRTSCells -from .image import Image from .processing_task import ProcessingTask, ProcessingTaskType from .recording import Recording, RecordingTag from .recording_annotation import RecordingAnnotation @@ -15,7 +14,6 @@ __all__ = [ 'Annotations', - 'Image', 'Recording', 'RecordingTag', 'RecordingAnnotationStatus', diff --git a/bats_ai/core/models/image.py b/bats_ai/core/models/image.py deleted file mode 100644 index 4ee939db..00000000 --- a/bats_ai/core/models/image.py +++ /dev/null @@ -1,25 +0,0 @@ -from hashlib import sha512 - -from django.contrib.auth.models import User -from django.db import models -from django_extensions.db.models import TimeStampedModel -from s3_file_field import S3FileField - - -class Image(TimeStampedModel, models.Model): - name = models.CharField(max_length=255) - blob = S3FileField() - checksum = models.CharField(max_length=128, blank=True, null=True) - owner = models.ForeignKey(User, on_delete=models.CASCADE) - # TimeStampedModel also provides "created" and "modified" fields - - @property - def short_checksum(self) -> str | None: - return f'{self.checksum[:10]}' if self.checksum else None - - def compute_checksum(self) -> None: - hasher = sha512() - with self.blob.open() as blob: - for chunk in blob.chunks(): - hasher.update(chunk) - self.checksum = hasher.hexdigest() diff --git a/bats_ai/tasks/tasks.py b/bats_ai/tasks/tasks.py index 33a2783f..7d5e11f6 100644 --- a/bats_ai/tasks/tasks.py +++ b/bats_ai/tasks/tasks.py @@ -2,7 +2,6 @@ import os import tempfile -from PIL import Image from celery import shared_task from django.contrib.contenttypes.models import ContentType from django.core.files import File @@ -22,13 +21,6 @@ logger = logging.getLogger('NABatDataRetrieval') -@shared_task -def image_compute_checksum(image_id: int): - image = Image.objects.get(pk=image_id) - image.compute_checksum() - image.save() - - @shared_task def recording_compute_spectrogram(recording_id: int): recording = Recording.objects.get(pk=recording_id)