[birds] Move importer to scrobbles and webdav
Some checks failed
build & deploy / test (push) Failing after 1m32s
build & deploy / build-and-deploy (push) Has been skipped

This commit is contained in:
2026-05-23 17:30:25 -04:00
parent a4030e89ec
commit a171517f92
12 changed files with 284 additions and 8 deletions

View File

@ -502,6 +502,53 @@ class BGStatsImport(BaseFileImportMixin):
self.mark_finished()
class EBirdCSVImport(BaseFileImportMixin):
class Meta:
verbose_name = "eBird CSV Import"
user = models.ForeignKey(
User,
on_delete=models.DO_NOTHING,
**BNULL,
related_name="scrobbles_ebirdcsvimport_set",
)
@property
def import_type(self) -> str:
return "eBird"
def get_absolute_url(self):
return reverse("scrobbles:ebird-csv-import-detail", kwargs={"slug": self.uuid})
def get_path(instance, filename):
extension = filename.split(".")[-1]
uuid = instance.uuid
return f"birding-csv-uploads/{uuid}.{extension}"
@property
def upload_file_path(self):
if getattr(settings, "USE_S3_STORAGE"):
path = self.csv_file.url
else:
path = self.csv_file.path
return path
csv_file = models.FileField(upload_to=get_path, **BNULL)
original_filename = models.CharField(max_length=255, **BNULL)
def process(self, force=False):
from birds.importer import import_birding_csv
if self.processed_finished and not force:
logger.info(f"{self} already processed on {self.processed_finished}")
return
self.mark_started()
scrobbles = import_birding_csv(self.upload_file_path, self.user_id)
self.record_log(scrobbles)
self.mark_finished()
class ScrobbleQuerySet(models.QuerySet):
def with_related(self):
return self.select_related("user").prefetch_related(