@@ -17,6 +17,9 @@ def pytest_configure(config):
1717 "sqlalchemy version"
1818 ),
1919 )
20+ config .addinivalue_line (
21+ "markers" , "require_asyncpg: skip test if asyncpg is not installed"
22+ )
2023
2124
2225@fixture (scope = "session" )
@@ -26,13 +29,21 @@ def sqla_version_tuple():
2629 return tuple (int (i ) for i in __version__ .split ("." ))
2730
2831
32+ def is_asyncpg_installed ():
33+ try :
34+ import asyncpg # noqa
35+ except ImportError :
36+ return False
37+ else :
38+ return True
39+
40+
2941@fixture (scope = "session" , autouse = True )
30- def environ (db_url , sqla_version_tuple ):
42+ def environ (db_url , sqla_version_tuple , async_sqlalchemy_url ):
3143 values = {"sqlalchemy_url" : db_url , "PYTHONASYNCIODEBUG" : "1" }
3244
33- if sqla_version_tuple >= (1 , 4 , 0 ):
34- scheme , parts = db_url .split (":" )
35- values ["async_sqlalchemy_url" ] = f"{ scheme } +asyncpg:{ parts } "
45+ if sqla_version_tuple >= (1 , 4 , 0 ) and is_asyncpg_installed ():
46+ values ["async_sqlalchemy_url" ] = async_sqlalchemy_url
3647
3748 with patch .dict ("os.environ" , values = values , clear = True ):
3849 yield values
@@ -76,6 +87,14 @@ def check_sqlalchemy_version(request, sqla_version_tuple):
7687 )
7788
7889
90+ @fixture (autouse = True )
91+ def check_asyncpg (request ):
92+ "Skip test marked with mark.require_asyncpg if asyncpg is not installed."
93+ marker = request .node .get_closest_marker ("require_asyncpg" )
94+ if marker and not is_asyncpg_installed ():
95+ skip ("This test requires asyncpg. Skipping as asyncpg is not installed." )
96+
97+
7998@fixture (scope = "session" )
8099def faker ():
81100 return Faker ()
0 commit comments