Add command for running lastfm imports

This commit is contained in:
2023-04-06 13:36:02 -04:00
parent a59bcf054a
commit 59e29d858a
5 changed files with 37 additions and 9 deletions

View File

@ -0,0 +1,7 @@
from django.core.management.base import BaseCommand, no_translations
from vrobbler.apps.scrobbles.utils import import_lastfm_for_all_users
class Command(BaseCommand):
def handle(self, *args, **options):
import_lastfm_for_all_users()

View File

@ -1,12 +1,8 @@
import logging import logging
from celery import shared_task from celery import shared_task
from django.apps import apps
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from scrobbles.models import (
AudioScrobblerTSVImport,
KoReaderImport,
LastFmImport,
)
from scrobbles.stats import build_yesterdays_charts_for_user from scrobbles.stats import build_yesterdays_charts_for_user
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -15,6 +11,7 @@ User = get_user_model()
@shared_task @shared_task
def process_lastfm_import(import_id): def process_lastfm_import(import_id):
LastFmImport = apps.get_model("scrobbles", "LastFMImport")
lastfm_import = LastFmImport.objects.filter(id=import_id).first() lastfm_import = LastFmImport.objects.filter(id=import_id).first()
if not lastfm_import: if not lastfm_import:
logger.warn(f"LastFmImport not found with id {import_id}") logger.warn(f"LastFmImport not found with id {import_id}")
@ -24,6 +21,9 @@ def process_lastfm_import(import_id):
@shared_task @shared_task
def process_tsv_import(import_id): def process_tsv_import(import_id):
AudioScrobblerTSVImport = apps.get_model(
"scrobbles", "AudioscrobblerTSVImport"
)
tsv_import = AudioScrobblerTSVImport.objects.filter(id=import_id).first() tsv_import = AudioScrobblerTSVImport.objects.filter(id=import_id).first()
if not tsv_import: if not tsv_import:
logger.warn(f"AudioScrobblerTSVImport not found with id {import_id}") logger.warn(f"AudioScrobblerTSVImport not found with id {import_id}")
@ -33,6 +33,7 @@ def process_tsv_import(import_id):
@shared_task @shared_task
def process_koreader_import(import_id): def process_koreader_import(import_id):
KoReaderImport = apps.get_model("scrobbles", "KoReaderImport")
koreader_import = KoReaderImport.objects.filter(id=import_id).first() koreader_import = KoReaderImport.objects.filter(id=import_id).first()
if not koreader_import: if not koreader_import:
logger.warn(f"KOReaderImport not found with id {import_id}") logger.warn(f"KOReaderImport not found with id {import_id}")

View File

@ -1,15 +1,16 @@
import logging import logging
from urllib.parse import unquote from urllib.parse import unquote
from django.utils import timezone
from dateutil.parser import ParserError, parse from dateutil.parser import ParserError, parse
from django.apps import apps from django.apps import apps
from django.conf import settings from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.db import models from django.db import models
from vrobbler.apps.profiles.utils import now_user_timezone from django.utils import timezone
from profiles.models import UserProfile
from vrobbler.apps.scrobbles.constants import LONG_PLAY_MEDIA from profiles.utils import now_user_timezone
from scrobbles.constants import LONG_PLAY_MEDIA
from scrobbles.tasks import process_lastfm_import
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
User = get_user_model() User = get_user_model()
@ -190,3 +191,22 @@ def get_long_plays_completed(user: User) -> list:
): ):
media_list.append(media) media_list.append(media)
return media_list return media_list
def import_lastfm_for_all_users():
"""Grab a list of all users with LastFM enabled and kickoff imports for them"""
LastFmImport = apps.get_model("scrobbles", "LastFMImport")
lastfm_enabled_user_ids = UserProfile.objects.filter(
lastfm_username__isnull=False, lastfm_password__isnull=False
).values_list("user_id", flat=True)
for user_id in lastfm_enabled_user_ids:
lfm_import, created = LastFmImport.objects.get_or_create(
user_id=user_id, processed_finished__isnull=True
)
if not created:
logger.info(
f"Not resuming failed LastFM import {lfm_import.id} for user {user_id}"
)
continue
process_lastfm_import.delay(lfm_import.id)