fix minor code smells

This commit is contained in:
collerek
2021-03-09 10:27:20 +01:00
parent 0ea9b0952c
commit fdb6c3089f
2 changed files with 44 additions and 56 deletions

View File

@ -57,8 +57,7 @@ class OrderAction(QueryAction):
prefix = f"{self.table_prefix}_" if self.table_prefix else "" prefix = f"{self.table_prefix}_" if self.table_prefix else ""
if self.direction == "": if self.direction == "":
return text(f"min({prefix}{self.table}" f".{self.field_alias})") return text(f"min({prefix}{self.table}" f".{self.field_alias})")
else: return text(f"max({prefix}{self.table}" f".{self.field_alias}) desc")
return text(f"max({prefix}{self.table}" f".{self.field_alias}) desc")
def get_text_clause(self) -> sqlalchemy.sql.expression.TextClause: def get_text_clause(self) -> sqlalchemy.sql.expression.TextClause:
""" """

View File

@ -57,24 +57,24 @@ async def test_or_filters():
books = ( books = (
await Book.objects.select_related("author") await Book.objects.select_related("author")
.filter(ormar.or_(author__name="J.R.R. Tolkien", year__gt=1970)) .filter(ormar.or_(author__name="J.R.R. Tolkien", year__gt=1970))
.all() .all()
) )
assert len(books) == 5 assert len(books) == 5
books = ( books = (
await Book.objects.select_related("author") await Book.objects.select_related("author")
.filter(ormar.or_(author__name="J.R.R. Tolkien", year__lt=1995)) .filter(ormar.or_(author__name="J.R.R. Tolkien", year__lt=1995))
.all() .all()
) )
assert len(books) == 4 assert len(books) == 4
assert not any([x.title == "The Tower of Fools" for x in books]) assert not any([x.title == "The Tower of Fools" for x in books])
books = ( books = (
await Book.objects.select_related("author") await Book.objects.select_related("author")
.filter(ormar.or_(year__gt=1960, year__lt=1940)) .filter(ormar.or_(year__gt=1960, year__lt=1940))
.filter(author__name="J.R.R. Tolkien") .filter(author__name="J.R.R. Tolkien")
.all() .all()
) )
assert len(books) == 2 assert len(books) == 2
assert books[0].title == "The Hobbit" assert books[0].title == "The Hobbit"
@ -82,13 +82,13 @@ async def test_or_filters():
books = ( books = (
await Book.objects.select_related("author") await Book.objects.select_related("author")
.filter( .filter(
ormar.and_( ormar.and_(
ormar.or_(year__gt=1960, year__lt=1940), ormar.or_(year__gt=1960, year__lt=1940),
author__name="J.R.R. Tolkien", author__name="J.R.R. Tolkien",
) )
) )
.all() .all()
) )
assert len(books) == 2 assert len(books) == 2
@ -97,14 +97,14 @@ async def test_or_filters():
books = ( books = (
await Book.objects.select_related("author") await Book.objects.select_related("author")
.filter( .filter(
ormar.or_( ormar.or_(
ormar.and_(year__gt=1960, author__name="J.R.R. Tolkien"), ormar.and_(year__gt=1960, author__name="J.R.R. Tolkien"),
ormar.and_(year__lt=2000, author__name="Andrzej Sapkowski"), ormar.and_(year__lt=2000, author__name="Andrzej Sapkowski"),
) )
) )
.filter(title__startswith="The") .filter(title__startswith="The")
.all() .all()
) )
assert len(books) == 2 assert len(books) == 2
assert books[0].title == "The Silmarillion" assert books[0].title == "The Silmarillion"
@ -112,7 +112,7 @@ async def test_or_filters():
books = ( books = (
await Book.objects.select_related("author") await Book.objects.select_related("author")
.filter( .filter(
ormar.or_( ormar.or_(
ormar.and_( ormar.and_(
ormar.or_(year__gt=1960, year__lt=1940), ormar.or_(year__gt=1960, year__lt=1940),
@ -121,7 +121,7 @@ async def test_or_filters():
ormar.and_(year__lt=2000, author__name="Andrzej Sapkowski"), ormar.and_(year__lt=2000, author__name="Andrzej Sapkowski"),
) )
) )
.all() .all()
) )
assert len(books) == 3 assert len(books) == 3
assert books[0].title == "The Hobbit" assert books[0].title == "The Hobbit"
@ -130,29 +130,29 @@ async def test_or_filters():
books = ( books = (
await Book.objects.select_related("author") await Book.objects.select_related("author")
.exclude( .exclude(
ormar.or_( ormar.or_(
ormar.and_(year__gt=1960, author__name="J.R.R. Tolkien"), ormar.and_(year__gt=1960, author__name="J.R.R. Tolkien"),
ormar.and_(year__lt=2000, author__name="Andrzej Sapkowski"), ormar.and_(year__lt=2000, author__name="Andrzej Sapkowski"),
) )
) )
.filter(title__startswith="The") .filter(title__startswith="The")
.all() .all()
) )
assert len(books) == 3 assert len(books) == 3
assert not any([x.title in ["The Silmarillion", "The Witcher"] for x in books]) assert not any([x.title in ["The Silmarillion", "The Witcher"] for x in books])
books = ( books = (
await Book.objects.select_related("author") await Book.objects.select_related("author")
.filter( .filter(
ormar.or_( ormar.or_(
ormar.and_(year__gt=1960, author__name="J.R.R. Tolkien"), ormar.and_(year__gt=1960, author__name="J.R.R. Tolkien"),
ormar.and_(year__lt=2000, author__name="Andrzej Sapkowski"), ormar.and_(year__lt=2000, author__name="Andrzej Sapkowski"),
title__icontains="hobbit", title__icontains="hobbit",
) )
) )
.filter(title__startswith="The") .filter(title__startswith="The")
.all() .all()
) )
assert len(books) == 3 assert len(books) == 3
assert not any( assert not any(
@ -161,43 +161,43 @@ async def test_or_filters():
books = ( books = (
await Book.objects.select_related("author") await Book.objects.select_related("author")
.filter(ormar.or_(year__gt=1980, year__lt=1910)) .filter(ormar.or_(year__gt=1980, year__lt=1910))
.filter(title__startswith="The") .filter(title__startswith="The")
.limit(1) .limit(1)
.all() .all()
) )
assert len(books) == 1 assert len(books) == 1
assert books[0].title == "The Witcher" assert books[0].title == "The Witcher"
books = ( books = (
await Book.objects.select_related("author") await Book.objects.select_related("author")
.filter(ormar.or_(year__gt=1980, author__name="Andrzej Sapkowski")) .filter(ormar.or_(year__gt=1980, author__name="Andrzej Sapkowski"))
.filter(title__startswith="The") .filter(title__startswith="The")
.limit(1) .limit(1)
.all() .all()
) )
assert len(books) == 1 assert len(books) == 1
assert books[0].title == "The Witcher" assert books[0].title == "The Witcher"
books = ( books = (
await Book.objects.select_related("author") await Book.objects.select_related("author")
.filter(ormar.or_(year__gt=1980, author__name="Andrzej Sapkowski")) .filter(ormar.or_(year__gt=1980, author__name="Andrzej Sapkowski"))
.filter(title__startswith="The") .filter(title__startswith="The")
.limit(1) .limit(1)
.offset(1) .offset(1)
.all() .all()
) )
assert len(books) == 1 assert len(books) == 1
assert books[0].title == "The Tower of Fools" assert books[0].title == "The Tower of Fools"
books = ( books = (
await Book.objects.select_related("author") await Book.objects.select_related("author")
.filter(ormar.or_(year__gt=1980, author__name="Andrzej Sapkowski")) .filter(ormar.or_(year__gt=1980, author__name="Andrzej Sapkowski"))
.filter(title__startswith="The") .filter(title__startswith="The")
.limit(1) .limit(1)
.offset(1) .offset(1)
.order_by("-id") .order_by("-id")
.all() .all()
) )
assert len(books) == 1 assert len(books) == 1
assert books[0].title == "The Witcher" assert books[0].title == "The Witcher"
@ -220,30 +220,19 @@ async def test_or_filters():
books = ( books = (
await Book.objects.select_related("author") await Book.objects.select_related("author")
.filter(ormar.or_(author__name="J.R.R. Tolkien")) .filter(ormar.or_(author__name="J.R.R. Tolkien"))
.all() .all()
) )
assert len(books) == 3 assert len(books) == 3
books = ( books = (
await Book.objects.select_related("author") await Book.objects.select_related("author")
.filter( .filter(
ormar.or_( ormar.or_(
ormar.and_(author__name__icontains="tolkien"), ormar.and_(author__name__icontains="tolkien"),
ormar.and_(author__name__icontains="sapkowski"), ormar.and_(author__name__icontains="sapkowski"),
) )
) )
.all() .all()
) )
assert len(books) == 5 assert len(books) == 5
# TODO: Check / modify
# process and and or into filter groups (V)
# check exclude queries working (V)
# check complex prefixes properly resolved (V)
# fix limit -> change to where subquery to extract number of distinct pk values (V)
# finish docstrings (V)
# fix types for FilterAction and FilterGroup (X)
# add docs (V)
# fix querysetproxy (V)