zinnia.managers
Covered: 62 lines
Missed: 2 lines
Skipped 19 lines
Percent: 96 %
 1
"""Managers of Zinnia"""
 2
from datetime import datetime
 4
from django.db import models
 5
from django.contrib.sites.models import Site
 7
DRAFT = 0
 8
HIDDEN = 1
 9
PUBLISHED = 2
12
def tags_published():
13
    """Return the published tags"""
14
    from tagging.models import Tag
15
    from zinnia.models import Entry
16
    tags_entry_published = Tag.objects.usage_for_queryset(
17
        Entry.published.all())
19
    return Tag.objects.filter(name__in=[t.name for t in tags_entry_published])
22
class AuthorPublishedManager(models.Manager):
23
    """Manager to retrieve published authors"""
25
    def get_query_set(self):
26
        """Return published authors"""
27
        now = datetime.now()
28
        return super(AuthorPublishedManager, self).get_query_set().filter(
29
            entry__status=PUBLISHED,
30
            entry__start_publication__lte=now,
31
            entry__end_publication__gt=now,
32
            entry__sites=Site.objects.get_current()
33
            ).distinct()
36
def entries_published(queryset):
37
    """Return only the entries published"""
38
    now = datetime.now()
39
    return queryset.filter(status=PUBLISHED,
40
                           start_publication__lte=now,
41
                           end_publication__gt=now,
42
                           sites=Site.objects.get_current())
45
class EntryPublishedManager(models.Manager):
46
    """Manager to retrieve published entries"""
48
    def get_query_set(self):
49
        """Return published entries"""
50
        return entries_published(
51
            super(EntryPublishedManager, self).get_query_set())
53
    def on_site(self):
54
        """Return entries published on current site"""
55
        return super(EntryPublishedManager, self).get_query_set(
56
            ).filter(sites=Site.objects.get_current())
58
    def search(self, pattern):
59
        """Top level search method on entries"""
60
        try:
61
            return self.advanced_search(pattern)
62
        except:
63
            return self.basic_search(pattern)
65
    def advanced_search(self, pattern):
66
        """Advanced search on entries"""
67
        from zinnia.search import advanced_search
68
        return advanced_search(pattern)
70
    def basic_search(self, pattern):
71
        """Basic search on entries"""
72
        lookup = None
73
        for pattern in pattern.split():
74
            query_part = models.Q(content__icontains=pattern) | \
75
                         models.Q(excerpt__icontains=pattern) | \
76
                         models.Q(title__icontains=pattern)
77
            if lookup is None:
78
                lookup = query_part
79
            else:
80
                lookup |= query_part
82
        return self.get_query_set().filter(lookup)