Skip to content

Commit d984d87

Browse files
authored
fix: recognize uppercase environment variables - DIA-37058 (#40)
Fix #39
1 parent 2aa694e commit d984d87

4 files changed

Lines changed: 24 additions & 8 deletions

File tree

fastapi_sqla/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ def setup(app: FastAPI):
6161

6262

6363
def startup():
64-
engine = engine_from_config(os.environ, prefix="sqlalchemy_")
64+
lowercase_environ = {k.lower(): v for k, v in os.environ.items()}
65+
engine = engine_from_config(lowercase_environ, prefix="sqlalchemy_")
6566
Base.metadata.bind = engine
6667
Base.prepare(engine)
6768
_Session.configure(bind=engine)

fastapi_sqla/_pytest_plugin.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,15 @@ def sqla_reflection(sqla_modules, sqla_connection, db_url):
7676

7777

7878
@fixture(autouse=True)
79-
def patch_sessionmaker(db_url, sqla_connection, sqla_transaction):
79+
def engine_from_config(request, db_url, sqla_connection, sqla_transaction):
8080
"""So that all DB operations are never written to db for real."""
81-
with patch("fastapi_sqla.engine_from_config") as engine_from_config:
82-
engine_from_config.return_value = sqla_connection
83-
yield engine_from_config
81+
if "dont_patch_engine_from_config" in request.keywords:
82+
yield
83+
84+
else:
85+
with patch("fastapi_sqla.engine_from_config") as engine_from_config:
86+
engine_from_config.return_value = sqla_connection
87+
yield engine_from_config
8488

8589

8690
@fixture

setup.cfg

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ norecursedirs = .git,.venv
44
xfail_strict = true
55
addopts =
66
-p no:fastapi-sqla
7-
--strict-markers
87
--cov-config setup.cfg
98
--cov-report term
109
--cov-report term-missing

tests/test_startup.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,23 @@
1+
from unittest.mock import patch
2+
13
import httpx
24
from asgi_lifespan import LifespanManager
35
from fastapi import FastAPI
4-
from pytest import mark
6+
from pytest import fixture, mark
57
from sqlalchemy import text
68

79

8-
def test_startup():
10+
@fixture(params=[True, False])
11+
def case_sensitive_environ(environ, request):
12+
values = (
13+
{k.upper(): v for k, v in environ.items()} if request.param else environ.copy()
14+
)
15+
with patch.dict("os.environ", values=values, clear=True):
16+
yield values
17+
18+
19+
@mark.dont_patch_engine_from_config
20+
def test_startup(case_sensitive_environ):
921
from fastapi_sqla import _Session, startup
1022

1123
startup()

0 commit comments

Comments
 (0)