From fc13a196294b401aa2bf347a52652adb6c9d3768 Mon Sep 17 00:00:00 2001 From: Grigi <nagrigoriadis@gmail.com> Date: Tue, 24 Mar 2020 19:31:16 +0200 Subject: [PATCH] Correctness fix of previous hotfix --- tests/fields/test_time.py | 6 +++--- tortoise/backends/asyncpg/executor.py | 20 +------------------- tortoise/filters.py | 10 +++++----- 3 files changed, 9 insertions(+), 27 deletions(-) diff --git a/tests/fields/test_time.py b/tests/fields/test_time.py index 7bb78d72f..23ceb0b64 100644 --- a/tests/fields/test_time.py +++ b/tests/fields/test_time.py @@ -24,10 +24,10 @@ async def test_create(self): obj = await testmodels.DatetimeFields.get(id=obj0.id) self.assertEqual(obj.datetime, now) self.assertEqual(obj.datetime_null, None) - self.assertLess(obj.datetime_auto - now, timedelta(microseconds=10000)) - self.assertLess(obj.datetime_add - now, timedelta(microseconds=10000)) + self.assertLess(obj.datetime_auto - now, timedelta(microseconds=20000)) + self.assertLess(obj.datetime_add - now, timedelta(microseconds=20000)) datetime_auto = obj.datetime_auto - sleep(0.011) + sleep(0.012) await obj.save() obj2 = await testmodels.DatetimeFields.get(id=obj.id) self.assertEqual(obj2.datetime, now) diff --git a/tortoise/backends/asyncpg/executor.py b/tortoise/backends/asyncpg/executor.py index d4c6ccde6..8bfebcfa5 100644 --- a/tortoise/backends/asyncpg/executor.py +++ b/tortoise/backends/asyncpg/executor.py @@ -1,32 +1,14 @@ import uuid -from typing import Any, List, Optional +from typing import List, Optional import asyncpg from pypika import Parameter -from pypika.terms import Term, ValueWrapper from tortoise import Model from tortoise.backends.base.executor import BaseExecutor -from tortoise.filters import is_in, not_in - - -def postgres_is_in(field: Term, value: Any) -> Term: - if value: - return field.isin(value) - return ValueWrapper(False) - - -def post_gres_not_in(field: Term, value: Any) -> Term: - if value: - return field.notin(value) | field.isnull() - return ValueWrapper(True) class AsyncpgExecutor(BaseExecutor): - FILTER_FUNC_OVERRIDE = { - is_in: postgres_is_in, - not_in: post_gres_not_in, - } EXPLAIN_PREFIX = "EXPLAIN (FORMAT JSON, VERBOSE)" DB_NATIVE = BaseExecutor.DB_NATIVE | {bool, uuid.UUID} diff --git a/tortoise/filters.py b/tortoise/filters.py index 15d6edafb..9a7c19a48 100644 --- a/tortoise/filters.py +++ b/tortoise/filters.py @@ -5,7 +5,7 @@ from pypika import Table from pypika.enums import SqlTypes from pypika.functions import Cast, Upper -from pypika.terms import Criterion, Term, ValueWrapper +from pypika.terms import BasicCriterion, Criterion, Equality, Term, ValueWrapper from tortoise.fields import Field from tortoise.fields.relational import BackwardFKRelation, ManyToManyFieldInstance @@ -45,16 +45,16 @@ def string_encoder(value: Any, instance: "Model", field: Field) -> str: ############################################################################## -def is_in(field: Term, value: Any) -> Term: +def is_in(field: Term, value: Any) -> Criterion: if value: return field.isin(value) - return ValueWrapper(0) + return BasicCriterion(Equality.eq, ValueWrapper(1), ValueWrapper(0)) -def not_in(field: Term, value: Any) -> Term: +def not_in(field: Term, value: Any) -> Criterion: if value: return field.notin(value) | field.isnull() - return ValueWrapper(1) + return BasicCriterion(Equality.eq, ValueWrapper(1), ValueWrapper(1)) def between_and(field: Term, value: Tuple[Any, Any]) -> Criterion: