Skip to content
Snippets Groups Projects
Commit ebc08d15 authored by Bastien Abadie's avatar Bastien Abadie
Browse files

Merge branch 'handle-nan-inf' into 'master'

Handle NaN and inf floats in search query serializer

See merge request !288
parents 801eeac0 cc255e5f
No related branches found
No related tags found
1 merge request!288Handle NaN and inf floats in search query serializer
......@@ -5,6 +5,7 @@ from arkindex.documents.serializers.elements import ElementLightSerializer
from arkindex.documents.serializers.ml import TranscriptionSerializer
from arkindex.project.serializer_fields import EnumField, SearchTermsField
from arkindex.documents.date_parser import parse_date
import math
class SearchQuerySerializer(serializers.Serializer):
......@@ -27,15 +28,25 @@ class SearchQuerySerializer(serializers.Serializer):
raise serializers.ValidationError('Could not parse Date')
return date[0]
def validate_score(self, value):
if not isinstance(value, float) or math.isinf(value) or math.isnan(value):
raise serializers.ValidationError('Score should be a valid decimal number between 0 and 1')
return value
def validate_date_gte(self, value):
if not value:
return
return self.parse_date(value).es_str()
def validate_date_lte(self, value):
if not value:
return
return self.parse_date(value).es_round_up()
def validate(self, data):
data = super().validate(data)
gte = data['date_gte']
lt = data['date_lt']
if gte:
gte = self.parse_date(gte)
data['date_gte'] = gte.es_str()
if lt:
lt = self.parse_date(lt)
data['date_lt'] = lt.es_round_up()
if gte and lt and gte > lt:
raise serializers.ValidationError("Upper date must be greater than lower date")
return data
......
......@@ -25,6 +25,8 @@ class TestSearchApi(FixtureAPITestCase):
{'q': ' ', 'score': '0.7'},
{'q': 'one', 'score': '1.01'},
{'q': 'that', 'score': 'null'},
{'q': 'that', 'score': 'nan'},
{'q': 'that', 'score': 'inf'},
{'q': 'one two', 'date_lte': '1450-'},
{'q': 'one two', 'date_lte': '1450-02-30'},
{'q': 'one', 'type': 'wrongtype'},
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment