Skip to content

Commit

Permalink
feat: Add engine_kwargs argument to mysql fixture. (#178)
Browse files Browse the repository at this point in the history
  • Loading branch information
DanCardin committed Jan 13, 2023
1 parent 0415c78 commit d522be8
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 9 deletions.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "pytest-mock-resources"
version = "2.6.5"
version = "2.6.6"
description = "A pytest plugin for easily instantiating reproducible mock resources."
authors = [
"Omar Khan <oakhan3@gmail.com>",
Expand Down
8 changes: 2 additions & 6 deletions src/pytest_mock_resources/container/mysql.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def check_fn(self):
)


def get_sqlalchemy_engine(config, database_name, isolation_level=None):
def get_sqlalchemy_engine(config, database_name, **engine_kwargs):
url = compat.sqlalchemy.URL(
"mysql+pymysql",
username=config.username,
Expand All @@ -80,15 +80,11 @@ def get_sqlalchemy_engine(config, database_name, isolation_level=None):
database=database_name,
)

options = {}
if isolation_level:
options["isolation_level"] = isolation_level

from pytest_mock_resources.compat import pymysql

pymysql.connect

engine = sqlalchemy.create_engine(url, **options)
engine = sqlalchemy.create_engine(url, **engine_kwargs)

# Verify engine is connected
engine.connect()
Expand Down
15 changes: 13 additions & 2 deletions src/pytest_mock_resources/fixture/mysql.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,13 @@ def pmr_mysql_container(pytestconfig, pmr_mysql_config):
yield from get_container(pytestconfig, pmr_mysql_config)


def create_mysql_fixture(*ordered_actions, scope="function", tables=None, session=None):
def create_mysql_fixture(
*ordered_actions,
scope="function",
tables=None,
session=None,
engine_kwargs=None,
):
"""Produce a MySQL fixture.
Any number of fixture functions can be created. Under the hood they will all share the same
Expand All @@ -37,12 +43,17 @@ def create_mysql_fixture(*ordered_actions, scope="function", tables=None, sessio
most useful when a model-base was specified in `ordered_actions`.
session: Whether to return a session instead of an engine directly. This can
either be a bool or a callable capable of producing a session.
engine_kwargs: Optional set of kwargs to send into the engine on creation.
"""

@pytest.fixture(scope=scope)
def _(pmr_mysql_container, pmr_mysql_config):
database_name = _create_clean_database(pmr_mysql_config)
engine = get_sqlalchemy_engine(pmr_mysql_config, database_name)
engine = get_sqlalchemy_engine(
pmr_mysql_config,
database_name,
**(engine_kwargs or {}),
)

engine_manager = EngineManager.create(
engine, dynamic_actions=ordered_actions, tables=tables, session=session
Expand Down

0 comments on commit d522be8

Please sign in to comment.