From 6d409ef56d125760d27d49950f6da311d6170d52 Mon Sep 17 00:00:00 2001 From: Caio Date: Thu, 22 Feb 2024 18:16:04 -0300 Subject: [PATCH 1/5] api(views): update view to use search tool class --- api/api/views/views.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/api/api/views/views.py b/api/api/views/views.py index c10f749..de39b78 100644 --- a/api/api/views/views.py +++ b/api/api/views/views.py @@ -13,6 +13,7 @@ from utils.sessions import get_current_year_and_period, get_next_period from utils.schedule_generator import ScheduleGenerator from utils.db_handler import get_best_similarities_by_name, filter_disciplines_by_teacher, filter_disciplines_by_year_and_period, filter_disciplines_by_code +from utils.search import SearchTool from .. import serializers from api.swagger import Errors @@ -37,17 +38,16 @@ def treat_string(self, string: str | None) -> str | None: return string def filter_disciplines(self, request: request.Request, name: str) -> QuerySet[Discipline]: - unicode_name = unidecode(name).casefold() - model_handler = admin.ModelAdmin(Discipline, admin.site) - model_handler.search_fields = [ - 'unicode_name', 'code'] - - disciplines = Discipline.objects.all() - - disciplines, _ = model_handler.get_search_results( - request, disciplines, unicode_name) + search_handler = SearchTool(Discipline) + search_fields = ['unicode_name', 'code'] + + result = search_handler.filter_by_search_result( + request = request, + search_str = name, + search_fields = search_fields + ) - return disciplines + return result def retrieve_disciplines_by_similarity(self, request: request.Request, name: str) -> QuerySet[Discipline]: disciplines = self.filter_disciplines(request, name) From 9b2a0323d6e8467e31c18c40c77f6c257b52e269 Mon Sep 17 00:00:00 2001 From: Caio Date: Thu, 22 Feb 2024 18:21:39 -0300 Subject: [PATCH 2/5] utils(search): separate search admin tool --- api/utils/search.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 api/utils/search.py diff --git a/api/utils/search.py b/api/utils/search.py new file mode 100644 index 0000000..aa2373e --- /dev/null +++ b/api/utils/search.py @@ -0,0 +1,25 @@ +from django.contrib.admin import ModelAdmin, site +from django.db.models.query import QuerySet +from django.db.models import Model +from rest_framework.request import Request +from unidecode import unidecode +from typing import Any, Type + +class SearchTool: + """ + Search for models by given model fields and a search string. + """ + def __init__(self, model: Type[Model]) -> None: + self.model = model + + def filter_by_search_result(self, request: Request, search_str: str, search_fields: list[str]) -> QuerySet[Any]: + unicode_search_str = unidecode(search_str).casefold() + model_handler = ModelAdmin(self.model, site) + model_handler.search_fields = search_fields + + values = self.model.objects.all() + + values, _ = model_handler.get_search_results( + request, values, unicode_search_str) + + return values \ No newline at end of file From cb083e684241a5b6402a141f860069293621d8a8 Mon Sep 17 00:00:00 2001 From: Caio Date: Thu, 22 Feb 2024 18:38:57 -0300 Subject: [PATCH 3/5] fix(views): remove useless imports --- api/api/views/views.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/api/api/views/views.py b/api/api/views/views.py index de39b78..353f087 100644 --- a/api/api/views/views.py +++ b/api/api/views/views.py @@ -1,7 +1,5 @@ -from unidecode import unidecode -from ..models import Class, Discipline +from ..models import Discipline -from django.contrib import admin from django.db.models.query import QuerySet from rest_framework.decorators import APIView From bf186ee569e5df6d447014ada8ef14f3f3f23bb7 Mon Sep 17 00:00:00 2001 From: Caio Date: Thu, 22 Feb 2024 18:39:17 -0300 Subject: [PATCH 4/5] fix(utils/search): add trailing whitespace --- api/utils/search.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api/utils/search.py b/api/utils/search.py index aa2373e..133f2b3 100644 --- a/api/utils/search.py +++ b/api/utils/search.py @@ -22,4 +22,5 @@ def filter_by_search_result(self, request: Request, search_str: str, search_fiel values, _ = model_handler.get_search_results( request, values, unicode_search_str) - return values \ No newline at end of file + return values + \ No newline at end of file From 8e30ba5b250c368a98d76e8ff36153d3e70c40cd Mon Sep 17 00:00:00 2001 From: Caio Date: Thu, 4 Apr 2024 16:52:27 -0300 Subject: [PATCH 5/5] remove trailing space --- api/utils/search.py | 1 - 1 file changed, 1 deletion(-) diff --git a/api/utils/search.py b/api/utils/search.py index 133f2b3..c8fc4e6 100644 --- a/api/utils/search.py +++ b/api/utils/search.py @@ -23,4 +23,3 @@ def filter_by_search_result(self, request: Request, search_str: str, search_fiel request, values, unicode_search_str) return values - \ No newline at end of file