diff podcast/models.py @ 581:ee87ea74d46b

For Django 1.4, rearranged project structure for new manage.py.
author Brian Neal <bgneal@gmail.com>
date Sat, 05 May 2012 17:10:48 -0500
parents gpp/podcast/models.py@368d731af479
children e932f2ecd4a7
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/podcast/models.py	Sat May 05 17:10:48 2012 -0500
@@ -0,0 +1,98 @@
+"""
+Models for the podcast application.
+
+"""
+import datetime
+
+from django.db import models
+
+
+EXPLICIT_CHOICES = (
+        ('yes', 'Yes'),
+        ('no', 'No'),
+        ('clean', 'Clean'),
+    )
+
+
+class Channel(models.Model):
+    """Model to represent the Channel properties"""
+
+    title = models.CharField(max_length=255)
+    link = models.URLField()
+    language = models.CharField(max_length=16)
+    copyright = models.CharField(max_length=255)
+    subtitle = models.CharField(max_length=255)
+    author = models.CharField(max_length=64)
+    description = models.CharField(max_length=255)
+    owner_name = models.CharField(max_length=64)
+    owner_email = models.EmailField()
+    image = models.ImageField(upload_to='podcast')
+    category = models.CharField(max_length=64)
+    explicit = models.CharField(max_length=8, choices=EXPLICIT_CHOICES)
+    keywords = models.CharField(max_length=255)
+
+    def __unicode__(self):
+        return self.title
+
+
+class Item(models.Model):
+    """Model to represent a channel item"""
+    channel = models.ForeignKey(Channel)
+    title = models.CharField(max_length=255)
+    author = models.CharField(max_length=255)
+    subtitle = models.CharField(max_length=255)
+    summary = models.TextField()
+    enclosure_url = models.URLField()
+    alt_enclosure_url = models.URLField(blank=True)
+    enclosure_length = models.IntegerField()
+    enclosure_type = models.CharField(max_length=32)
+    guid = models.CharField(max_length=255)
+    pubdate = models.DateTimeField(db_index=True)
+    duration = models.CharField(max_length=16)
+    keywords = models.CharField(max_length=255)
+    explicit = models.CharField(max_length=8, choices=EXPLICIT_CHOICES)
+    update_date = models.DateTimeField(db_index=True, blank=True)
+
+    @models.permalink
+    def get_absolute_url(self):
+        return ('podcast.views.detail', [str(self.id)])
+
+    def __unicode__(self):
+        return self.title
+
+    class Meta:
+        ordering = ('-pubdate', )
+        verbose_name = 'podcast'
+        verbose_name_plural = 'podcasts'
+
+    def save(self, *args, **kwargs):
+        if not self.id:
+            if not self.pubdate:
+                self.pubdate = datetime.datetime.now()
+            self.update_date = self.pubdate
+        else:
+            self.update_date = datetime.datetime.now()
+        super(Item, self).save(*args, **kwargs)
+
+    def search_title(self):
+        return "%s: %s" % (self.title, self.subtitle)
+
+    def search_summary(self):
+        return u"\n".join((self.subtitle, self.summary, self.keywords))
+
+    def ogp_tags(self):
+        """
+        Returns a dict of Open Graph Protocol meta tags.
+
+        """
+        title = "%s: %s; %s" % (self.channel.title, self.title, self.subtitle)
+        return {
+            'og:title': title,
+            'og:type': 'article',
+            'og:url': self.get_absolute_url(),
+            'og:description': self.subtitle,
+            'og:audio': self.enclosure_url,
+            'og:audio:title': title,
+            'og:audio:artist': 'Various',
+            'og:audio:type': self.enclosure_type,
+        }