nanterre: ajoute un filtre par niveau de score sur les doublons (#19981)

This commit is contained in:
Thomas NOËL 2017-11-15 14:28:46 +01:00
parent baf29b2b60
commit 32df9a9dfd
2 changed files with 42 additions and 4 deletions

View File

@ -52,6 +52,17 @@ def test_list_doublons(nanterre_classic_family, app):
first_data = response.json['data'][0]
second_data = response.json['data'][1]
url = reverse('rsu-api-doublons') + '?score_min=90&limit=100'
response = app.get(url)
assert response.json['err'] == 0
assert 'more' not in response.json
assert 'cookie' not in response.json
assert len(response.json['data']) == 23 # Duplicate.objects.filter(score__gte=Decimal('0.9')).count()
for doublon in response.json['data']:
assert int(doublon['score']) >= 90
assert response.json['score_min'] == '90'
assert 'score_max' not in response.json
doublon_url = reverse('rsu-api-doublon', kwargs={'doublon_id': '%s %s' % (d.first_id,
d.second_id)})
response = app.get(doublon_url)

View File

@ -24,6 +24,7 @@ import time
import traceback
from dateutil.relativedelta import relativedelta
import datetime
from decimal import Decimal, InvalidOperation
from django.conf import settings
from django.shortcuts import get_object_or_404
@ -1890,6 +1891,21 @@ class DoublonsView(DoublonMixin, APIView):
elif dedup:
qs = qs.filter(state=models.Duplicate.STATE_DEDUP)
if 'score_min' in request.GET:
try:
score_min = Decimal(request.GET['score_min'])
except InvalidOperation:
pass
else:
qs = qs.filter(score__gte=score_min/100)
if 'score_max' in request.GET:
try:
score_max = Decimal(request.GET['score_max'])
except InvalidOperation:
pass
else:
qs = qs.filter(score__lte=score_max/100)
# recherche ciblée
if 'id' in request.GET:
try:
@ -1916,14 +1932,25 @@ class DoublonsView(DoublonMixin, APIView):
'err': 0,
'data': data[:limit],
}
params = {'limit': limit}
if 'score_min' in request.GET:
params['score_min'] = request.GET['score_min']
if 'score_max' in request.GET:
params['score_max'] = request.GET['score_max']
if false_positive:
params['false_positive'] = false_positive
if dedup:
params['dedup'] = dedup
content.update(params)
if len(data) > limit:
since = qs[limit - 1].created.isoformat()
max_id = qs[limit - 1].id
more_url = request.build_absolute_uri(reverse('rsu-api-doublons'))
cookie = '%s_%s' % (since, max_id)
more_url += '?' + urlencode({'limit': limit, 'cookie': cookie})
content['more'] = more_url
content['cookie'] = cookie
content['cookie'] = params['cookie'] = cookie
content['more'] = request.build_absolute_uri(reverse('rsu-api-doublons')) + '?' + urlencode(params)
return Response(content)
doublons = DoublonsView.as_view()