diff --git a/apiserver/apimodels/__init__.py b/apiserver/apimodels/__init__.py index 50dcb48..c59d9cd 100644 --- a/apiserver/apimodels/__init__.py +++ b/apiserver/apimodels/__init__.py @@ -218,7 +218,7 @@ class ActualEnumField(fields.StringField): ) def parse_value(self, value): - if value is NotSet and not self.required: + if value in (NotSet, None) and not self.required: return self.get_default_value() try: # noinspection PyArgumentList diff --git a/apiserver/database/model/base.py b/apiserver/database/model/base.py index 52c3dac..edc37ba 100644 --- a/apiserver/database/model/base.py +++ b/apiserver/database/model/base.py @@ -78,6 +78,7 @@ class GetMixin(PropsMixin): MultiFieldParameters = namedtuple("MultiFieldParameters", "pattern fields") _field_collation_overrides = {} + _numeric_collation = {"locale": "en_US", "numericOrdering": True} class QueryParameterOptions(object): def __init__( @@ -708,16 +709,21 @@ class GetMixin(PropsMixin): if res: query_sets = [cls.objects(q) for q in res] query_sets = [qs.order_by(*order_by) for qs in query_sets] - if order_field: - collation_override = first( - v - for k, v in cls._field_collation_overrides.items() - if order_field.startswith(k) - ) - if collation_override: - query_sets = [ - qs.collation(collation=collation_override) for qs in query_sets - ] + # if order_field: + # collation_override = first( + # v + # for k, v in cls._field_collation_overrides.items() + # if order_field.startswith(k) + # ) + # if collation_override: + # query_sets = [ + # qs.collation(collation=collation_override) for qs in query_sets + # ] + + # always use numeric collation + query_sets = [ + qs.collation(collation=cls._numeric_collation) for qs in query_sets + ] if search_text: query_sets = [qs.search_text(search_text) for qs in query_sets] diff --git a/apiserver/database/model/task/task.py b/apiserver/database/model/task/task.py index 1497c19..c2c30e7 100644 --- a/apiserver/database/model/task/task.py +++ b/apiserver/database/model/task/task.py @@ -197,7 +197,7 @@ class Task(AttributedDocument): "project", "parent", ), - range_fields=("started", "active_duration", "last_metrics.*"), + range_fields=("started", "active_duration", "last_metrics.*", "last_iteration"), datetime_fields=("status_changed", "last_update"), pattern_fields=("name", "comment"), )