@@ -57,6 +57,12 @@ def pytest_addoption(parser):
57
57
default = False ,
58
58
help = "If set to True, all statements of the engine are logged." ,
59
59
)
60
+ parser .addoption (
61
+ "--require-all-dialects" ,
62
+ action = "store_true" ,
63
+ default = False ,
64
+ help = "If set to True, all dialects muts be properly executed." ,
65
+ )
60
66
61
67
62
68
def pytest_generate_tests (metafunc ):
@@ -173,8 +179,14 @@ def _engine_echo(request):
173
179
return _engine_echo
174
180
175
181
182
+ @pytest .fixture (scope = "session" )
183
+ def _require_all_dialects (request ):
184
+ _require_all_dialects = request .config .getoption ("--require-all-dialects" )
185
+ return _require_all_dialects
186
+
187
+
176
188
@pytest .fixture
177
- def engine (tmpdir , db_url , _engine_echo ):
189
+ def engine (tmpdir , db_url , _engine_echo , _require_all_dialects ):
178
190
"""Provide an engine to test database."""
179
191
try :
180
192
if db_url .startswith ("sqlite:///" ):
@@ -196,7 +208,11 @@ def engine(tmpdir, db_url, _engine_echo):
196
208
current_engine = create_engine (db_url , echo = _engine_echo )
197
209
current_engine .update_execution_options (search_path = ["gis" , "public" ])
198
210
except Exception :
199
- pytest .skip (reason = f"Could not create engine for this URL: { db_url } " )
211
+ msg = f"Could not create engine for this URL: { db_url } "
212
+ if _require_all_dialects :
213
+ pytest .fail ("All dialects are required. " + msg )
214
+ else :
215
+ pytest .skip (reason = msg )
200
216
201
217
# Disambiguate MySQL and MariaDB
202
218
if current_engine .dialect .name in ["mysql" , "mariadb" ]:
@@ -208,9 +224,17 @@ def engine(tmpdir, db_url, _engine_echo):
208
224
else "MySQL"
209
225
)
210
226
if current_engine .dialect .name != mysql_type .lower ():
211
- pytest .skip (reason = f"Can not execute { mysql_type } queries on { db_url } " )
227
+ msg = f"Can not execute { mysql_type } queries on { db_url } "
228
+ if _require_all_dialects :
229
+ pytest .fail ("All dialects are required. " + msg )
230
+ else :
231
+ pytest .skip (reason = msg )
212
232
except InvalidRequestError :
213
- pytest .skip (reason = f"Can not execute MariaDB queries on { db_url } " )
233
+ msg = f"Can not execute MariaDB queries on { db_url } "
234
+ if _require_all_dialects :
235
+ pytest .fail ("All dialects are required. " + msg )
236
+ else :
237
+ pytest .skip (reason = msg )
214
238
215
239
yield current_engine
216
240
current_engine .dispose ()
0 commit comments