Skip to content

Commit fe10fd1

Browse files
authored
Merge pull request #5 from cloudblue/feature/LITE-14852
LITE-14852 LITE-14785 Dates are now supported with DateTime fields and search is optimized (fixed for MySQL)
2 parents e45c2e0 + cf46b5b commit fe10fd1

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

dj_rql/filter_cls.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#
44

55
from collections import defaultdict
6+
from datetime import datetime
67
from uuid import uuid4
78

89
from django.db.models import Q
@@ -354,6 +355,9 @@ def _build_q_for_search(self, operator, str_value):
354355
})
355356

356357
unquoted_value = self.remove_quotes(str_value)
358+
if not unquoted_value:
359+
return Q()
360+
357361
if not unquoted_value.startswith(RQL_ANY_SYMBOL):
358362
unquoted_value = '*' + unquoted_value
359363

@@ -802,10 +806,17 @@ def _convert_value(cls, django_field, str_value, use_repr=False):
802806
dt = parse_date(val)
803807
if dt is None:
804808
raise ValueError
809+
return dt
810+
805811
elif filter_type == FilterTypes.DATETIME:
806812
dt = parse_datetime(val)
807813
if dt is None:
808-
raise ValueError
814+
dt = parse_date(val)
815+
if dt is None:
816+
raise ValueError
817+
818+
return datetime(year=dt.year, month=dt.month, day=dt.day)
819+
return dt
809820

810821
elif filter_type == FilterTypes.BOOLEAN:
811822
if val not in (RQL_FALSE, RQL_TRUE):

tests/test_filter_cls/test_apply_filters.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ def test_search():
253253
assert apply_filters('(search="*aN*";search="*book")') == books
254254
assert apply_filters('(search="*aN";search="*b*")') == books
255255
assert apply_filters('search=bo') == [books[0]]
256+
assert apply_filters('search=""') == books
256257

257258

258259
def test_search_bad_lookup():

tests/test_filter_cls/test_fields_filtering.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ def test_published_at():
197197
assert filter_field(filter_name, CO.NE, '2019-02-12T10:02') == [books[1]]
198198
assert filter_field(filter_name, CO.LE, '2020-01-01T00:00+08:00') == books
199199
assert filter_field(filter_name, CO.GT, '2000-12-12T00:21:00') == books
200+
assert filter_field(filter_name, CO.GT, '2000-12-12') == books
200201

201202

202203
@pytest.mark.django_db
@@ -396,7 +397,7 @@ def test_date_field_fail(filter_name, bad_value):
396397

397398

398399
@pytest.mark.parametrize('bad_value', [
399-
'2019-02-12', '0', 'date', '2019-02-12T27:00:00', '2019-02-12T21:00:00K',
400+
'0', 'date', '2019-02-12T27:00:00', '2019-02-12T21:00:00K',
400401
])
401402
@pytest.mark.parametrize('filter_name', ['published.at'])
402403
def test_datetime_field_fail(filter_name, bad_value):

0 commit comments

Comments
 (0)