class Command(BaseCommand):
def handle(self, *args, **options):
for channel in Channel.objects.all():
- channel.update_sounds()
+ channel.update()
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.11 on 2018-09-01 15:45
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('sounds', '0002_auto_20180901_1521'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='channel',
+ name='image_url',
+ field=models.URLField(blank=True, null=True, verbose_name='Image URL'),
+ ),
+ migrations.AddField(
+ model_name='channel',
+ name='license_url',
+ field=models.URLField(blank=True, null=True, verbose_name='License URL'),
+ ),
+ migrations.AddField(
+ model_name='channel',
+ name='subtitle',
+ field=models.CharField(blank=True, max_length=500, null=True, verbose_name='Subtitle'),
+ ),
+ ]
policy = models.CharField(_('Policy'), max_length=20,
default='', blank=True, choices=POLICIES)
+ subtitle = models.CharField(_('Subtitle'), max_length=500, blank=True, null=True)
+ image_url = models.URLField(_('Image URL'), blank=True, null=True)
+ license_url = models.URLField(_('License URL'), blank=True, null=True)
+
creation_timestamp = models.DateTimeField(auto_now_add=True)
last_update_timestamp = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
- def update_sounds(self):
+ def update(self):
from . import sources
source = sources.Rss(self)
+ source.update_meta()
source.update_sounds()
self.channel = channel
assert channel.feed_url
+ def update_meta(self):
+ feed = feedparser.parse(self.channel.feed_url)
+ attrs = {
+ 'subtitle': feed.feed.subtitle,
+ 'image_url': feed.feed.image.href if feed.feed.image and feed.feed.image.href else None,
+ 'license_url': getattr(feed.feed, 'license', None),
+ }
+ modified = False
+ for key, value in attrs.items():
+ if getattr(self.channel, key) != value:
+ setattr(self.channel, key, value)
+ modified = True
+ if modified:
+ self.channel.save()
+
def update_sounds(self):
feed = feedparser.parse(self.channel.feed_url)
for entry in feed.entries: