annotate oembed/models.py @ 1199:45ce2c20a4e7

Raise donations goal to $94.
author Brian Neal <bgneal@gmail.com>
date Sun, 07 May 2023 19:30:52 -0500
parents 4da4e32b314c
children
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@572 20 api_endpoint = models.URLField(max_length=255, verbose_name='API endpoint')
bgneal@285 21 url_regex = models.CharField(max_length=255, verbose_name='URL regex')
bgneal@285 22 format = models.IntegerField(choices=FORMAT_CHOICES)
bgneal@285 23
bgneal@285 24 def __unicode__(self):
bgneal@285 25 return self.name
bgneal@285 26
bgneal@285 27
bgneal@285 28 class Oembed(models.Model):
bgneal@285 29 """
bgneal@285 30 This model represents stored embedded content retrieved from an oEmbed
bgneal@285 31 provider.
bgneal@285 32 """
bgneal@285 33 PHOTO, VIDEO, LINK, RICH = range(4)
bgneal@285 34 MEDIA_TYPE_CHOICES = (
bgneal@285 35 (PHOTO, "photo"),
bgneal@285 36 (VIDEO, "video"),
bgneal@285 37 (LINK, "link"),
bgneal@285 38 (RICH, "rich"),
bgneal@285 39 )
bgneal@1154 40 ALLOWED_TYPES = set(choice[1] for choice in MEDIA_TYPE_CHOICES)
bgneal@1154 41 MEDIA_TYPE_REVERSE = {choice[1]: choice[0] for choice in MEDIA_TYPE_CHOICES}
bgneal@285 42
bgneal@572 43 url = models.URLField(max_length=255, db_index=True)
bgneal@285 44 type = models.IntegerField(choices=MEDIA_TYPE_CHOICES)
bgneal@285 45 title = models.CharField(max_length=255, blank=True, default='')
bgneal@285 46 width = models.IntegerField()
bgneal@285 47 height = models.IntegerField()
bgneal@285 48 html = models.TextField()
bgneal@285 49 date_added = models.DateTimeField()
bgneal@285 50
bgneal@285 51 def __unicode__(self):
bgneal@911 52 desc = self.title if self.title else self.url
bgneal@911 53 return u"<oembed {}: {}>".format(self.pk, desc)
bgneal@285 54
bgneal@285 55 def save(self, *args, **kwargs):
bgneal@285 56 if not self.pk:
bgneal@285 57 self.date_added = datetime.datetime.now()
bgneal@285 58
bgneal@285 59 super(Oembed, self).save(*args, **kwargs)
bgneal@285 60