Projet

Général

Profil

0001-settings-decrease-A2_DUPLICATES_THRESHOLD-to-0.2-504.patch

Benjamin Dauvergne, 25 janvier 2021 11:34

Télécharger (3,46 ko)

Voir les différences:

Subject: [PATCH] settings: decrease A2_DUPLICATES_THRESHOLD to 0.2 (#50445)

The original limit of 0.7 is kept for the find-duplicates web-service API.
 src/authentic2/api_views.py            | 2 +-
 src/authentic2/app_settings.py         | 2 +-
 src/authentic2/custom_user/managers.py | 4 ++--
 tests/test_custom_user.py              | 4 ++--
 4 files changed, 6 insertions(+), 6 deletions(-)
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
-