view oembed/models.py @ 943:cf9918328c64

Haystack tweaks for Django 1.7.7. I had to upgrade to Haystack 2.3.1 to get it to work with Django 1.7.7. I also had to update the Xapian backend. But I ran into problems. On my laptop anyway (Ubuntu 14.0.4), xapian gets mad when search terms are greater than 245 chars (or something) when indexing. So I created a custom field that would simply omit terms greater than 64 chars and used this field everywhere I previously used a CharField. Secondly, the custom search form was broken now. Something changed in the Xapian backend and exact searches stopped working. Fortunately the auto_query (which I was using originally and broke during an upgrade) started working again. So I cut the search form back over to doing an auto_query. I kept the form the same (3 fields) because I didn't want to change the form and I think it's better that way.
author Brian Neal <bgneal@gmail.com>
date Wed, 13 May 2015 20:25:07 -0500
parents d3f6e9cb1f39
children 4da4e32b314c
line wrap: on
line source
"""
Models for the oembed application.
"""
import datetime

from django.db import models


class Provider(models.Model):
    """
    This model described an oEmbed provider.
    """
    JSON, XML = range(2)
    FORMAT_CHOICES = (
        (JSON, "json"),
        (XML, "xml"),
    )

    name = models.CharField(max_length=128)
    api_endpoint = models.URLField(max_length=255, verbose_name='API endpoint')
    url_regex = models.CharField(max_length=255, verbose_name='URL regex')
    format = models.IntegerField(choices=FORMAT_CHOICES)

    def __unicode__(self):
        return self.name


class Oembed(models.Model):
    """
    This model represents stored embedded content retrieved from an oEmbed
    provider.
    """
    PHOTO, VIDEO, LINK, RICH = range(4)
    MEDIA_TYPE_CHOICES = (
        (PHOTO, "photo"),
        (VIDEO, "video"),
        (LINK, "link"),
        (RICH, "rich"),
    )

    url = models.URLField(max_length=255, db_index=True)
    type = models.IntegerField(choices=MEDIA_TYPE_CHOICES)
    title = models.CharField(max_length=255, blank=True, default='')
    width = models.IntegerField()
    height = models.IntegerField()
    html = models.TextField()
    date_added = models.DateTimeField()

    def __unicode__(self):
        desc = self.title if self.title else self.url
        return u"<oembed {}: {}>".format(self.pk, desc)

    def save(self, *args, **kwargs):
        if not self.pk:
            self.date_added = datetime.datetime.now()

        super(Oembed, self).save(*args, **kwargs)