Skip to content

initial nabat models/api script #122

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 46 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 42 commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
a54aef9
initial nabat models/api script
BryonLewis Feb 4, 2025
d8440c2
model updates and reset endpoints
BryonLewis Feb 6, 2025
760acc9
outlining tasks
BryonLewis Feb 7, 2025
da7d35c
nabat retrieval logic
BryonLewis Feb 11, 2025
0574aa4
NABat ingestion working
BryonLewis Feb 11, 2025
e83ef4c
rename acoustic_batch_initialize
BryonLewis Feb 11, 2025
91be416
remove flower, add spectrogram viewer script, move spectrogram creati…
BryonLewis Feb 18, 2025
ab9977d
nabat integration
BryonLewis Feb 19, 2025
45bb4b3
deduplicating functions
BryonLewis Feb 19, 2025
e495458
Merge branch 'main' into nabat-integration
BryonLewis Feb 21, 2025
8849abb
add species manual and auto ids to nabat retrieval
BryonLewis Feb 28, 2025
456cad6
non-compressed X-axis highlight, zooming legend fix, 2.5x default com…
BryonLewis Mar 20, 2025
9d05588
cursor time compressed fix, axis length fix, edit column reorder in R…
BryonLewis Mar 21, 2025
c31154b
recording annotation details
BryonLewis Mar 21, 2025
5491064
removing some commented out emits
BryonLewis Mar 24, 2025
f42c986
remove footer from details for inference annotations
BryonLewis Mar 27, 2025
230e8e3
Ignore egg-info directories
naglepuff Mar 26, 2025
024147d
Add additional configuration settings
naglepuff Mar 26, 2025
488a78c
Add new settings to admin page
naglepuff Mar 26, 2025
96caa74
Use configuration to set `compressed` ref
naglepuff Mar 27, 2025
370ac19
Move save button closer to settings
naglepuff Mar 27, 2025
31c089c
Check config setting before running inference
naglepuff Mar 28, 2025
2329da7
Use config setting for initial compressed scale
naglepuff Mar 28, 2025
b3ca903
reference the outputs.tags instead of outputs.results
BryonLewis Mar 31, 2025
e139f7a
renames acoustic batch to recording (#128)
BryonLewis Apr 2, 2025
f49e501
Merge branch 'main' into nabat-integration
BryonLewis Apr 2, 2025
d0bc693
Use slider for stretch setting
naglepuff Apr 2, 2025
5d3f361
Merge pull request #138 from Kitware/issue-134-configuration-settings
naglepuff Apr 3, 2025
e18b046
recording based nabat spectrograms
BryonLewis Apr 7, 2025
ced6425
Merge branch 'main' into ui-improvements
BryonLewis Apr 7, 2025
aa07187
Merge branch 'ui-improvements' into nabat-integration
BryonLewis Apr 7, 2025
de0adb1
migrations modifications
BryonLewis Apr 7, 2025
d2b0b10
public apis, adding apiToken access control
BryonLewis Apr 7, 2025
b0a28db
recording annotation endpoints
BryonLewis Apr 8, 2025
1a2ee94
nabat local annotaitons
BryonLewis Apr 8, 2025
9e78dcf
precition config, requesting annotations, updating species
BryonLewis Apr 8, 2025
d8be1bb
swapping to user_email from user_id
BryonLewis Apr 9, 2025
df75702
pushing annotations back
BryonLewis Apr 11, 2025
d801530
auth cleanup
BryonLewis Apr 11, 2025
71190d8
Merge branch 'main' into nabat-integration
BryonLewis Apr 11, 2025
6ee235d
Merge branch 'main' into nabat-integration
BryonLewis Apr 17, 2025
c0c0aca
convert to mutation
BryonLewis Apr 17, 2025
4d00bdc
Update scripts/USGS/naBatSpecies.py
BryonLewis Apr 24, 2025
a7d5e1b
addressing some of the comments
BryonLewis Apr 24, 2025
798fd4d
enum for processing task types, processing task get_or_create
BryonLewis Apr 24, 2025
454725a
client_id option, base environment file, updating instructions, NABAT…
BryonLewis Apr 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions bats_ai/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@
ConfigurationRouter,
GRTSCellsRouter,
GuanoMetadataRouter,
ProcessingTaskRouter,
RecordingAnnotationRouter,
RecordingRouter,
SpeciesRouter,
)
from bats_ai.core.views.nabat import NABatConfigurationRouter, NABatRecordingRouter

logger = logging.getLogger(__name__)

Expand All @@ -37,3 +39,6 @@ def global_auth(request):
api.add_router('/guano/', GuanoMetadataRouter)
api.add_router('/recording-annotation/', RecordingAnnotationRouter)
api.add_router('/configuration/', ConfigurationRouter)
api.add_router('/processing-task/', ProcessingTaskRouter)
api.add_router('/nabat/recording/', NABatRecordingRouter)
api.add_router('/nabat/configuration/', NABatConfigurationRouter)
15 changes: 15 additions & 0 deletions bats_ai/core/admin/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
from .annotations import AnnotationsAdmin
from .compressed_spectrogram import CompressedSpectrogramAdmin
from .configuration import ConfigurationAdmin
from .grts_cells import GRTSCellsAdmin
from .image import ImageAdmin
from .nabat.admin import (
NABatCompressedSpectrogram,
NABatRecording,
NABatRecordingAnnotation,
NABatSpectrogram,
)
from .processing_task import ProcessingTaskAdmin
from .recording import RecordingAdmin
from .recording_annotations import RecordingAnnotationAdmin
from .species import SpeciesAdmin
Expand All @@ -18,4 +26,11 @@
'GRTSCellsAdmin',
'CompressedSpectrogramAdmin',
'RecordingAnnotationAdmin',
'ProcessingTaskAdmin',
'ConfigurationAdmin',
# NABat Models
'NABatRecordingAnnotation',
'NABatCompressedSpectrogram',
'NABatSpectrogram',
'NABatRecording',
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No action needed, just observing that these don't follow the convention of other classes here of ending with ...Admin. Not sure if you want to keep that convention for these or move forward as-is.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're correct, I'll update it

]
24 changes: 24 additions & 0 deletions bats_ai/core/admin/configuration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from django.contrib import admin

from bats_ai.core.models.configuration import Configuration


@admin.register(Configuration)
class ConfigurationAdmin(admin.ModelAdmin):
list_display = (
'display_pulse_annotations',
'display_sequence_annotations',
'run_inference_on_upload',
'spectrogram_x_stretch',
'spectrogram_view',
)

def has_add_permission(self, request):
# Allow add only if there is no Configuration instance
if Configuration.objects.exists():
return False
return super().has_add_permission(request)

def has_delete_permission(self, request, obj=None):
# Prevent deleting the Configuration through the admin
return False
2 changes: 1 addition & 1 deletion bats_ai/core/admin/image.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from django.http import HttpRequest

from bats_ai.core.models import Image
from bats_ai.core.tasks import image_compute_checksum
from bats_ai.tasks.tasks import image_compute_checksum


@admin.register(Image)
Expand Down
66 changes: 66 additions & 0 deletions bats_ai/core/admin/nabat/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
from django.contrib import admin

from bats_ai.core.models.nabat import (
NABatCompressedSpectrogram,
NABatRecording,
NABatRecordingAnnotation,
NABatSpectrogram,
)


# Register models for the NaBat category
@admin.register(NABatRecordingAnnotation)
class NABatRecordingAnnotationAdmin(admin.ModelAdmin):
list_display = (
'nabat_recording',
'comments',
'model',
'confidence',
'additional_data',
'species_codes',
)
search_fields = ('nabat_recording_name', 'comments', 'model')
list_filter = ('nabat_recording',)

@admin.display(description='Species Codes')
def species_codes(self, obj):
# Assuming species have a `species_code` field
return ', '.join([species.species_code for species in obj.species.all()])


@admin.register(NABatSpectrogram)
class NABatSpectrogramAdmin(admin.ModelAdmin):
list_display = (
'nabat_recording',
'image_file',
'width',
'height',
'duration',
'frequency_min',
'frequency_max',
'colormap',
)
search_fields = ('nabat_recording__name', 'colormap')
list_filter = ('nabat_recording', 'colormap')


@admin.register(NABatCompressedSpectrogram)
class NABatCompressedSpectrogramAdmin(admin.ModelAdmin):
list_display = ('nabat_recording', 'spectrogram', 'length', 'cache_invalidated')
search_fields = ('nabat_recording__name', 'spectrogram__id')
list_filter = ('nabat_recording', 'cache_invalidated')


@admin.register(NABatRecording)
class NABatRecordingAdmin(admin.ModelAdmin):
list_display = (
'name',
'recording_id',
'equipment',
'comments',
'recording_location',
'grts_cell_id',
'grts_cell',
)
search_fields = ('name', 'recording_id', 'recording_location')
list_filter = ('name', 'recording_id', 'recording_location')
28 changes: 28 additions & 0 deletions bats_ai/core/admin/processing_task.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from django.contrib import admin

from bats_ai.core.models import ProcessingTask


@admin.register(ProcessingTask)
class ProcessingTaskAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'status', 'created', 'modified', 'celery_id', 'metadata', 'error')
list_filter = ('status', 'created', 'modified')
search_fields = ('name', 'celery_id', 'metadata', 'error')
ordering = ('-created',)
readonly_fields = ('created', 'modified')
fieldsets = (
(None, {'fields': ('name', 'status', 'celery_id', 'error')}),
(
'Metadata',
{
'classes': ('collapse',),
'fields': ('metadata',),
},
),
(
'Timestamps',
{
'fields': ('created', 'modified'),
},
),
)
2 changes: 1 addition & 1 deletion bats_ai/core/admin/recording.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from django.utils.safestring import mark_safe

from bats_ai.core.models import Recording
from bats_ai.core.tasks import recording_compute_spectrogram
from bats_ai.tasks.tasks import recording_compute_spectrogram


@admin.register(Recording)
Expand Down
8 changes: 7 additions & 1 deletion bats_ai/core/management/commands/makeclient.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,13 @@
required=True,
help='superuser username for application creator',
)
@click.option('--uri', type=click.STRING, required=True, help='redirect uri for application')
@click.option(
'--uri',
type=click.STRING,
default='http://localhost:3000/',
required=False,
help='redirect uri for application',
)
@click.command()
def command(username, uri):
if Application.objects.filter(client_id=CLIENT_ID).exists():
Expand Down
Loading