Implement collation for queryset

This commit is contained in:
otrofimov
2019-08-08 11:55:45 +03:00
parent 0d01365751
commit b887ea9623
2 changed files with 60 additions and 0 deletions

View File

@@ -80,6 +80,7 @@ class BaseQuerySet(object):
self._limit = None
self._skip = None
self._hint = -1 # Using -1 as None is a valid value for hint
self._collation = None
self._batch_size = None
self.only_fields = []
self._max_time_ms = None
@@ -781,6 +782,7 @@ class BaseQuerySet(object):
"_limit",
"_skip",
"_hint",
"_collation",
"_auto_dereference",
"_search_text",
"only_fields",
@@ -863,6 +865,32 @@ class BaseQuerySet(object):
return queryset
def collation(self, collation=None):
"""
Collation allows users to specify language-specific rules for string
comparison, such as rules for lettercase and accent marks.
:param collation: `~pymongo.collation.Collation` or dict with
following fields:
{
locale: str,
caseLevel: bool,
caseFirst: str,
strength: int,
numericOrdering: bool,
alternate: str,
maxVariable: str,
backwards: str
}
Collation should be added to indexes like in test example
"""
queryset = self.clone()
queryset._collation = collation
if queryset._cursor_obj:
queryset._cursor_obj.collation(collation)
return queryset
def batch_size(self, size):
"""Limit the number of documents returned in a single batch (each
batch requires a round trip to the server).
@@ -1636,6 +1664,9 @@ class BaseQuerySet(object):
if self._hint != -1:
self._cursor_obj.hint(self._hint)
if self._collation is not None:
self._cursor_obj.collation(self._collation)
if self._batch_size is not None:
self._cursor_obj.batch_size(self._batch_size)