0001-settings-decrease-A2_DUPLICATES_THRESHOLD-to-0.2-504.patch
src/authentic2/api_views.py | ||
---|---|---|
871 | 871 | |
872 | 872 |
attributes = data.pop('attributes', {}) |
873 | 873 |
birthdate = attributes.get('birthdate') |
874 |
qs = User.objects.find_duplicates(first_name, last_name, birthdate=birthdate) |
|
874 |
qs = User.objects.find_duplicates(first_name, last_name, birthdate=birthdate, threshold=0.7)
|
|
875 | 875 | |
876 | 876 |
return Response({ |
877 | 877 |
'data': DuplicateUserSerializer(qs, many=True).data, |
src/authentic2/app_settings.py | ||
---|---|---|
346 | 346 |
default=True, |
347 | 347 |
definition='If an active token exists, warn user before generating a new one.'), |
348 | 348 |
A2_DUPLICATES_THRESHOLD=Setting( |
349 |
default=0.7,
|
|
349 |
default=0.2,
|
|
350 | 350 |
definition='Trigram similarity threshold for considering user as duplicate.'), |
351 | 351 |
A2_DUPLICATES_BIRTHDATE_BONUS=Setting( |
352 | 352 |
default=0.3, |
src/authentic2/custom_user/managers.py | ||
---|---|---|
92 | 92 |
qs = qs.order_by('dist', 'last_name', 'first_name') |
93 | 93 |
return qs |
94 | 94 | |
95 |
def find_duplicates(self, first_name=None, last_name=None, fullname=None, birthdate=None, limit=5): |
|
95 |
def find_duplicates(self, first_name=None, last_name=None, fullname=None, birthdate=None, limit=5, threshold=None):
|
|
96 | 96 |
with connection.cursor() as cursor: |
97 | 97 |
cursor.execute( |
98 |
"SET pg_trgm.similarity_threshold = %f" % app_settings.A2_DUPLICATES_THRESHOLD
|
|
98 |
"SET pg_trgm.similarity_threshold = %f" % (threshold or app_settings.A2_DUPLICATES_THRESHOLD)
|
|
99 | 99 |
) |
100 | 100 | |
101 | 101 |
if fullname is not None: |
tests/test_custom_user.py | ||
---|---|---|
127 | 127 |
# dist attribute signals queryset from find_duplicates() |
128 | 128 |
assert hasattr(User.objects.free_text_search('darmettein')[0], 'dist') |
129 | 129 | |
130 |
assert User.objects.free_text_search('lea darmettein').count() == 1 |
|
130 |
assert User.objects.free_text_search('lea darmettein').filter(dist__lte=0.3).count() == 1
|
|
131 | 131 |
assert hasattr(User.objects.free_text_search('darmettein')[0], 'dist') |
132 | 132 | |
133 | 133 | |
134 | 134 |
def test_fts_legacy(fts): |
135 |
assert User.objects.free_text_search('rue des peupliers').count() == 2
|
|
135 |
assert User.objects.free_text_search('rue des peupliers').count() == 3
|
|
136 | 136 | |
137 | 137 | |
138 | 138 |
def test_fts_legacy_and_trigram(fts): |
139 |
- |