From 77abbfe756e5c7265b7cc87632f652df76ce818f Mon Sep 17 00:00:00 2001 From: Juliettejns Date: Thu, 14 Mar 2024 09:18:54 +0100 Subject: [PATCH] modifications nom variables case + ajout case sensitivity notlike --- app/main/views/tokens.py | 6 +++--- app/utils/forms.py | 31 +++++++++++++++++-------------- tests/test_selenium/base.py | 1 - 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/app/main/views/tokens.py b/app/main/views/tokens.py index fe462269..79e0f666 100644 --- a/app/main/views/tokens.py +++ b/app/main/views/tokens.py @@ -314,9 +314,9 @@ def tokens_search_through_fields(corpus_id): search_branches: List[Dict[str, str]] = [dict(prod) for prod in product(*flat_fields)] value_filters = [] - caseIssensitive=True + caseIsensitive=True if 'caseBox' in source_dict: - caseIssensitive = False + caseIsensitive = False # for each branch filter (= OR clauses if any) for search_branch in search_branches: # filtre minimal = bon corpus (id) @@ -325,7 +325,7 @@ def tokens_search_through_fields(corpus_id): # for each field (lemma, pos, form, morph) for name, value in search_branch.items(): # transformation couple clé valeur en filtre SQLalchemy - branch_filters.extend(column_search_filter(getattr(WordToken, name), value, case=caseIssensitive)) + branch_filters.extend(column_search_filter(getattr(WordToken, name), value, case_sensitive=caseIsensitive)) value_filters.append(branch_filters) diff --git a/app/utils/forms.py b/app/utils/forms.py index 0f826338..3f041d33 100644 --- a/app/utils/forms.py +++ b/app/utils/forms.py @@ -33,7 +33,7 @@ def prepare_search_string(string: str) -> list: return value -def column_search_filter(field, value: str, case=True) -> list: +def column_search_filter(field, value: str, case_sensitive=True) -> list: """ Based on a field name and a string value, computes the list of search WHERE that needs to be \ applied to a query @@ -41,7 +41,6 @@ def column_search_filter(field, value: str, case=True) -> list: :param value: Search String :return: List of WHERE clauses """ - # modifier ici case. branch_filters = [] if len(value) > 0: value = value.replace(" ", "") @@ -56,23 +55,27 @@ def column_search_filter(field, value: str, case=True) -> list: value = value.replace("*", "%") # unescape '\*' value = value.replace('¤$¤', '*') - - if value.startswith("!") and len(value) > 1: - value = value[1:] - branch_filters.append(field.notlike(value, escape='\\')) - elif case: - # unescape '\!' - value = value.replace('¤$$¤', '!') - branch_filters.append(field.like(value, escape='\\')) + if case_sensitive: + if value.startswith("!") and len(value) > 1: + value = value[1:] + branch_filters.append(field.notlike(value, escape='\\')) + else: + # unescape '\!' + value = value.replace('¤$$¤', '!') + branch_filters.append(field.like(value, escape='\\')) else: - # unescape '\!' - value = value.replace('¤$$¤', '!') - branch_filters.append(field.ilike(value, escape='\\')) + if value.startswith("!") and len(value) > 1: + value = value[1:] + branch_filters.append(func.lower(field).notlike(func.lower(value), escape='\\')) + else: + # unescape '\!' + value = value.replace('¤$$¤', '!') + branch_filters.append(field.ilike(value, escape='\\')) else: # unescape '\*' value = value.replace('¤$¤', '*') - if case: + if case_sensitive: if value is not None and value.startswith("!") and len(value) > 1: value = value[1:] branch_filters.append(field != value) diff --git a/tests/test_selenium/base.py b/tests/test_selenium/base.py index a0d05ef8..75b6b85d 100644 --- a/tests/test_selenium/base.py +++ b/tests/test_selenium/base.py @@ -707,7 +707,6 @@ def setUp(self): db.session.commit() def search(self, form="", lemma="", pos="", morph="", case=False): - print(case) self.go_to_search_tokens_page(TokensSearchThroughFieldsBase.CORPUS_ID, as_callback=False) self.fill_filter_row(form, lemma, pos, morph) if case: