34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
import sys
|
|
|
|
from django.core.management.base import BaseCommand
|
|
|
|
from podcasts.models import PodcastFeed
|
|
from podcasts.views import _refresh_feed
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Refresh podcast feeds (fetch new episodes from RSS)'
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument('--feed-id', type=int, help='Refresh only this feed ID')
|
|
parser.add_argument('--limit', type=int, default=0, help='Max number of feeds to refresh')
|
|
|
|
def handle(self, *args, **options):
|
|
qs = PodcastFeed.objects.all().order_by('last_refreshed_at')
|
|
|
|
if options['feed_id']:
|
|
qs = qs.filter(pk=options['feed_id'])
|
|
|
|
if options['limit']:
|
|
qs = qs[: options['limit']]
|
|
|
|
if not qs.exists():
|
|
self.stdout.write('No feeds to refresh.')
|
|
return
|
|
|
|
for feed in qs:
|
|
try:
|
|
new_ep = _refresh_feed(feed)
|
|
self.stdout.write(f'{feed.title}: +{new_ep} episodes')
|
|
except Exception as e:
|
|
self.stderr.write(f'ERROR refreshing "{feed.title}" ({feed.rss_url}): {e}')
|