Skip to content
Snippets Groups Projects
Commit cc255e5f authored by Erwan Rouchet's avatar Erwan Rouchet Committed by Bastien Abadie
Browse files

Handle NaN and inf floats in search query serializer

parent 801eeac0
No related branches found
No related tags found
No related merge requests found
......@@ -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