[birds] Fix importer not finishing, and add formjs

This commit is contained in:
2026-05-15 12:20:27 -04:00
parent f160f5a7b8
commit e85d6ec779
3 changed files with 17 additions and 2 deletions

View File

@ -1,3 +1,5 @@
from datetime import timedelta
import pytest import pytest
from birds.importer import ( from birds.importer import (
import_birding_csv, import_birding_csv,
@ -111,6 +113,13 @@ class TestImportBirdingCSV:
goose = next(b for b in birds if b["quantity"] == 6) goose = next(b for b in birds if b["quantity"] == 6)
assert goose is not None assert goose is not None
def test_import_sets_stop_timestamp(self, user, birding_csv_file):
import_birding_csv(birding_csv_file, user.id)
scrobble = Scrobble.objects.filter(source="Birding CSV Import").first()
assert scrobble.stop_timestamp is not None
expected = scrobble.timestamp + timedelta(minutes=9)
assert scrobble.stop_timestamp == expected
class TestBirdingCSVImportModel: class TestBirdingCSVImportModel:
def test_create_import_model(self, db, user): def test_create_import_model(self, db, user):

View File

@ -2,7 +2,7 @@ import csv
import logging import logging
import re import re
from collections import defaultdict from collections import defaultdict
from datetime import datetime from datetime import datetime, timedelta
from zoneinfo import ZoneInfo from zoneinfo import ZoneInfo
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
@ -122,9 +122,10 @@ def import_birding_csv(file_path, user_id):
) )
birds_data.append(entry.asdict) birds_data.append(entry.asdict)
duration_minutes = parse_duration(first_row.get("Duration", ""))
logdata = BirdSightingLogData( logdata = BirdSightingLogData(
birds=birds_data, birds=birds_data,
duration_minutes=parse_duration(first_row.get("Duration", "")), duration_minutes=duration_minutes,
observation_type=first_row.get("Observation Type", "").strip() or None, observation_type=first_row.get("Observation Type", "").strip() or None,
distance=first_row.get("Distance", "").strip() or None, distance=first_row.get("Distance", "").strip() or None,
area=first_row.get("Area", "").strip() or None, area=first_row.get("Area", "").strip() or None,
@ -134,9 +135,12 @@ def import_birding_csv(file_path, user_id):
log_dict = logdata.asdict log_dict = logdata.asdict
stop_timestamp = timestamp + timedelta(minutes=duration_minutes) if duration_minutes else None
scrobble = Scrobble( scrobble = Scrobble(
user=user, user=user,
timestamp=timestamp, timestamp=timestamp,
stop_timestamp=stop_timestamp,
source="Birding CSV Import", source="Birding CSV Import",
birding_location=location, birding_location=location,
log=log_dict, log=log_dict,

View File

@ -136,3 +136,5 @@
</div> </div>
{% endblock %} {% endblock %}
{% block extra_js %}{{ block.super }}{{ log_form.media }}{% endblock %}