From 0cbf543940f8b4e580d9d4976270884e7899ea6d Mon Sep 17 00:00:00 2001 From: shahzeydyfah Date: Sun, 13 Sep 2026 21:53:35 +0330 Subject: [PATCH] fix(project):sort --- core/utils/te/__init__.py | 10 +++++++--- core/utils/te/engines/AbstractEngine.py | 1 + core/utils/te/engines/Mongo.py | 4 ++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/core/utils/te/__init__.py b/core/utils/te/__init__.py index 6b23d36..7be99cc 100644 --- a/core/utils/te/__init__.py +++ b/core/utils/te/__init__.py @@ -10,7 +10,8 @@ from .utils.Models import TableEngineExport class NewTableEngine: def __init__(self, query_class, model, inputs, mode, engine: AbstractEngine, extra_filter, - default_sort_by, joins, search_cols, options=None, soft_deleted=False, unselect={}, return_query=False): + default_sort_by, joins, search_cols, options=None, soft_deleted=False, unselect={}, return_query=False, + collation={'locale': 'fa'}): self.model = model self.query_class = query_class self.mode = mode @@ -29,6 +30,7 @@ class NewTableEngine: self.search_cols = search_cols self.unselect = unselect self.return_query = return_query + self.collation = collation self.engine = engine(self) @staticmethod @@ -38,10 +40,12 @@ class NewTableEngine: mode: WorkingMode = WorkingMode.Development, extra_filter=None, soft_deleted=False, - default_sort_by=None, joins=None, search_cols=[] ,unselect={}, return_query=False): + default_sort_by=None, joins=None, search_cols=[] ,unselect={}, return_query=False, + collation={'locale': 'fa'}): return NewTableEngine(query_class, model, inputs, mode, engine=MongoEngine, extra_filter=extra_filter, default_sort_by=default_sort_by, joins=joins, search_cols=search_cols, - soft_deleted=soft_deleted,unselect=unselect, return_query=return_query) + soft_deleted=soft_deleted,unselect=unselect, return_query=return_query, + collation=collation) @staticmethod def mssql(query_class, model, inputs, mode: WorkingMode = WorkingMode.Development, extra_filter=None, diff --git a/core/utils/te/engines/AbstractEngine.py b/core/utils/te/engines/AbstractEngine.py index 2b242a0..2e986c7 100644 --- a/core/utils/te/engines/AbstractEngine.py +++ b/core/utils/te/engines/AbstractEngine.py @@ -17,6 +17,7 @@ class AbstractEngineClass(abc.ABC): self.soft_deleted = table_engine.soft_deleted self.unselect = table_engine.unselect self.return_query = table_engine.return_query + self.collation = {'locale': 'fa'} @abc.abstractmethod def exe(self): diff --git a/core/utils/te/engines/Mongo.py b/core/utils/te/engines/Mongo.py index 22b1229..aa3ef54 100644 --- a/core/utils/te/engines/Mongo.py +++ b/core/utils/te/engines/Mongo.py @@ -54,6 +54,10 @@ class MongoEngine(AbstractEngineClass): else: tmp = tmp.sort(sort_by) + is_natural = isinstance(sort_by, dict) and sort_by.get('key_or_list') == '$natural' + if getattr(self, 'collation', None) and not is_natural: + tmp = tmp.collation(self.collation) + if self.input.e and self.input.e.ot: res = await tmp.to_list(None) self.input.e.d = await self.generate_output(res)