예제 #1
0
def groups_list(request,
                template='students/groups.html',
                page_template='students/groups_page.html',
                extra_context=None):
    groups = Group.objects.all().order_by('title')
    order_by = request.GET.get('order_by', '')
    if order_by in ('title', 'id'):
        groups = groups.order_by(order_by)
    elif order_by == 'leader':
        groups = groups.order_by("leader__first_name")
    if request.GET.get('reverse', '') == '1':
        groups = groups.reverse()

    context = {"groups": groups,
               'page_template': page_template,
               'start_id': (utils.get_page_number_from_request(request)-1)*15,
               'per_page': 15}

    if extra_context is not None:
        context.update(extra_context)
    if request.is_ajax():
        template = page_template

    return render(request,
                  template,
                  context)
예제 #2
0
def students_list(request,
                  template='students/students_list.html',
                  page_template='students/students_page.html',
                  extra_context=None):
    if request.method == "POST":
        selected = request.POST.getlist('student_select')
        studlist = '/'.join(selected)
        studlist = studlist + "/"
        return HttpResponseRedirect(
            reverse("students_delete", kwargs={'studlist': studlist}))
    else:
        students = Student.objects.all().order_by('last_name')

        order_by = request.GET.get('order_by', '')
        if order_by in ('last_name', 'first_name', 'card', 'id'):
            students = students.order_by(order_by)
            if request.GET.get('reverse', '') == '1':
                students = students.reverse()

        context = {
            'students': students,
            'page_template': page_template,
            'start_id': (utils.get_page_number_from_request(request) - 1) * 15,
            'per_page': 15
        }

        if extra_context is not None:
            context.update(extra_context)
        if request.is_ajax():
            template = page_template

        return render(request, template, context)
예제 #3
0
def groups_list(request,
                template='students/groups.html',
                page_template='students/groups_page.html',
                extra_context=None):
    groups = Group.objects.all().order_by('title')
    order_by = request.GET.get('order_by', '')
    if order_by in ('title', 'id'):
        groups = groups.order_by(order_by)
    elif order_by == 'leader':
        groups = groups.order_by("leader__first_name")
    if request.GET.get('reverse', '') == '1':
        groups = groups.reverse()

    context = {
        "groups": groups,
        'page_template': page_template,
        'start_id': (utils.get_page_number_from_request(request) - 1) * 15,
        'per_page': 15
    }

    if extra_context is not None:
        context.update(extra_context)
    if request.is_ajax():
        template = page_template

    return render(request, template, context)
예제 #4
0
def students_list(request,
                  template='students/students_list.html',
                  page_template='students/students_page.html',
                  extra_context=None):
    if request.method == "POST":
        selected = request.POST.getlist('student_select')
        studlist = '/'.join(selected)
        studlist = studlist + "/"
        return HttpResponseRedirect(reverse("students_delete", kwargs={'studlist': studlist}))
    else:
        students = Student.objects.all().order_by('last_name')

        order_by = request.GET.get('order_by', '')
        if order_by in ('last_name', 'first_name', 'card', 'id'):
            students = students.order_by(order_by)
            if request.GET.get('reverse', '') == '1':
                students = students.reverse()

        context = {'students': students,
                   'page_template': page_template,
                   'start_id': (utils.get_page_number_from_request(request) - 1) * 15,
                   'per_page': 15}

        if extra_context is not None:
            context.update(extra_context)
        if request.is_ajax():
            template = page_template

        return render(request, template, context)
예제 #5
0
    def render(self, context):
        # Handle page number when it is not specified in querystring.
        if self.page_number_variable is None:
            default_number = self.page_number
        else:
            default_number = int(self.page_number_variable.resolve(context))

        # Calculate the number of items to show on each page.
        if self.per_page_variable is None:
            per_page = self.per_page
        else:
            per_page = int(self.per_page_variable.resolve(context))

        # Calculate the number of items to show in the first page.
        if self.first_page_variable is None:
            first_page = self.first_page or per_page
        else:
            first_page = int(self.first_page_variable.resolve(context))

        # User can override the querystring key to use in the template.
        # The default value is defined in the settings file.
        if self.querystring_key_variable is None:
            querystring_key = self.querystring_key
        else:
            querystring_key = self.querystring_key_variable.resolve(context)

        # Retrieve the override path if used.
        if self.override_path_variable is None:
            override_path = self.override_path
        else:
            override_path = self.override_path_variable.resolve(context)

        # The current request is used to get the requested page number.
        page_number = utils.get_page_number_from_request(
            context['request'], querystring_key, default=default_number)

        objects = self.objects.resolve(context)
        paginator = self.paginator(objects,
                                   per_page,
                                   first_page=first_page,
                                   orphans=settings.ORPHANS)

        # Get the page.
        try:
            page = paginator.page(page_number)
        except EmptyPage:
            page = paginator.page(1)

        # Populate the context with required data.
        data = {
            'default_number': default_number,
            'override_path': override_path,
            'page': page,
            'querystring_key': querystring_key,
        }
        context.update({'endless': data, self.var_name: page.object_list})
        return u''
예제 #6
0
파일: endless.py 프로젝트: Maxpcf/MyRepo
    def render(self, context):
        # Handle page number when it is not specified in querystring.
        if self.page_number_variable is None:
            default_number = self.page_number
        else:
            default_number = int(self.page_number_variable.resolve(context))

        # Calculate the number of items to show on each page.
        if self.per_page_variable is None:
            per_page = self.per_page
        else:
            per_page = int(self.per_page_variable.resolve(context))

        # Calculate the number of items to show in the first page.
        if self.first_page_variable is None:
            first_page = self.first_page or per_page
        else:
            first_page = int(self.first_page_variable.resolve(context))

        # User can override the querystring key to use in the template.
        # The default value is defined in the settings file.
        if self.querystring_key_variable is None:
            querystring_key = self.querystring_key
        else:
            querystring_key = self.querystring_key_variable.resolve(context)

        # Retrieve the override path if used.
        if self.override_path_variable is None:
            override_path = self.override_path
        else:
            override_path = self.override_path_variable.resolve(context)

        # The current request is used to get the requested page number.
        page_number = utils.get_page_number_from_request(
            context['request'], querystring_key, default=default_number)

        objects = self.objects.resolve(context)
        paginator = self.paginator(
            objects, per_page, first_page=first_page, orphans=settings.ORPHANS)

        # Get the page.
        try:
            page = paginator.page(page_number)
        except EmptyPage:
            page = paginator.page(1)

        # Populate the context with required data.
        data = {
            'default_number': default_number,
            'override_path': override_path,
            'page': page,
            'querystring_key': querystring_key,
        }
        context.update({'endless': data, self.var_name: page.object_list})
        return u''
예제 #7
0
파일: endless.py 프로젝트: ruizheliUOA/TMA
    def render(self, context):
        # get page number to use if it is not specified in querystring
        if self.page_number_variable is None:
            default_number = self.page_number
        else:
            default_number = int(self.page_number_variable.resolve(context))

        # get number of items to show on each page
        if self.per_page_variable is None:
            per_page = self.per_page
        else:
            per_page = int(self.per_page_variable.resolve(context))

        # get number of items to show in the first page
        if self.first_page_variable is None:
            first_page = self.first_page or per_page
        else:
            first_page = int(self.first_page_variable.resolve(context))

        # user can override settings querystring key in the template
        if self.querystring_key_variable is None:
            querystring_key = self.querystring_key
        else:
            querystring_key = self.querystring_key_variable.resolve(context)

        if self.override_path_variable is None:
            override_path = self.override_path
        else:
            override_path = self.override_path_variable.resolve(context)

        # request is used to get requested page number
        page_number = utils.get_page_number_from_request(
            context["request"], querystring_key, default=default_number)

        objects = self.objects.resolve(context)
        paginator = self.paginator(objects,
                                   per_page,
                                   first_page=first_page,
                                   orphans=settings.ORPHANS)

        # get the page, user in settings can manage the case it is empty
        try:
            page = paginator.page(page_number)
        except EmptyPage:
            page = paginator.page(1)

        # populate context with new data
        context["endless_default_number"] = default_number
        context["endless_querystring_key"] = querystring_key
        context["endless_page"] = page
        context[self.var_name] = page.object_list
        context["endless_override_path"] = override_path
        return ""
예제 #8
0
 def render(self, context):
     # get page number to use if it is not specified in querystring
     if self.page_number_variable is None:
         default_number = self.page_number
     else:
         default_number = int(self.page_number_variable.resolve(context))
     
     # get number of items to show on each page
     if self.per_page_variable is None:
         per_page = self.per_page
     else:
         per_page = int(self.per_page_variable.resolve(context))
 
     # get number of items to show in the first page
     if self.first_page_variable is None:
         first_page = self.first_page or per_page
     else:
         first_page = int(self.first_page_variable.resolve(context))
     
     # user can override settings querystring key in the template
     if self.querystring_key_variable is None:
         querystring_key = self.querystring_key
     else:
         querystring_key = self.querystring_key_variable.resolve(context)
     
     if self.override_path_variable is None:
         override_path = self.override_path
     else:
         override_path = self.override_path_variable.resolve(context)
     
     # request is used to get requested page number
     page_number = utils.get_page_number_from_request(context["request"],
         querystring_key, default=default_number)
     
     objects = self.objects.resolve(context)
     paginator = self.paginator(objects, per_page, first_page=first_page,
         orphans=settings.ORPHANS)
     
     # get the page, user in settings can manage the case it is empty
     try:
         page = paginator.page(page_number)
     except EmptyPage:
         page = paginator.page(1)
     
     # populate context with new data
     context["endless_default_number"] = default_number
     context["endless_querystring_key"] = querystring_key
     context["endless_page"] = page
     context[self.var_name] = page.object_list
     context["endless_override_path"] = override_path
     return ""
 def render(self, context):
     # get page number to use if it is not specified in querystring
     if self.page_number_variable is None:
         default_number = self.page_number
     else:
         default_number = int(self.page_number_variable.resolve(context))
         
     # user can override settings querystring key in the template
     if self.querystring_key_variable is None:
         querystring_key = self.querystring_key
     else:
         querystring_key = self.querystring_key_variable.resolve(context)
     
     page_number = utils.get_page_number_from_request(context["request"],
         querystring_key, default=default_number)
     return unicode(page_number)
예제 #10
0
    def render(self, context):
        # get page number to use if it is not specified in querystring
        if self.page_number_variable is None:
            default_number = self.page_number
        else:
            default_number = int(self.page_number_variable.resolve(context))

        # user can override settings querystring key in the template
        if self.querystring_key_variable is None:
            querystring_key = self.querystring_key
        else:
            querystring_key = self.querystring_key_variable.resolve(context)

        page_number = utils.get_page_number_from_request(
            context["request"], querystring_key, default=default_number)
        return unicode(page_number)
    def render(self, context):
        # Get the page number to use if it is not specified in querystring.
        if self.page_number_variable is None:
            default_number = self.page_number
        else:
            default_number = int(self.page_number_variable.resolve(context))

        # User can override the querystring key to use in the template.
        # The default value is defined in the settings file.
        if self.querystring_key_variable is None:
            querystring_key = self.querystring_key
        else:
            querystring_key = self.querystring_key_variable.resolve(context)

        # The request object is used to retrieve the current page number.
        page_number = utils.get_page_number_from_request(
            context['request'], querystring_key, default=default_number)

        if self.var_name is None:
            return utils.text(page_number)
        context[self.var_name] = page_number
        return ''
예제 #12
0
    def render(self, context):
        # Get the page number to use if it is not specified in querystring.
        if self.page_number_variable is None:
            default_number = self.page_number
        else:
            default_number = int(self.page_number_variable.resolve(context))

        # User can override the querystring key to use in the template.
        # The default value is defined in the settings file.
        if self.querystring_key_variable is None:
            querystring_key = self.querystring_key
        else:
            querystring_key = self.querystring_key_variable.resolve(context)

        # The request object is used to retrieve the current page number.
        page_number = utils.get_page_number_from_request(
            context['request'], querystring_key, default=default_number)

        if self.var_name is None:
            return utils.text(page_number)
        context[self.var_name] = page_number
        return ''
예제 #13
0
    def render(self, context):
        # get page number to use if it is not specified in querystring
        if self.page_number_variable is None:
            default_number = self.page_number
        else:
            default_number = int(self.page_number_variable.resolve(context))

        # get number of items to show on each page
        if self.per_page_variable is None:
            per_page = self.per_page
        else:
            per_page = int(self.per_page_variable.resolve(context))

        # get number of items to show in the first page
        if self.first_page_variable is None:
            first_page = self.first_page or per_page
        else:
            first_page = int(self.first_page_variable.resolve(context))

        # user can override settings querystring key in the template
        if self.querystring_key_variable is None:
            querystring_key = self.querystring_key
        else:
            querystring_key = self.querystring_key_variable.resolve(context)

        if self.override_path_variable is None:
            override_path = self.override_path
        else:
            override_path = self.override_path_variable.resolve(context)

        # request is used to get requested page number
        page_number = utils.get_page_number_from_request(
            context["request"], querystring_key, default=default_number)

        objects = self.objects.resolve(context)

        # display page 1 to page_number, if LazyPagintator is used and the
        # request isnt an ajax request
        # eg: display pages 1 to 3 if a user requests ?page=3 with normal get
        # and lazy pagination is used
        if issubclass(self.paginator,
                      LazyPaginator) and (context.has_key("request") and
                                          not context["request"].is_ajax()):
            paginator = self.paginator(objects,
                                       per_page,
                                       first_page=page_number * per_page,
                                       orphans=settings.ORPHANS)
            page = paginator.page(1)
            page.number = page_number
            if paginator.num_pages > 1:
                paginator._num_pages = page_number + 1
        else:
            paginator = self.paginator(objects,
                                       per_page,
                                       first_page=first_page,
                                       orphans=settings.ORPHANS)
            # get the page, user in settings can manage the case it is empty
            try:
                page = paginator.page(page_number)
            except EmptyPage:
                page = paginator.page(1)

        # populate context with new data
        context["endless_default_number"] = default_number
        context["endless_querystring_key"] = querystring_key
        context["endless_page"] = page
        context[self.var_name] = page.object_list
        context["endless_override_path"] = override_path
        return ""
예제 #14
0
파일: test_utils.py 프로젝트: Maxpcf/MyRepo
 def test_post_data(self):
     # The page number can also be present in POST data.
     request = self.factory.post('/', {PAGE_LABEL: 5})
     self.assertEqual(5, utils.get_page_number_from_request(request))
예제 #15
0
파일: test_utils.py 프로젝트: Maxpcf/MyRepo
 def test_custom_querystring_key(self):
     # Ensure the page returned correctly reflects the ``querystring_key``.
     request = self.factory.get('?mypage=4'.format(PAGE_LABEL))
     page_number = utils.get_page_number_from_request(
         request, querystring_key='mypage')
     self.assertEqual(4, page_number)
예제 #16
0
파일: test_utils.py 프로젝트: Maxpcf/MyRepo
 def test_default(self):
     # Ensure the default page number is returned if page info cannot be
     # retrieved from the querystring.
     request = self.factory.get('/')
     page_number = utils.get_page_number_from_request(request, default=3)
     self.assertEqual(3, page_number)
예제 #17
0
파일: test_utils.py 프로젝트: Maxpcf/MyRepo
 def test_default_querystring_key(self):
     # Ensure the default page label is used if ``querystring_key``
     # is not provided.
     request = self.factory.get('?{0}=2'.format(PAGE_LABEL))
     self.assertEqual(2, utils.get_page_number_from_request(request))
예제 #18
0
def read_with_endless_pagination(request, **kwargs):
    """ Central view for ALL reading lists. """

    (query_kwargs, primary_mode) = \
        _rwep_generate_query_kwargs(request, **kwargs)
    user = request.user

    # —————————————————————————————————————————————————————— Search preparation

    search = request.GET.get('search', None)

    if request.is_ajax():
        # Ajax requests for django-endless-pagination
        # infinite scrolling. Get search query if any.
        search = request.session.get('search', None)

    else:
        # Classic access. Update the session for
        # django-endless-pagination ajax requests.
        search_cleared = search == u'' and request.session['search'] != u''

        request.session['search'] = search

        if search_cleared:
            if request.resolver_match.view_name == u'read_all':
                return redirect('source_selector')

            return redirect(request.path)

    # ———————————————————————————————————————————————————————————— Subscription

    # A “feed” (from the user point of view) is actually
    # a subscription (from the developer point of view).
    subscription = kwargs.get('feed', None)

    if subscription:
        subscription = Subscription.objects.get(id=subscription)

        if subscription.user != user:
            if user.has_staff_access:

                messages.warning(request,
                                 _(u'As administrator, you are '
                                   u'accessing the feed of another user. '
                                   u'USE WITH CAUTION.'), extra_tags='sticky')

            elif user.is_staff_or_superuser_and_enabled:
                return HttpResponseForbidden(
                    u'Staff access explicitely '
                    u'denied (check config.STAFF_HAS_FULL_ACCESS)')

            else:
                return HttpResponseForbidden('Not Owner')

        query_kwargs[u'subscriptions'] = subscription

    # —————————————————————————————————————————————————————————————————— Folder

    folder = kwargs.get('folder', None)

    if folder:
        folder = Folder.objects.get(id=folder)

        if folder.user != user:
            if user.has_staff_access:
                messages.warning(request,
                                 _(u'As administrator, you are '
                                   u'accessing the feed of another user. '
                                   u'USE WITH CAUTION.'), extra_tags='sticky')

            elif user.is_staff_or_superuser_and_enabled:
                return HttpResponseForbidden(
                    u'Staff access explicitely denied '
                    u'(check config.STAFF_HAS_FULL_ACCESS)')

            else:
                return HttpResponseForbidden('Not Owner')

        # LOGGER.info(u'Refining reads by folder %s', folder)

        query_kwargs[u'subscriptions__in'] = Subscription.objects.filter(
            folders__in=folder.get_descendants(include_self=True))

    order_by = _rwep_generate_order_by(request, primary_mode,
                                       subscription, **kwargs)

    # —————————————————————————————————————————————————————————————————— Search

    if search:
        isearch = search.lower()

        # Implement these loops for multi-words search.
        for term in isearch.split():
            if term.startswith(u'+'):
                pass
            elif term.startswith(u'-'):
                pass

        if subscription:
            user_feeds = [subscription.feed]

        elif folder:
            user_feeds = [
                s.feed for s in Subscription.objects.filter(folders=folder)
            ]

        else:
            user_feeds = [s.feed for s in user.subscriptions]

        # LOGGER.info(u'Matched user feeds for search “%s”: %s',
        #            isearch, len(user_feeds))

        # NOTE: sync these filters with core.article.is_good
        #       and core.feed.is_good
        matched_articles = BaseItem.objects.filter(
            feeds__in=user_feeds,
            duplicate_of=None,
        ).filter(
            # Article.translate_polymorphic_Q_object(
            Q(Article___url_absolute=True,
              Article___content_type__in=CONTENT_TYPES_FINAL)
            | Q(instance_of=Article)
            # )
        )

        # LOGGER.info(u'First-pass filtered articles for search “%s”: %s',
        #            isearch, matched_articles.count())

        if config.SEARCH_DB_EXTENDED_FIELDS:
            matched_articles = matched_articles.filter(
                Q(name__icontains=isearch)
                | (
                    Q(instance_of=Article)
                    & (
                        Q(Article___excerpt__icontains=isearch)
                        | Q(Article___content__icontains=isearch)
                    )
                )
                | (
                    Q(instance_of=Email)
                    & Q(Email___is_hidden=False)
                    & Q(Email___content__icontains=isearch)
                )
            )

        else:
            matched_articles = matched_articles.filter(
                Q(name__icontains=isearch)
            )

        # LOGGER.info(u'Matched articles for search “%s”: %s',
        #            isearch, matched_articles.count())

        tags = set()

        for term in search.split():
            try:
                tag = Tag.objects.get(name=term)

            except:
                # Not a tag ?
                pass

            else:
                tags.add(tag)

        # ———————————————————————————————————————————————— Search final queries

        if tags:
            reads = _rwep_wrap_order_by(
                user.reads.filter(**query_kwargs).filter(
                    Q(tags__in=tags) | Q(item__in=matched_articles)
                ).distinct(), order_by)
        else:
            reads = _rwep_wrap_order_by(user.reads.filter(
                item__in=matched_articles, **query_kwargs).distinct(), order_by)

    # ——————————————————————————————————————————————————— NO search final query

    else:
        reads = _rwep_wrap_order_by(user.reads.filter(**query_kwargs), order_by)

    header_text_left, header_text_right = _rwep_build_page_header_text(
        subscription, folder, user, primary_mode)

    context = {
        u'reads': reads,
        u'subscription': subscription,
        u'folder': folder,
        u'current_mode': primary_mode[0],
        u'mode_negated': primary_mode[1],
        u'search': search,
        # 'user' is already there, via a context processor.

        u'read_page_header_text_left': header_text_left,
        u'read_page_header_text_right': header_text_right,

        # are we rendering the first "main"
        # page, or just a subset via ajax?
        u'initial': False,
    }

    # ——————————————————————————————————————————————————————————— Ajax requests

    if request.is_ajax():

        if request.GET.get('count', False):
            count = reads.count()

            #
            # Check and update cache counters
            #

            if search is None:

                try:
                    _rwep_ajax_update_counters(kwargs,
                                               query_kwargs,
                                               user, count)
                except UnicodeDecodeError:
                    pass

                if subscription:
                    _rwep_special_update_counters(subscription, user)

                #
                # prepare the "inline mini-template" for ajax update.
                #

            mode, negated = primary_mode

            if mode == 'is_read' and not negated:
                mode = 'is_unread'

            singular_text, plural_text = READ_STATUS_DATA[mode]['list_headers']

            if count == 0:
                rendered_text = _(u'no item')

            elif count == 1:
                rendered_text = singular_text % {'count': count}

            else:
                rendered_text = plural_text % {'count': count}

            return HttpResponse(rendered_text)

        elif request.GET.get('mark_all_read', False):

            latest_displayed_read = user.reads.get(
                item=BaseItem.objects.get(
                    id=request.GET.get('mark_all_read')))

            _rwep_ajax_mark_all_read(subscription, folder, user,
                                     latest_displayed_read)

            return HttpResponse('DONE')

        else:
            template = u'snippets/read/read-endless-page.html'

            # Computing tenths_counter here is much efficient than doing:
            # {% captureas tenths_counter %}{{ request.GET['page']|mul:10 }}{% endcaptureas %} # NOQA
            # in the template…
            context[u'tenths_counter'] = \
                (get_page_number_from_request(request) - 1) \
                * config.READ_INFINITE_ITEMS_PER_FETCH

        # LOGGER.info(u'Ajax with %s', context.get('tenths_counter'))

    # ———————————————————————————————————————————————————— Standard GET request

    else:
        template = u'read-endless.html'
        context[u'initial'] = True

    return render(request, template, context)
예제 #19
0
 def test_post_data(self):
     # The page number can also be present in POST data.
     request = self.factory.post('/', {PAGE_LABEL: 5})
     self.assertEqual(5, utils.get_page_number_from_request(request))
예제 #20
0
 def test_custom_querystring_key(self):
     # Ensure the page returned correctly reflects the ``querystring_key``.
     request = self.factory.get('?mypage=4'.format(PAGE_LABEL))
     page_number = utils.get_page_number_from_request(
         request, querystring_key='mypage')
     self.assertEqual(4, page_number)
예제 #21
0
 def test_default(self):
     # Ensure the default page number is returned if page info cannot be
     # retrieved from the querystring.
     request = self.factory.get('/')
     page_number = utils.get_page_number_from_request(request, default=3)
     self.assertEqual(3, page_number)
예제 #22
0
파일: views.py 프로젝트: EliotBerriot/1flow
def read_with_endless_pagination(request, **kwargs):

    (query_kwargs,
     primary_mode) = _rwep_generate_query_kwargs(request, **kwargs)
    order_by       = _rwep_generate_order_by(request, **kwargs)
    djuser         = request.user
    user           = djuser.mongo
    #preferences    = user.preferences

    # —————————————————————————————————————————————————— subscription or folder

    # "feed" (from the user point of view) is actually
    # a subscription (from the developer point of view).
    subscription = kwargs.get('feed', None)

    if subscription:
        subscription = Subscription.get_or_404(subscription)

        if subscription.user != user:
            if user.is_staff_or_superuser_and_enabled:

                messages.warning(request, _(u'As administrator, you are '
                                 u'accessing the feed of another user. '
                                 u'USE WITH CAUTION.'), extra_tags='sticky')

            else:
                return HttpResponseForbidden('Not Owner')

        #LOGGER.info(u'Refining reads by subscription %s', subscription)

        query_kwargs[u'subscriptions__contains'] = subscription

    folder = kwargs.get('folder', None)

    if folder:
        folder = Folder.get_or_404(folder)

        if folder.owner != user:
            if user.is_staff_or_superuser_and_enabled:
                messages.warning(request, _(u'As administrator, you are '
                                 u'accessing the feed of another user. '
                                 u'USE WITH CAUTION.'), extra_tags='sticky')

            else:
                return HttpResponseForbidden('Not Owner')

        # LOGGER.info(u'Refining reads by folder %s', folder)

        query_kwargs[u'subscriptions__in'] = \
            Subscription.objects(folders=folder)

    # ——————————————————————————————————————————————————————————————— the query

    #LOGGER.info(u'query_kwargs: %s', query_kwargs)

    reads = user.reads(**query_kwargs).order_by(order_by).no_cache()

    header_text_left, header_text_right = _rwep_build_page_header_text(
        subscription, folder, user, primary_mode)

    context = {
        u'reads': reads,
        u'subscription': subscription,
        u'folder': folder,
        u'current_mode': primary_mode[0],

        # 'user' is already there, via a context processor.

        u'read_page_header_text_left': header_text_left,
        u'read_page_header_text_right': header_text_right,

        # are we rendering the first "main"
        # page, or just a subset via ajax?
        u'initial': False,
    }

    # ——————————————————————————————————————————————————————————— Ajax requests

    if request.is_ajax():

        if request.GET.get('count', False):
            count = reads.count()

            #
            # Check and update cache counters
            #

            try:
                _rwep_ajax_update_counters(kwargs, query_kwargs,
                                           subscription, folder, user, count)
            except UnicodeDecodeError:
                pass

            if subscription:
                _rwep_special_update_counters(subscription, user)

            #
            # prepare the "inline mini-template" for ajax update.
            #

            mode, negated = primary_mode

            if mode == 'is_read' and not negated:
                mode = 'is_unread'

            singular_text, plural_text = Read.status_data[mode]['list_headers']

            if count == 0:
                rendered_text = _(u'no item')

            elif count == 1:
                rendered_text = singular_text % {'count': count}

            else:
                rendered_text = plural_text % {'count': count}

            return HttpResponse(rendered_text)

        elif request.GET.get('mark_all_read', False):

            latest_displayed_read = user.reads.get(
                article=Article.objects.get(
                    id=request.GET.get('mark_all_read')))

            _rwep_ajax_mark_all_read(subscription, folder, user,
                                     latest_displayed_read)

            return HttpResponse('DONE')

        else:
            template = u'snippets/read/read-endless-page.html'

            # Computing tenths_counter here is much efficient than doing:
            # {% captureas tenths_counter %}{{ request.GET['page']|mul:10 }}{% endcaptureas %} # NOQA
            # in the template…
            context[u'tenths_counter'] = \
                (get_page_number_from_request(request) - 1) \
                * config.READ_INFINITE_ITEMS_PER_FETCH

        # LOGGER.info(u'Ajax with %s', context.get('tenths_counter'))

    # ———————————————————————————————————————————————————— Standard GET request

    else:
        template = u'read-endless.html'
        context[u'initial'] = True

    return render(request, template, context)
예제 #23
0
 def test_no_querystring_key(self):
     # Ensure the first page is returned if page info cannot be
     # retrieved from the querystring.
     request = self.factory.get('/')
     self.assertEqual(1, utils.get_page_number_from_request(request))
    def render(self, context):
        # Handle page number when it is not specified in querystring.
        if self.page_number_variable is None:
            default_number = self.page_number
        else:
            default_number = int(self.page_number_variable.resolve(context))

        # Calculate the number of items to show on each page.
        if self.per_page_variable is None:
            per_page = self.per_page
        else:
            per_page = int(self.per_page_variable.resolve(context))

        # Calculate the number of items to show in the first page.
        if self.first_page_variable is None:
            first_page = self.first_page or per_page
        else:
            first_page = int(self.first_page_variable.resolve(context))

        # User can override the querystring key to use in the template.
        # The default value is defined in the settings file.
        if self.querystring_key_variable is None:
            querystring_key = self.querystring_key
        else:
            querystring_key = self.querystring_key_variable.resolve(context)

        # Retrieve the override path if used.
        if self.override_path_variable is None:
            override_path = self.override_path
        else:
            override_path = self.override_path_variable.resolve(context)

        # Retrieve the queryset and create the paginator object.
        #change for portal
        objects = self.objects.resolve(context)
        if isinstance(objects, (list, tuple)):
                paginator = self.paginator(objects, per_page, first_page=first_page, orphans=settings.ORPHANS)
        else:
                paginator = objects
                paginator.per_page = per_page
                paginator.first_page = first_page

        # Normalize the default page number if a negative one is provided.
        if default_number < 0:
            default_number = utils.normalize_page_number(
                default_number, paginator.page_range)

        # The current request is used to get the requested page number.
        page_number = utils.get_page_number_from_request(
            context['request'], querystring_key, default=default_number)

        # Get the page.
        #change for portal

        if isinstance(objects, (list, tuple)):
                try:
                        page = paginator.page(page_number)
                except EmptyPage:
                        page = paginator.page(1)
        else:
                page = paginator.page(1)
                page.number = page_number

        # Populate the context with required data.
        data = {
            'default_number': default_number,
            'override_path': override_path,
            'page': page,
            'querystring_key': querystring_key,
        }
        context.update({'endless': data, self.var_name: page.object_list})
        return ''
예제 #25
0
def product_results(
    request, current_search, template="shopping/shopping_results.html", page_template="shopping/products.html"
):

    # variable setups
    products = Products(
        api_key="SEM34D405CE2A6F4715E79457D08A21B4CEE", api_secret="NmI0ZDkwZmJhMGVkNGU1NWI5Y2ZmYWNkMjgzNzUyZDg"
    )
    current_user = User.objects.get(username=request.user)
    form = ProductSearchForm

    # get user's last search and feed to Semantics3, render results
    query = products.products_field("name", current_search)
    products.get_products()

    # iterate over products, add to results list (position 0 in results)
    results = []

    for i in products.iter():
        results.append(i)

        if len(results) == 10:
            break

    # get lowest prices for each item, add to separate list (position 1 in results)
    lowest_prices = []

    for i in results:
        prices = []
        for store in i["sitedetails"]:
            prices.append("%.02f" % float(store["latestoffers"][0]["price"]))

        prices = sorted(prices)
        lowest_prices.append(prices[0])

    results_master = zip(results, lowest_prices)

    # Django Endless Pagination (Twitter Style Reload)
    if request.is_ajax():
        request_page = utils.get_page_number_from_request(request)
        offset = (request_page - 1) * 10

        products.products_field("offset", offset)
        products.get_products()

        # iterate over products, apply an offset based on page number, add to results list (position 0 in results_master)
        results = []

        for i in products.iter():
            results.append(i)

            if len(results) == 10 + offset:
                break

        # get lowest prices for each item, add to separate list (position 1 in results_master)
        lowest_prices = []

        for i in results:
            prices = []
            for store in i["sitedetails"]:
                prices.append("%.02f" % float(store["latestoffers"][0]["price"]))

            prices = sorted(prices)
            lowest_prices.append(prices[0])

        results_master = zip(results, lowest_prices)
        template = page_template

    # get search query, add to database and session, redirect
    if request.method == "GET":
        form = ProductSearchForm(request.GET)
        if form.is_valid():

            this_search = form.cleaned_data["search"]

            current_search = Search(query=this_search, user=current_user)
            current_search.save()

            return HttpResponseRedirect("/shopping/results/" + this_search)

    if request.method == "POST":
        return HttpResponseRedirect("/overview/")

    CONTEXT = {
        "results": results_master,
        "search": current_search,
        "form": form,
        "page_template": page_template,
        "lowest_prices": lowest_prices,
    }
    return render(request, template, CONTEXT)
    def render(self, context):
        # get page number to use if it is not specified in querystring
        if self.page_number_variable is None:
            default_number = self.page_number
        else:
            default_number = int(self.page_number_variable.resolve(context))

        # get number of items to show on each page
        if self.per_page_variable is None:
            per_page = self.per_page
        else:
            per_page = int(self.per_page_variable.resolve(context))

        # get number of items to show in the first page
        if self.first_page_variable is None:
            first_page = self.first_page or per_page
        else:
            first_page = int(self.first_page_variable.resolve(context))

        # user can override settings querystring key in the template
        if self.querystring_key_variable is None:
            querystring_key = self.querystring_key
        else:
            querystring_key = self.querystring_key_variable.resolve(context)

        if self.override_path_variable is None:
            override_path = self.override_path
        else:
            override_path = self.override_path_variable.resolve(context)

        # request is used to get requested page number
        page_number = utils.get_page_number_from_request(context["request"], querystring_key, default=default_number)

        objects = self.objects.resolve(context)

        # display page 1 to page_number, if LazyPagintator is used and the
        # request isnt an ajax request
        # eg: display pages 1 to 3 if a user requests ?page=3 with normal get
        # and lazy pagination is used
        if issubclass(self.paginator, LazyPaginator) and (
            context.has_key("request") and not context["request"].is_ajax()
        ):
            paginator = self.paginator(objects, per_page, first_page=page_number * per_page, orphans=settings.ORPHANS)
            page = paginator.page(1)
            page.number = page_number
            if paginator.num_pages > 1:
                paginator._num_pages = page_number + 1
        else:
            paginator = self.paginator(objects, per_page, first_page=first_page, orphans=settings.ORPHANS)
            # get the page, user in settings can manage the case it is empty
            try:
                page = paginator.page(page_number)
            except EmptyPage:
                page = paginator.page(1)

        # populate context with new data
        context["endless_default_number"] = default_number
        context["endless_querystring_key"] = querystring_key
        context["endless_page"] = page
        context[self.var_name] = page.object_list
        context["endless_override_path"] = override_path
        return ""
예제 #27
0
파일: test_utils.py 프로젝트: Maxpcf/MyRepo
 def test_no_querystring_key(self):
     # Ensure the first page is returned if page info cannot be
     # retrieved from the querystring.
     request = self.factory.get('/')
     self.assertEqual(1, utils.get_page_number_from_request(request))
예제 #28
0
 def test_default_querystring_key(self):
     # Ensure the default page label is used if ``querystring_key``
     # is not provided.
     request = self.factory.get('?{0}=2'.format(PAGE_LABEL))
     self.assertEqual(2, utils.get_page_number_from_request(request))
예제 #29
0
def user_content_front(request, template='instascraper/index.html', page_template='instascraper/index_page.html'):
    per_page = getattr(settings, 'CUSTOM_GRID_PAGINATION', 16)
    image_count = total_pages = 0
    hashtag_filter_title = 'SHERRIHILL'
    prev_page = next_page = None
    page_number = utils.get_page_number_from_request(request)
    trend_default = None
    queries_without_page = request.GET.copy()
    if queries_without_page.has_key('page'):
        del queries_without_page['page']

    try: trend_default = request.GET['trends']
    except:pass
    recent_default = 1 #if date sort not in url, force sort by newest
    try: recent_default = request.GET['recent']
    except: pass
    form = UserContentFilterForm(initial={
                'trends' : trend_default,
                'recent' : recent_default,
                })
    images = []
    try:
        if recent_default == '2': #sort by oldest first
            images =  InstagramImage.objects.filter(published=True).order_by("created_real")
        else: #sort by newest first
            images =  InstagramImage.objects.filter(published=True).order_by("-created_real")
    except:pass


    if trend_default and images:
        valid_hashtag = None
        try:  valid_hashtag = HashtagQuery.objects.get(pk=trend_default)
        except: pass
        if valid_hashtag:
            hashtag_filter_title = valid_hashtag.query
        images = images.filter(hashtag=trend_default)
    imglist = []
    for i in images:
        imglist.append(i.id)
    slides_list = deque(imglist)
    slides_list.rotate(len(images)/2)
    total_pages = math.ceil(float(len(images)) / float(per_page))
    paginator = Paginator(images, per_page)
    paged_images = paginator.page(page_number)
    if total_pages < 1:
        total_pages = 1
    paged_url = '/%s/?page=' % 'social'

    if page_number < total_pages:
        next_page = paged_url + str(page_number + 1)
    if page_number > 1:
        prev_page = paged_url + str(page_number -1)
    if page_number > total_pages:
        raise Http404
    slides_list = json.dumps(list(slides_list))
    context = {
        'bodyclass': 'user-content',
        'pagetitle': _('#SherriHill'),
        'objects' : images,
        'paged_objects': paged_images,
        'form' : form,
        'queries' : queries_without_page,
        'page_template':page_template,
        'current_page_number':page_number,
        'prev_page' : prev_page,
        'next_page' : next_page,
        'per_page' : per_page,
        'total_pages': total_pages,
        'slides_list': slides_list,
        'hashtag_filter_title' : hashtag_filter_title,
    }
    if request.is_ajax():
        template = page_template
    response = render_to_response(template, context_instance=RequestContext(request, context))
    return response