Skip to content

Commit 590c376

Browse files
UI improvements with admin (#140)
* non-compressed X-axis highlight, zooming legend fix, 2.5x default compressed * cursor time compressed fix, axis length fix, edit column reorder in Recordings * recording annotation details * removing some commented out emits * remove footer from details for inference annotations * Ignore egg-info directories * Add additional configuration settings * Add new settings to admin page * Use configuration to set `compressed` ref * Move save button closer to settings * Check config setting before running inference * Use config setting for initial compressed scale * reference the outputs.tags instead of outputs.results * Use slider for stretch setting --------- Co-authored-by: naglepuff <mike.nagler@kitware.com>
1 parent 5f85f46 commit 590c376

10 files changed

Lines changed: 430 additions & 320 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ temp*.png
1313
staticfiles/
1414
.env
1515
dev/.env.prod.docker-compose
16+
**/*.egg-info/**
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Generated by Django 4.1.13 on 2025-03-26 21:22
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
dependencies = [
8+
('core', '0013_configuration'),
9+
]
10+
11+
operations = [
12+
migrations.AddField(
13+
model_name='configuration',
14+
name='run_inference_on_upload',
15+
field=models.BooleanField(default=True),
16+
),
17+
migrations.AddField(
18+
model_name='configuration',
19+
name='spectrogram_view',
20+
field=models.CharField(
21+
choices=[('compressed', 'Compressed'), ('uncompressed', 'Uncompressed')],
22+
default='compressed',
23+
max_length=12,
24+
),
25+
),
26+
migrations.AddField(
27+
model_name='configuration',
28+
name='spectrogram_x_stretch',
29+
field=models.DecimalField(decimal_places=2, default=2.5, max_digits=3),
30+
),
31+
]

bats_ai/core/models/configuration.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,17 @@
55

66
# Define the Configuration model
77
class Configuration(models.Model):
8+
class SpectrogramViewMode(models.TextChoices):
9+
COMPRESSED = 'compressed'
10+
UNCOMPRESSED = 'uncompressed'
11+
812
display_pulse_annotations = models.BooleanField(default=True)
913
display_sequence_annotations = models.BooleanField(default=True)
14+
run_inference_on_upload = models.BooleanField(default=True)
15+
spectrogram_x_stretch = models.DecimalField(default=2.5, max_digits=3, decimal_places=2)
16+
spectrogram_view = models.CharField(
17+
max_length=12, choices=SpectrogramViewMode.choices, default=SpectrogramViewMode.COMPRESSED
18+
)
1019

1120
def save(self, *args, **kwargs):
1221
# Ensure only one instance of Configuration exists

bats_ai/core/tasks.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from bats_ai.core.models import (
1212
Annotations,
1313
CompressedSpectrogram,
14+
Configuration,
1415
Recording,
1516
RecordingAnnotation,
1617
Species,
@@ -187,7 +188,9 @@ def recording_compute_spectrogram(recording_id: int):
187188
spectrogram_id = spectrogram_id_temp
188189
if spectrogram_id is not None:
189190
compressed_spectro = generate_compress_spectrogram(recording_id, spectrogram_id)
190-
predict(compressed_spectro.pk)
191+
config = Configuration.objects.first()
192+
if not config or not config.run_inference_on_upload:
193+
predict(compressed_spectro.pk)
191194

192195

193196
@shared_task

bats_ai/core/views/configuration.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ class ConfigurationSchema(Schema):
1717
display_pulse_annotations: bool
1818
display_sequence_annotations: bool
1919
is_admin: bool | None = None
20+
run_inference_on_upload: bool
21+
spectrogram_x_stretch: float
22+
spectrogram_view: Configuration.SpectrogramViewMode
2023

2124

2225
# Endpoint to retrieve the configuration status
@@ -28,6 +31,9 @@ def get_configuration(request):
2831
return ConfigurationSchema(
2932
display_pulse_annotations=config.display_pulse_annotations,
3033
display_sequence_annotations=config.display_sequence_annotations,
34+
run_inference_on_upload=config.run_inference_on_upload,
35+
spectrogram_x_stretch=config.spectrogram_x_stretch,
36+
spectrogram_view=config.spectrogram_view,
3137
is_admin=request.user.is_authenticated and request.user.is_superuser,
3238
)
3339

0 commit comments

Comments
 (0)