Add natural keys to models of feed_plugin (refs #5510)
This commit is contained in:
parent
f5a0d9e76c
commit
19708e81cb
|
@ -7,6 +7,7 @@ from django.conf import settings
|
|||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.html import strip_tags
|
||||
from django.core.cache import cache
|
||||
from django.contrib.auth import get_user_model
|
||||
|
||||
import feedparser
|
||||
|
||||
|
@ -16,10 +17,23 @@ from . import utils
|
|||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class FeedPreferenceManager(models.Manager):
|
||||
def get_by_natural_key(self, user_nk, feed_nk):
|
||||
User = get_user_model()
|
||||
return self.get(user=User.objects.get_by_natural_key(*user_nk),
|
||||
feed=Feed.objects.get_by_natural_key(*feed_nk))
|
||||
|
||||
|
||||
class FeedPreference(models.Model):
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL)
|
||||
feed = models.ForeignKey('Feed')
|
||||
|
||||
objects = FeedPreferenceManager()
|
||||
|
||||
def natural_key(self):
|
||||
return (self.user.natural_key(), self.feed.natural_key())
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('user feed subscription')
|
||||
verbose_name_plural = _('user feed subscriptions')
|
||||
|
@ -31,6 +45,10 @@ class ShowUserFeed(CMSPlugin):
|
|||
limit = models.PositiveIntegerField(default=10)
|
||||
timeout = models.PositiveIntegerField(default=60)
|
||||
|
||||
class FeedManager(models.Manager):
|
||||
def get_by_natural_key(self, name, url):
|
||||
return self.get(name=name, url=url)
|
||||
|
||||
class Feed(models.Model):
|
||||
name = models.CharField(max_length=32, verbose_name=_('name'))
|
||||
url = models.URLField()
|
||||
|
@ -42,6 +60,8 @@ class Feed(models.Model):
|
|||
verbose_name=_('CSS classes'),
|
||||
blank=True)
|
||||
|
||||
objects = FeedManager()
|
||||
|
||||
def load(self, now=None, limit=9999):
|
||||
if now is None:
|
||||
now = datetime.datetime.utcnow()
|
||||
|
@ -81,6 +101,8 @@ class Feed(models.Model):
|
|||
utils.launch_in_thread(key, self.load, now, limit)
|
||||
return entries
|
||||
|
||||
def natural_key(self):
|
||||
return (self.name, self.url)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('feed')
|
||||
|
|
Reference in New Issue