nanterre: ignore invalid dates during free text search (#45320)

This commit is contained in:
Benjamin Dauvergne 2020-09-18 08:54:48 +02:00
parent 404c008336
commit a3bda805cc
2 changed files with 29 additions and 9 deletions

View File

@ -27,8 +27,7 @@ def test_person_search(db, rsu):
assert rsu[0].id == found[0].id
assert found[0].similarity == 1.0
found = list(search.search_query(rsu[0].content['prenoms'] + ' ' +
rsu[0].content['nom_de_naissance']))
found = list(search.search_query(rsu[0].content['prenoms'] + ' ' + rsu[0].content['nom_de_naissance']))
assert rsu[0].id == found[0].id
assert found[0].similarity == 1.0
@ -49,6 +48,16 @@ def test_person_search(db, rsu):
found = list(search.search_identifier('%d' % rsu[0].id))
assert found[0].id == rsu[0].id
# check that a valid date restrain the scope of the search
found = list(search.search_email(rsu[0].content['email']).search_birthdate('01/01/1919'))
assert len(found) == 0
# check that an invalid date is ignored
found = list(search.search_email(rsu[0].content['email']).search_birthdate('99/01/1919'))
assert len(found) == 1
found = list(search.search_email(rsu[0].content['email']).search_birthdate('99/1919'))
assert len(found) == 1
def test_person_search_api(app, db, rsu):
url = reverse('rsu-api-search')

View File

@ -300,15 +300,26 @@ class PersonSearch(object):
year += 2000
birthdate['year'] = str(year)
if birthdate['day']:
before = after = datetime.date(
int(birthdate['year']), int(birthdate['month']), int(birthdate['day']))
try:
before = after = datetime.date(
int(birthdate['year']),
int(birthdate['month']),
int(birthdate['day']))
except ValueError:
return self
elif birthdate['month']:
after = datetime.date(int(birthdate['year']), int(birthdate['month']), 1)
before = ((after + datetime.timedelta(days=31)).replace(day=1)
- datetime.timedelta(days=1))
try:
after = datetime.date(int(birthdate['year']), int(birthdate['month']), 1)
before = ((after + datetime.timedelta(days=31)).replace(day=1)
- datetime.timedelta(days=1))
except ValueError:
return self
else:
after = datetime.date(int(birthdate['year']), 1, 1)
before = datetime.date(int(birthdate['year']), 12, 31)
try:
after = datetime.date(int(birthdate['year']), 1, 1)
before = datetime.date(int(birthdate['year']), 12, 31)
except ValueError:
return self
first_january_same_year = None
if before == after and window_days is not None: