Source code for feedreader.models

from __future__ import absolute_import

from django.db import models


class OptionsManager(models.Manager):
    def get_options(self):
        options = Options.objects.all()
        if options:
            options = options[0]
        else:  # Create options row with default values
            options = Options.objects.create()
        return options

[docs]class Options(models.Model): """ Options controlling feed reader behavior :Fields: number_initially_displayed : integer Number of entries, from all feeds, initially displayed on webpage. number_additionally_displayed : integer Number of entries added to displayed results when scrolling down. max_entries_saved : integer Maximum number of entries to store for each feed. """ number_initially_displayed = models.IntegerField(default=10) number_additionally_displayed = models.IntegerField(default=5) max_entries_saved = models.IntegerField(default=100) objects = models.Manager() get_options = OptionsManager() class Meta: verbose_name_plural = "options" def __unicode__(self): return u'Options'
[docs]class Group(models.Model): """ Group of feeds. :Fields: name : char Name of group. """ name = models.CharField(max_length=250, unique=True) class Meta: ordering = ['name'] def __unicode__(self): return self.name def num_unread(self): return len(Entry.objects.filter(feed__group=self, read=False))
[docs]class Feed(models.Model): """ Feed information. :Fields: title : char Title of feed. xml_url : char URL of xml feed. link : char URL of feed site. description : text Description of feed. updated_time : date_time When feed was last updated. last_polled_time : date_time When feed was last polled. group : ForeignKey Group this feed is a part of. """ title = models.CharField(max_length=2000, blank=True, null=True) xml_url = models.CharField(max_length=255, unique=True) link = models.CharField(max_length=2000, blank=True, null=True) description = models.TextField(blank=True, null=True) published_time = models.DateTimeField(blank=True, null=True) last_polled_time = models.DateTimeField(blank=True, null=True) group = models.ForeignKey(Group, blank=True, null=True) class Meta: ordering = ['title'] def __unicode__(self): return self.title or self.xml_url def num_unread(self): return len(Entry.objects.filter(feed=self, read=False))
[docs] def save(self, *args, **kwargs): """Poll new Feed""" try: Feed.objects.get(xml_url=self.xml_url) super(Feed, self).save(*args, **kwargs) except Feed.DoesNotExist: super(Feed, self).save(*args, **kwargs) from feedreader.utils import poll_feed poll_feed(self)
[docs]class Entry(models.Model): """ Feed entry information. :Fields: feed : ForeignKey Feed this entry is a part of. title : char Title of entry. link : char URL of entry. description : text Description of entry. updated_time : date_time When entry was last updated. """ feed = models.ForeignKey(Feed) title = models.CharField(max_length=2000, blank=True, null=True) link = models.CharField(max_length=2000) description = models.TextField(blank=True, null=True) published_time = models.DateTimeField(auto_now_add=True) read_flag = models.BooleanField(default=False) class Meta: ordering = ['-published_time'] verbose_name_plural = 'entries' def __unicode__(self): return self.title