Skip to content

Commit b2d2dd9

Browse files
committed
Fix test cases for batching in sqlalchemy1.4
1 parent ecbc00f commit b2d2dd9

File tree

2 files changed

+36
-87
lines changed

2 files changed

+36
-87
lines changed

graphene_sqlalchemy/tests/test_batching.py

Lines changed: 27 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import ast
12
import contextlib
23
import logging
34

@@ -9,9 +10,9 @@
910
from ..fields import (BatchSQLAlchemyConnectionField,
1011
default_connection_field_factory)
1112
from ..types import ORMField, SQLAlchemyObjectType
12-
from .models import Article, HairKind, Pet, Reporter
1313
from ..utils import is_sqlalchemy_version_less_than
14-
from .utils import to_std_dicts
14+
from .models import Article, HairKind, Pet, Reporter
15+
from .utils import remove_cache_miss_stat, to_std_dicts
1516

1617

1718
class MockLoggingHandler(logging.Handler):
@@ -127,26 +128,12 @@ async def test_many_to_one(session_factory):
127128
assert len(sql_statements) == 1
128129
return
129130

130-
assert messages == [
131-
'BEGIN (implicit)',
132-
133-
'SELECT articles.id AS articles_id, '
134-
'articles.headline AS articles_headline, '
135-
'articles.pub_date AS articles_pub_date, '
136-
'articles.reporter_id AS articles_reporter_id \n'
137-
'FROM articles',
138-
'()',
139-
140-
'SELECT reporters.id AS reporters_id, '
141-
'(SELECT CAST(count(reporters.id) AS INTEGER) AS anon_2 \nFROM reporters) AS anon_1, '
142-
'reporters.first_name AS reporters_first_name, '
143-
'reporters.last_name AS reporters_last_name, '
144-
'reporters.email AS reporters_email, '
145-
'reporters.favorite_pet_kind AS reporters_favorite_pet_kind \n'
146-
'FROM reporters \n'
147-
'WHERE reporters.id IN (?, ?)',
148-
'(1, 2)',
149-
]
131+
if not is_sqlalchemy_version_less_than('1.4'):
132+
messages[2] = remove_cache_miss_stat(messages[2])
133+
messages[4] = remove_cache_miss_stat(messages[4])
134+
135+
assert ast.literal_eval(messages[2]) == ()
136+
assert sorted(ast.literal_eval(messages[4])) == [1, 2]
150137

151138
assert not result.errors
152139
result = to_std_dicts(result.data)
@@ -219,26 +206,12 @@ async def test_one_to_one(session_factory):
219206
assert len(sql_statements) == 1
220207
return
221208

222-
assert messages == [
223-
'BEGIN (implicit)',
224-
225-
'SELECT (SELECT CAST(count(reporters.id) AS INTEGER) AS anon_2 \nFROM reporters) AS anon_1, '
226-
'reporters.id AS reporters_id, '
227-
'reporters.first_name AS reporters_first_name, '
228-
'reporters.last_name AS reporters_last_name, '
229-
'reporters.email AS reporters_email, '
230-
'reporters.favorite_pet_kind AS reporters_favorite_pet_kind \n'
231-
'FROM reporters',
232-
'()',
233-
234-
'SELECT articles.reporter_id AS articles_reporter_id, '
235-
'articles.id AS articles_id, '
236-
'articles.headline AS articles_headline, '
237-
'articles.pub_date AS articles_pub_date \n'
238-
'FROM articles \n'
239-
'WHERE articles.reporter_id IN (?, ?)',
240-
'(1, 2)'
241-
]
209+
if not is_sqlalchemy_version_less_than('1.4'):
210+
messages[2] = remove_cache_miss_stat(messages[2])
211+
messages[4] = remove_cache_miss_stat(messages[4])
212+
213+
assert ast.literal_eval(messages[2]) == ()
214+
assert sorted(ast.literal_eval(messages[4])) == [1, 2]
242215

243216
assert not result.errors
244217
result = to_std_dicts(result.data)
@@ -323,26 +296,12 @@ async def test_one_to_many(session_factory):
323296
assert len(sql_statements) == 1
324297
return
325298

326-
assert messages == [
327-
'BEGIN (implicit)',
328-
329-
'SELECT (SELECT CAST(count(reporters.id) AS INTEGER) AS anon_2 \nFROM reporters) AS anon_1, '
330-
'reporters.id AS reporters_id, '
331-
'reporters.first_name AS reporters_first_name, '
332-
'reporters.last_name AS reporters_last_name, '
333-
'reporters.email AS reporters_email, '
334-
'reporters.favorite_pet_kind AS reporters_favorite_pet_kind \n'
335-
'FROM reporters',
336-
'()',
337-
338-
'SELECT articles.reporter_id AS articles_reporter_id, '
339-
'articles.id AS articles_id, '
340-
'articles.headline AS articles_headline, '
341-
'articles.pub_date AS articles_pub_date \n'
342-
'FROM articles \n'
343-
'WHERE articles.reporter_id IN (?, ?)',
344-
'(1, 2)'
345-
]
299+
if not is_sqlalchemy_version_less_than('1.4'):
300+
messages[2] = remove_cache_miss_stat(messages[2])
301+
messages[4] = remove_cache_miss_stat(messages[4])
302+
303+
assert ast.literal_eval(messages[2]) == ()
304+
assert sorted(ast.literal_eval(messages[4])) == [1, 2]
346305

347306
assert not result.errors
348307
result = to_std_dicts(result.data)
@@ -451,31 +410,12 @@ async def test_many_to_many(session_factory):
451410
assert len(sql_statements) == 1
452411
return
453412

454-
assert messages == [
455-
'BEGIN (implicit)',
456-
457-
'SELECT (SELECT CAST(count(reporters.id) AS INTEGER) AS anon_2 \nFROM reporters) AS anon_1, '
458-
'reporters.id AS reporters_id, '
459-
'reporters.first_name AS reporters_first_name, '
460-
'reporters.last_name AS reporters_last_name, '
461-
'reporters.email AS reporters_email, '
462-
'reporters.favorite_pet_kind AS reporters_favorite_pet_kind \n'
463-
'FROM reporters',
464-
'()',
465-
466-
'SELECT reporters_1.id AS reporters_1_id, '
467-
'pets.id AS pets_id, '
468-
'pets.name AS pets_name, '
469-
'pets.pet_kind AS pets_pet_kind, '
470-
'pets.hair_kind AS pets_hair_kind, '
471-
'pets.reporter_id AS pets_reporter_id \n'
472-
'FROM reporters AS reporters_1 '
473-
'JOIN association AS association_1 ON reporters_1.id = association_1.reporter_id '
474-
'JOIN pets ON pets.id = association_1.pet_id \n'
475-
'WHERE reporters_1.id IN (?, ?) '
476-
'ORDER BY pets.id',
477-
'(1, 2)'
478-
]
413+
if not is_sqlalchemy_version_less_than('1.4'):
414+
messages[2] = remove_cache_miss_stat(messages[2])
415+
messages[4] = remove_cache_miss_stat(messages[4])
416+
417+
assert ast.literal_eval(messages[2]) == ()
418+
assert sorted(ast.literal_eval(messages[4])) == [1, 2]
479419

480420
assert not result.errors
481421
result = to_std_dicts(result.data)

graphene_sqlalchemy/tests/utils.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import re
2+
3+
14
def to_std_dicts(value):
25
"""Convert nested ordered dicts to normal dicts for better comparison."""
36
if isinstance(value, dict):
@@ -6,3 +9,9 @@ def to_std_dicts(value):
69
return [to_std_dicts(v) for v in value]
710
else:
811
return value
12+
13+
14+
def remove_cache_miss_stat(message):
15+
"""Remove the stat from the echoed query message when the cache is missed for sqlalchemy version >= 1.4"""
16+
# https://github.com/sqlalchemy/sqlalchemy/blob/990eb3d8813369d3b8a7776ae85fb33627443d30/lib/sqlalchemy/engine/default.py#L1177
17+
return re.sub(r"\[generated in \d+.?\d*s\]\s", "", message)

0 commit comments

Comments
 (0)