annotate gpp/oembed/models.py @ 285:8fd4984d5c3b

This is a first rough commit for #95, adding the ability to embed YouTube videos in forum posts. Some more polish and testing needs to happen at this point. I wanted to get all these changes off my hard drive and into the repository.
author Brian Neal <bgneal@gmail.com>
date Thu, 14 Oct 2010 02:39:35 +0000
parents
children 368d731af479
rev   line source
bgneal@285 1 """
bgneal@285 2 Models for the oembed application.
bgneal@285 3 """
bgneal@285 4 import datetime
bgneal@285 5
bgneal@285 6 from django.db import models
bgneal@285 7
bgneal@285 8
bgneal@285 9 class Provider(models.Model):
bgneal@285 10 """
bgneal@285 11 This model described an oEmbed provider.
bgneal@285 12 """
bgneal@285 13 JSON, XML = range(2)
bgneal@285 14 FORMAT_CHOICES = (
bgneal@285 15 (JSON, "json"),
bgneal@285 16 (XML, "xml"),
bgneal@285 17 )
bgneal@285 18
bgneal@285 19 name = models.CharField(max_length=128)
bgneal@285 20 api_endpoint = models.URLField(max_length=255, verify_exists=False,
bgneal@285 21 verbose_name='API endpoint')
bgneal@285 22 url_regex = models.CharField(max_length=255, verbose_name='URL regex')
bgneal@285 23 format = models.IntegerField(choices=FORMAT_CHOICES)
bgneal@285 24
bgneal@285 25 def __unicode__(self):
bgneal@285 26 return self.name
bgneal@285 27
bgneal@285 28
bgneal@285 29 class Oembed(models.Model):
bgneal@285 30 """
bgneal@285 31 This model represents stored embedded content retrieved from an oEmbed
bgneal@285 32 provider.
bgneal@285 33 """
bgneal@285 34 PHOTO, VIDEO, LINK, RICH = range(4)
bgneal@285 35 MEDIA_TYPE_CHOICES = (
bgneal@285 36 (PHOTO, "photo"),
bgneal@285 37 (VIDEO, "video"),
bgneal@285 38 (LINK, "link"),
bgneal@285 39 (RICH, "rich"),
bgneal@285 40 )
bgneal@285 41
bgneal@285 42 url = models.URLField(max_length=255, verify_exists=False, db_index=True)
bgneal@285 43 type = models.IntegerField(choices=MEDIA_TYPE_CHOICES)
bgneal@285 44 title = models.CharField(max_length=255, blank=True, default='')
bgneal@285 45 width = models.IntegerField()
bgneal@285 46 height = models.IntegerField()
bgneal@285 47 html = models.TextField()
bgneal@285 48 date_added = models.DateTimeField()
bgneal@285 49
bgneal@285 50 def __unicode__(self):
bgneal@285 51 return self.title or self.url
bgneal@285 52
bgneal@285 53 def save(self, *args, **kwargs):
bgneal@285 54 if not self.pk:
bgneal@285 55 self.date_added = datetime.datetime.now()
bgneal@285 56
bgneal@285 57 super(Oembed, self).save(*args, **kwargs)
bgneal@285 58