Exemplo n.º 1
0
    def get_queryset(self):
        qs = self.get_initial_queryset()

        order_by = self.request.GET.get('o')
        order_dir = self.request.GET.get('d')

        # Get ordering field name
        if order_by == 'name':
            order = 'name'
        elif order_by == 'actioncount':
            order = 'actioncount'
        elif order_by == 'avg':
            order = 'avg'
        else:
            order = 'usercount'

        # Get ordering direction (asc/desc)
        if order_dir == 'asc':
            prefix = ''
        else:
            prefix = '-'

        # Allow simplified searching
        search_term = self.request.GET.get('q')
        if search_term is not None:
            qs = qs.filter(name__icontains=search_term)

        # Less common sorting options that database cannot handle
        if order == 'actioncount':
            if prefix == '':
                sqs = sorted(qs, key=lambda x: x.target_actions.count())
            else:
                sqs = sorted(qs,
                             key=lambda x: x.target_actions.count(),
                             reverse=True)
            return sqs
        elif order == 'avg':
            if prefix == '':
                sqs = sorted(qs, key=lambda x: float(x.avg_points))
            else:
                sqs = sorted(qs,
                             key=lambda x: float(x.avg_points),
                             reverse=True)
            return sqs
        elif order == 'name':
            if prefix == '':
                sqs = sort_by_locale(qs, key=lambda x: x.__unicode__())
            else:
                sqs = sort_by_locale(qs,
                                     key=lambda x: x.__unicode__(),
                                     reverse=True)
            return sqs

        return qs.order_by("{}{}".format(prefix, order))
Exemplo n.º 2
0
    def get_queryset(self):
        qs = self.get_initial_queryset()

        order_by = self.request.GET.get('o')
        order_dir = self.request.GET.get('d')

        # Get ordering field name
        if order_by == 'name':
            order = 'name'
        elif order_by == 'actioncount':
            order = 'actioncount'
        elif order_by == 'avg':
            order = 'avg'
        else:
            order = 'usercount'

        # Get ordering direction (asc/desc)
        if order_dir == 'asc':
            prefix = ''
        else:
            prefix = '-'

        # Allow simplified searching
        search_term = self.request.GET.get('q')
        if search_term is not None:
            qs = qs.filter(name__icontains=search_term)

        # Less common sorting options that database cannot handle
        if order == 'actioncount':
            if prefix == '':
                sqs = sorted(qs, key=lambda x: x.target_actions.count())
            else:
                sqs = sorted(qs, key=lambda x: x.target_actions.count(), reverse=True)
            return sqs
        elif order == 'avg':
            if prefix == '':
                sqs = sorted(qs, key=lambda x: float(x.avg_points))
            else:
                sqs = sorted(qs, key=lambda x: float(x.avg_points), reverse=True)
            return sqs
        elif order == 'name':
            if prefix == '':
                sqs = sort_by_locale(qs, key=lambda x: x.__unicode__())
            else:
                sqs = sort_by_locale(qs, key=lambda x: x.__unicode__(), reverse=True)
            return sqs

        return qs.order_by("{}{}".format(prefix, order))
Exemplo n.º 3
0
    def get_queryset(self):
        if self.request.QUERY_PARAMS.get('pk'):
            pk = self.request.QUERY_PARAMS.get('pk')
            location = get_object_or_404(Location, pk=pk)
            cached_qs = cache.get(location.slug + '_forum', None)
            if cached_qs is None or not settings.USE_CACHE:
                queryset = Discussion.objects \
                    .filter(location__pk__in=location.get_children_id_list())
                queryset = queryset | Discussion.objects.filter(
                    location=location)
                cache.set(location.slug + '_forum', queryset, timeout=None)
            else:
                queryset = cached_qs
        else:
            queryset = Discussion.objects.all()

        if self.request.QUERY_PARAMS.get('haystack'):
            haystack = self.request.QUERY_PARAMS.get('haystack')
            queryset = queryset.filter(question__icontains=haystack)

        category_pk = self.request.QUERY_PARAMS.get('category')
        if category_pk and category_pk != 'all':
            category = get_object_or_404(ForumCategory, pk=category_pk)
            queryset = queryset.filter(category=category)

        status = self.request.QUERY_PARAMS.get('state')
        if status and status != 'all':
            s = True if status == 'True' else False
            queryset = queryset.filter(status=s)

        time_delta = None
        time = self.request.QUERY_PARAMS.get('time')

        if time == 'day':
            time_delta = datetime.date.today() - datetime.timedelta(days=1)
        if time == 'week':
            time_delta = datetime.date.today() - datetime.timedelta(days=7)
        if time == 'month':
            time_delta = datetime.date.today() - relativedelta(months=1)
        if time == 'year':
            time_delta = datetime.date.today() - relativedelta(years=1)

        if time_delta:
            queryset = queryset.filter(date_created__gte=time_delta)

        sortby = self.request.QUERY_PARAMS.get('sortby')
        if sortby == 'question':
            return sort_by_locale(queryset, lambda x: x.question,
                                  get_language())
        elif sortby == 'oldest':
            return queryset.order_by('date_created')
        elif sortby == 'category':
            return queryset.order_by('category__name')
        elif sortby == 'username':
            l = list(queryset)
            # Order by last name - we assume that every user has full name
            l.sort(key=lambda x: x.creator.get_full_name().split(' ')[1])
            return l

        return queryset.order_by('-date_created')
Exemplo n.º 4
0
    def get_queryset(self):
        if self.request.QUERY_PARAMS.get('pk'):
            pk = self.request.QUERY_PARAMS.get('pk')
            location = get_object_or_404(Location, pk=pk)
            cached_qs = cache.get(location.slug + '_forum', None)
            if cached_qs is None or not settings.USE_CACHE:
                queryset = Discussion.objects \
                    .filter(location__pk__in=location.get_children_id_list())
                queryset = queryset | Discussion.objects.filter(location=location)
                cache.set(location.slug + '_forum', queryset, timeout=None)
            else:
                queryset = cached_qs
        else:
            queryset = Discussion.objects.all()

        if self.request.QUERY_PARAMS.get('haystack'):
            haystack = self.request.QUERY_PARAMS.get('haystack')
            queryset = queryset.filter(question__icontains=haystack)

        category_pk = self.request.QUERY_PARAMS.get('category')
        if category_pk and category_pk != 'all':
            category = get_object_or_404(ForumCategory, pk=category_pk)
            queryset = queryset.filter(category=category)

        status = self.request.QUERY_PARAMS.get('state')
        if status and status != 'all':
            s = True if status == 'True' else False
            queryset = queryset.filter(status=s)

        time_delta = None
        time = self.request.QUERY_PARAMS.get('time')

        if time == 'day':
            time_delta = datetime.date.today() - datetime.timedelta(days=1)
        if time == 'week':
            time_delta = datetime.date.today() - datetime.timedelta(days=7)
        if time == 'month':
            time_delta = datetime.date.today() - relativedelta(months=1)
        if time == 'year':
            time_delta = datetime.date.today() - relativedelta(years=1)

        if time_delta:
            queryset = queryset.filter(date_created__gte=time_delta)

        sortby = self.request.QUERY_PARAMS.get('sortby')
        if sortby == 'question':
            return sort_by_locale(queryset, lambda x: x.question, get_language())
        elif sortby == 'oldest':
            return queryset.order_by('date_created')
        elif sortby == 'category':
            return queryset.order_by('category__name')
        elif sortby == 'username':
            l = list(queryset)
            # Order by last name - we assume that every user has full name
            l.sort(key=lambda x: x.creator.get_full_name().split(' ')[1])
            return l

        return queryset.order_by('-date_created')
Exemplo n.º 5
0
 def get_queryset(self):
     pk = self.request.QUERY_PARAMS.get('pk', None)
     if pk:
         try:
             location = Location.objects.get(pk=pk)
             key = "{}_{}_{}".format(location.slug,
                                     translation.get_language(), 'sub')
             cached_qs = redis_cache.get(key, None)
             if cached_qs is None or not settings.USE_CACHE:
                 queryset = location.location_set.all()
                 redis_cache.set(key, queryset)
             else:
                 queryset = cached_qs
         except Location.DoesNotExist:
             queryset = Location.objects.all()
         return sort_by_locale(queryset, lambda x: x.__unicode__(),
                               translation.get_language())
     return sort_by_locale(Location.objects.all(), lambda x: x.name,
                           translation.get_language())
Exemplo n.º 6
0
 def get_queryset(self):
     try:
         pk = int(self.request.QUERY_PARAMS.get('pk'))
     except (ValueError, UnicodeError):
         raise Http404
     location = get_object_or_404(Location, pk=pk)
     key = "{}_{}_sub".format(location.slug, translation.get_language())
     queryset = redis_cache.get(key)
     if queryset is None:
         queryset = location.location_set.all()
         redis_cache.set(key, queryset)
     return sort_by_locale(queryset, lambda x: x.name)
Exemplo n.º 7
0
 def get_queryset(self):
     try:
         pk = int(self.request.QUERY_PARAMS.get('pk'))
     except (ValueError, UnicodeError):
         raise Http404
     location = get_object_or_404(Location, pk=pk)
     key = "{}_{}_sub".format(location.slug, translation.get_language())
     queryset = redis_cache.get(key)
     if queryset is None:
         queryset = location.location_set.all()
         redis_cache.set(key, queryset)
     return sort_by_locale(queryset, lambda x: x.name)
Exemplo n.º 8
0
    def get_queryset(self):
        if self.request.QUERY_PARAMS.get('pk'):
            pk = self.request.QUERY_PARAMS.get('pk')
            location = get_object_or_404(Location, pk=pk)
            cached_qs = cache.get(location.slug + '_polls', None)
            if cached_qs is None or not settings.USE_CACHE:
                newset = Poll.objects \
                    .filter(location__pk__in=location.get_children_id_list())
                newset = newset | Poll.objects.filter(location=location)
                cache.set(location.slug + '_polls', newset, timeout=None)
            else:
                newset = cached_qs
        else:
            newset = Poll.objects.all()

        if self.request.QUERY_PARAMS.get('haystack'):
            haystack = self.request.QUERY_PARAMS.get('haystack')
            newset = newset.filter(title__icontains=haystack)

        time_delta = None
        time = self.request.QUERY_PARAMS.get('time')

        if time == 'day':
            time_delta = datetime.date.today() - datetime.timedelta(days=1)
        if time == 'week':
            time_delta = datetime.date.today() - datetime.timedelta(days=7)
        if time == 'month':
            time_delta = datetime.date.today() - relativedelta(months=1)
        if time == 'year':
            time_delta = datetime.date.today() - relativedelta(years=1)

        if time_delta:
            newset = newset.filter(date_created__gte=time_delta)

        sortby = self.request.QUERY_PARAMS.get('sortby')
        if sortby == 'question':
            return sort_by_locale(newset, lambda x: x.question, get_language())
        elif sortby == 'oldest':
            return newset.order_by('date_created')
        elif sortby == 'username':
            l = list(newset)
            # Order by last name - we assume that every user has full name
            l.sort(key=lambda x: x.creator.get_full_name().split(' ')[1])
            return l

        return newset.order_by('-date_created')
Exemplo n.º 9
0
    def get_queryset(self):
        if self.request.QUERY_PARAMS.get('pk'):
            pk = self.request.QUERY_PARAMS.get('pk')
            location = get_object_or_404(Location, pk=pk)
            cached_qs = cache.get(location.slug+'_polls', None)
            if cached_qs is None or not settings.USE_CACHE:
                newset = Poll.objects \
                    .filter(location__pk__in=location.get_children_id_list())
                newset = newset | Poll.objects.filter(location=location)
                cache.set(location.slug+'_polls', newset, timeout=None)
            else:
                newset = cached_qs
        else:
            newset = Poll.objects.all()

        if self.request.QUERY_PARAMS.get('haystack'):
            haystack = self.request.QUERY_PARAMS.get('haystack')
            newset = newset.filter(title__icontains=haystack)

        time_delta = None
        time = self.request.QUERY_PARAMS.get('time')

        if time == 'day':
            time_delta = datetime.date.today() - datetime.timedelta(days=1)
        if time == 'week':
            time_delta = datetime.date.today() - datetime.timedelta(days=7)
        if time == 'month':
            time_delta = datetime.date.today() - relativedelta(months=1)
        if time == 'year':
            time_delta = datetime.date.today() - relativedelta(years=1)

        if time_delta:
            newset = newset.filter(date_created__gte=time_delta)

        sortby = self.request.QUERY_PARAMS.get('sortby')
        if sortby == 'question':
            return sort_by_locale(newset, lambda x: x.question, get_language())
        elif sortby == 'oldest':
            return newset.order_by('date_created')
        elif sortby == 'username':
            l = list(newset)
            # Order by last name - we assume that every user has full name
            l.sort(key=lambda x: x.creator.get_full_name().split(' ')[1])
            return l

        return newset.order_by('-date_created')
Exemplo n.º 10
0
 def news_tags(self):
     tags = []
     for news in self.news_set.all():
         tags += [x for x in news.tags.all() if x not in tags]
     return sort_by_locale(tags, key=lambda x: x.name)
Exemplo n.º 11
0
    def get(self, request):

        # Id lokacji, z której pobieramy wpisy
        try:
            location_pk = int(request.QUERY_PARAMS.get('pk'))
        except (ValueError, TypeError):
            location_pk = None

        # Numer strony do wyświetlenia
        try:
            page = int(request.QUERY_PARAMS.get('page'))
        except (ValueError, TypeError):
            page = 1

        # Ilość elementów na stronę
        try:
            per_page = int(request.QUERY_PARAMS.get('per_page'))
        except (ValueError, TypeError):
            per_page = self.paginate_by

        # Rodzaj typu zawartości (albo wszystkie)
        content = request.QUERY_PARAMS.get('content', 'all')

        # Przedział czasowy do przeszukania
        time = get_time_difference(request.QUERY_PARAMS.get('time', 'any'))

        # Wyszukiwanie po tytułach wpisów
        haystack = request.QUERY_PARAMS.get('haystack')

        # Wyszukiwanie poprzez ID kategorii (jeżeli dotyczy)
        try:
            category = int(request.QUERY_PARAMS.get('category'))
        except (ValueError, TypeError):
            category = None

        location = get_object_or_404(Location, pk=location_pk)
        content_objects = location.content_objects()

        if content != 'all':
            content_objects = [x for x in content_objects if x['type']==content]
        if time is not None:
            content_objects = [x for x in content_objects\
                                    if x['date_created'] >= time.isoformat()]
        if haystack:
            content_objects = [x for x in content_objects \
                                    if haystack.lower() in x['title'].lower()]
        if category is not None:
            content_objects = [x for x in content_objects if x['category']['pk']==category]

        # Opcje sortowania wyników (dotyczy konkretnych obiektów)
        sortby = self.request.QUERY_PARAMS.get('sortby')
        if sortby == 'title':
            content_objects = sort_by_locale(content_objects,
                            lambda x: x['title'], translation.get_language())
        elif sortby == 'oldest':
            content_objects.sort(key=lambda x: x['date_created'])
        elif sortby == 'newest':
            content_objects.sort(key=lambda x: x['date_created'], reversed=True)
        elif sortby == 'user':
            content_objects.sort(key=lambda x: x['creator']['name'].split(' ')[1])

        paginator = Paginator(content_objects, per_page)
        try:
            items = paginator.page(page)
        except EmptyPage:
            items = paginator.page(1)
        serializer = ContentPaginatedSerializer(items, context={'request': request})

        return Response(serializer.data)
Exemplo n.º 12
0
 def get_queryset(self):
     return sort_by_locale(
         super(LocationLocaleManager, self).get_queryset(),
         lambda x: x.__unicode__(), get_language())
Exemplo n.º 13
0
 def followed_locations(self):
     """ The method returns a list of locations follows by the user. """
     follows = [x for x in following(self.user, Location) if x is not None]
     return sort_by_locale(follows, lambda x: x.name, get_language())
Exemplo n.º 14
0
    def get(self, request):

        # Location Id from which we gather entries
        try:
            location_pk = int(request.QUERY_PARAMS.get('pk'))
        except (ValueError, TypeError):
            location_pk = None

        # Number of page that is going to be displayed
        try:
            page = int(request.QUERY_PARAMS.get('page'))
        except (ValueError, TypeError):
            page = 1

        # Number of elements on the site
        try:
            per_page = int(request.QUERY_PARAMS.get('per_page'))
        except (ValueError, TypeError):
            per_page = self.paginate_by

        # Type of content (or all)
        content = request.QUERY_PARAMS.get('content', 'all')

        # Time duration for search
        time = get_time_difference(request.QUERY_PARAMS.get('time', 'any'))

        # Search by entries' titles
        haystack = request.QUERY_PARAMS.get('haystack')

        # Search through category ID (if applicable)
        try:
            category = int(request.QUERY_PARAMS.get('category'))
        except (ValueError, TypeError):
            category = None

        location = get_object_or_404(Location, pk=location_pk)
        content_objects = location.content_objects()

        if content != 'all':
            content_objects = [
                x for x in content_objects if x['type'] == content
            ]
        if time is not None:
            content_objects = [x for x in content_objects\
                                    if x['date_created'] >= time.isoformat()]
        if haystack:
            content_objects = [x for x in content_objects \
                                    if haystack.lower() in x['title'].lower()]
        if category is not None:
            content_objects = [
                x for x in content_objects if x['category']['pk'] == category
            ]

        # Sort results option (Opcje sortowania wyników (is applicable to concrete objects)
        sortby = self.request.QUERY_PARAMS.get('sortby')
        if sortby == 'title':
            content_objects = sort_by_locale(content_objects,
                                             lambda x: x['title'],
                                             translation.get_language())
        elif sortby == 'oldest':
            content_objects.sort(key=lambda x: x['date_created'])
        elif sortby == 'newest':
            content_objects.sort(key=lambda x: x['date_created'],
                                 reversed=True)
        elif sortby == 'user':
            content_objects.sort(
                key=lambda x: x['creator']['name'].split(' ')[1])

        paginator = Paginator(content_objects, per_page)
        try:
            items = paginator.page(page)
        except EmptyPage:
            items = paginator.page(1)
        serializer = ContentPaginatedSerializer(items,
                                                context={'request': request})

        return Response(serializer.data)
Exemplo n.º 15
0
 def followed_locations(self):
     """ Metoda zwraca listę lokalizacji obserwowanych przez użytkownika. """
     follows = [x for x in following(self.user, Location) if x is not None]
     return sort_by_locale(follows, lambda x: x.name, get_language())
Exemplo n.º 16
0
 def followed_locations(self):
     """ The method returns a list of locations follows by the user. """
     follows = [x for x in following(self.user, Location) if x is not None]
     return sort_by_locale(follows, lambda x: x.name, get_language())
Exemplo n.º 17
0
 def news_tags(self):
     tags = []
     for news in self.news_set.all():
         tags += [x for x in news.tags.all() if x not in tags]
     return sort_by_locale(tags, key=lambda x: x.name)
Exemplo n.º 18
0
    def get(self, request):

        # Location Id from which we gather entries
        try:
            location_pk = int(request.QUERY_PARAMS.get('pk'))
        except (ValueError, TypeError):
            location_pk = None

        # Number of page that is going to be displayed
        try:
            page = int(request.QUERY_PARAMS.get('page'))
        except (ValueError, TypeError):
            page = 1

        # Number of elements on the site
        try:
            per_page = int(request.QUERY_PARAMS.get('per_page'))
        except (ValueError, TypeError):
            per_page = self.paginate_by

        # Type of content (or all)
        content = request.QUERY_PARAMS.get('content', 'all')

        # Time duration for search
        time = get_time_difference(request.QUERY_PARAMS.get('time', 'any'))

        # Search by entries' titles
        haystack = request.QUERY_PARAMS.get('haystack')

        # Search through category ID (if applicable)
        try:
            category = int(request.QUERY_PARAMS.get('category'))
        except (ValueError, TypeError):
            category = None

        location = get_object_or_404(Location, pk=location_pk)
        content_objects = location.content_objects()

        if content != 'all':
            content_objects = [x for x in content_objects
                               if x['type'] == content]
        if time is not None:
            content_objects = [x for x in content_objects\
                                    if x['date_created'] >= time.isoformat()]
        if haystack:
            content_objects = [x for x in content_objects \
                                    if haystack.lower() in x['title'].lower()]
        if category is not None:
            content_objects = [x for x in content_objects
                               if x['category']['pk'] == category]

        # Sort results option (Opcje sortowania wyników (is applicable to concrete objects)
        sortby = self.request.QUERY_PARAMS.get('sortby')
        if sortby == 'title':
            content_objects = sort_by_locale(content_objects,
                                             lambda x: x['title'],
                                             translation.get_language())
        elif sortby == 'oldest':
            content_objects.sort(key=lambda x: x['date_created'])
        elif sortby == 'newest':
            content_objects.sort(key=lambda x: x['date_created'],
                                 reversed=True)
        elif sortby == 'user':
            content_objects.sort(
                key=lambda x: x['creator']['name'].split(' ')[1])

        paginator = Paginator(content_objects, per_page)
        try:
            items = paginator.page(page)
        except EmptyPage:
            items = paginator.page(1)
        serializer = ContentPaginatedSerializer(items,
                                                context={'request': request})

        return Response(serializer.data)
Exemplo n.º 19
0
 def get_queryset(self):
     return sort_by_locale(super(LocationLocaleManager, self).get_queryset(),
                     lambda x: x.__unicode__(), translation.get_language())