コード例 #1
0
ファイル: views.py プロジェクト: carriercomm/mudev
def adv_results(request):
    """Process the form from an advanced search.
    We expect to always get here from the advanced search page and
    always on a get, either from the submit button on the form or the
    paging navigation buttons.

    - On first search submission, load the request session dictionary
      from form values.
    - On subsequent paging calls, if any, form values are pulled from
      the session dictionary.
    """
    start_time = time.time()
    page = request.GET.get('page')
    if page is None:
        # reset session data
        for t in ['searchingfor','composer','style','instrument','lilyversion']:
            request.session[t] = ''
        request.session['time_delta'] = 0

        form = AdvSearchForm(request.GET)
        if form.is_valid():
            if len(form.cleaned_data['searchingfor']) > 0:
                request.session['searchingfor'] = form.cleaned_data['searchingfor']
            if len(form.cleaned_data['composer']) > 0:
                request.session['composer'] = form.cleaned_data['composer']
            if len(form.cleaned_data['style']) > 0:
                request.session['style'] = form.cleaned_data['style']
            if len(form.cleaned_data['instrument']):
                request.session['instrument'] = form.cleaned_data['instrument']
            if form.cleaned_data['lilyv']:
                # still, the user has to fill something in here
                if len(form.cleaned_data['lilyversion']) > 0:
                    request.session['lilyversion'] = form.cleaned_data['lilyversion']

            if form.cleaned_data['recent']:
                # Store the computed time delta in days, not the value
                # of recent. Note that 'timelength' and 'timeunit'
                # values should exist per form constraints.
                td = form.cleaned_data['timelength']
                if form.cleaned_data['timeunit'] == SearchInterval.WEEK:
                    td = 7 * td
                request.session['time_delta'] = td
        else:
            pass                # request session will be cleared

    # Now walk through the session variables to do the query and
    # filtering.
    if len(request.session['searchingfor']) > 0:
        q = fts_search(request.session['searchingfor'])
    else:
        q = Piece.objects.all()

    # Filter on composer, instrument, style, and LilyPond version
    if len(request.session['composer']) > 0:
        q = q.filter(composer=request.session['composer'])
    if len(request.session['style']) > 0:
        q = q.filter(style=request.session['style'])
    if len(request.session['instrument']) > 0:
        q = q.filter(instruments__pk=request.session['instrument'])
    if len(request.session['lilyversion']) > 0:
        q = q.filter(version__version__startswith=request.session['lilyversion'])

    # Finally, filter on delta time in days
    if request.session['time_delta'] > 0:
        td = datetime.timedelta(days=request.session['time_delta'])
        target = datetime.date.today() - td
        q = q.filter(date_published__gte=target)

    paginator = Paginator(q, 25)
    try:
        pager = paginator.page(page)
    except PageNotAnInteger:
        pager = paginator.page(1)
    except EmptyPage:
        pager = paginator.page(paginator.num_pages)

    end_time = time.time()
    context = {
        'active' : 'None',
        'pager' : pager,
        'pieces': pager,
        'search_time': '%2.4g' % (end_time - start_time),
    }
    return render(request, 'results.html', context)
コード例 #2
0
ファイル: test_forms.py プロジェクト: carriercomm/mudev
 def test_default_form(self):
     form = AdvSearchForm({})
     self.assertTrue(form.is_valid())
     response = self.client.get(reverse("search"))
     self.assertTemplateUsed(response, "advsearch.html")
コード例 #3
0
ファイル: views.py プロジェクト: Cloudxtreme/mudev
def adv_results(request):
    """Process the form from an advanced search.
    We expect to always get here from the advanced search page and
    always on a get, either from the submit button on the form or the
    paging navigation buttons.

    - On first search submission, load the request session dictionary
      from form values.
    - On subsequent paging calls, if any, form values are pulled from
      the session dictionary.
    """
    start_time = time.time()
    page = request.GET.get('page')
    if page is None:
        # reset session data
        for t in [
                'searchingfor', 'composer', 'style', 'instrument',
                'lilyversion'
        ]:
            request.session[t] = ''
        request.session['time_delta'] = 0

        form = AdvSearchForm(request.GET)
        if form.is_valid():
            if len(form.cleaned_data['searchingfor']) > 0:
                request.session['searchingfor'] = form.cleaned_data[
                    'searchingfor']
            if len(form.cleaned_data['composer']) > 0:
                request.session['composer'] = form.cleaned_data['composer']
            if len(form.cleaned_data['style']) > 0:
                request.session['style'] = form.cleaned_data['style']
            if len(form.cleaned_data['instrument']):
                request.session['instrument'] = form.cleaned_data['instrument']
            if form.cleaned_data['lilyv']:
                # still, the user has to fill something in here
                if len(form.cleaned_data['lilyversion']) > 0:
                    request.session['lilyversion'] = form.cleaned_data[
                        'lilyversion']

            if form.cleaned_data['recent']:
                # Store the computed time delta in days, not the value
                # of recent. Note that 'timelength' and 'timeunit'
                # values should exist per form constraints.
                td = form.cleaned_data['timelength']
                if form.cleaned_data['timeunit'] == SearchInterval.WEEK:
                    td = 7 * td
                request.session['time_delta'] = td
        else:
            pass  # request session will be cleared

    # Now walk through the session variables to do the query and
    # filtering.
    if len(request.session['searchingfor']) > 0:
        q = fts_search(request.session['searchingfor'])
    else:
        q = Piece.objects.all()

    # Filter on composer, instrument, style, and LilyPond version
    if len(request.session['composer']) > 0:
        q = q.filter(composer=request.session['composer'])
    if len(request.session['style']) > 0:
        q = q.filter(style=request.session['style'])
    if len(request.session['instrument']) > 0:
        q = q.filter(instruments__pk=request.session['instrument'])
    if len(request.session['lilyversion']) > 0:
        q = q.filter(
            version__version__startswith=request.session['lilyversion'])

    # Finally, filter on delta time in days
    if request.session['time_delta'] > 0:
        td = datetime.timedelta(days=request.session['time_delta'])
        target = datetime.date.today() - td
        q = q.filter(date_published__gte=target)

    paginator = Paginator(q, 25)
    try:
        pager = paginator.page(page)
    except PageNotAnInteger:
        pager = paginator.page(1)
    except EmptyPage:
        pager = paginator.page(paginator.num_pages)

    end_time = time.time()
    context = {
        'active': 'None',
        'pager': pager,
        'pieces': pager,
        'search_time': '%2.4g' % (end_time - start_time),
    }
    return render(request, 'results.html', context)
コード例 #4
0
ファイル: test_forms.py プロジェクト: glenl/mudev
 def test_default_form(self):
     form = AdvSearchForm({})
     self.assertTrue(form.is_valid())
     response = self.client.get(reverse('search'))
     self.assertTemplateUsed(response, 'advsearch.html')