diff options
author | gnowgi <nagarjun@gnowledge.org> | 2012-03-15 16:19:20 +0530 |
---|---|---|
committer | gnowgi <nagarjun@gnowledge.org> | 2012-03-15 16:19:20 +0530 |
commit | 7a4f561e851fdc7246d804c3abb6748b8a4199a6 (patch) | |
tree | d2afc3463fd49625a9be482012f5c3bfcf7c42b9 /objectapp/managers.py | |
download | gnowsys-7a4f561e851fdc7246d804c3abb6748b8a4199a6.tar.gz |
master trunk of gnowsys-studio
Diffstat (limited to 'objectapp/managers.py')
-rw-r--r-- | objectapp/managers.py | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/objectapp/managers.py b/objectapp/managers.py new file mode 100644 index 00000000..99105818 --- /dev/null +++ b/objectapp/managers.py @@ -0,0 +1,146 @@ +# Copyright (c) 2011, 2012 Free Software Foundation + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +# This project incorporates work covered by the following copyright and permission notice: + +# Copyright (c) 2009, Julien Fache +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: + +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of the author nor the names of other +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. + +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +# OF THE POSSIBILITY OF SUCH DAMAGE. + +# Copyright (c) 2011, 2012 Free Software Foundation + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +"""Managers of Objectapp""" +from datetime import datetime + +from django.db import models +from django.contrib.sites.models import Site + +DRAFT = 0 +HIDDEN = 1 +PUBLISHED = 2 + + +def tags_published(): + """Return the published tags""" + from tagging.models import Tag + from objectapp.models import Gbobject + tags_gbobject_published = Tag.objects.usage_for_queryset( + Gbobject.published.all()) + # Need to do that until the issue #44 of django-tagging is fixed + return Tag.objects.filter(name__in=[t.name for t in tags_gbobject_published]) + + +class AuthorPublishedManager(models.Manager): + """Manager to retrieve published authors""" + + def get_query_set(self): + """Return published authors""" + now = datetime.now() + return super(AuthorPublishedManager, self).get_query_set().filter( + gbobjects__status=PUBLISHED, + gbobjects__start_publication__lte=now, + gbobjects__end_publication__gt=now, + gbobjects__sites=Site.objects.get_current() + ).distinct() + + +def gbobjects_published(queryset): + """Return only the gbobjects published""" + now = datetime.now() + return queryset.filter(status=PUBLISHED, + start_publication__lte=now, + end_publication__gt=now, + sites=Site.objects.get_current()) + + +class GbobjectPublishedManager(models.Manager): + """Manager to retrieve published gbobjects""" + + def get_query_set(self): + """Return published gbobjects""" + return gbobjects_published( + super(GbobjectPublishedManager, self).get_query_set()) + + def on_site(self): + """Return gbobjects published on current site""" + return super(GbobjectPublishedManager, self).get_query_set( + ).filter(sites=Site.objects.get_current()) + + def search(self, pattern): + """Top level search method on gbobjects""" + try: + return self.advanced_search(pattern) + except: + return self.basic_search(pattern) + + def advanced_search(self, pattern): + """Advanced search on gbobjects""" + from objectapp.search import advanced_search + return advanced_search(pattern) + + def basic_search(self, pattern): + """Basic search on gbobjects""" + lookup = None + for pattern in pattern.split(): + query_part = models.Q(content__icontains=pattern) | \ + models.Q(excerpt__icontains=pattern) | \ + models.Q(title__icontains=pattern) + if lookup is None: + lookup = query_part + else: + lookup |= query_part + + return self.get_query_set().filter(lookup) |