annotate gpp/oembed/models.py @ 318:c550933ff5b6

Fix a bug where you'd get an error when trying to delete a forum thread (topic does not exist). Apparently when you call topic.delete() the posts would get deleted, but the signal handler for each one would run, and it would try to update the topic's post count or something, but the topic was gone? Reworked the code a bit and explicitly delete the posts first. I also added a sync() call on the parent forum since post counts were not getting adjusted.
author Brian Neal <bgneal@gmail.com>
date Sat, 05 Feb 2011 21:46:52 +0000
parents 8fd4984d5c3b
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