3
0
Fork 0

fix: render db engine with password intact, for installer config

not sure when things changed, pretty sure this is a new thing?
hopefully doesn't break anything since the installer is likely dealing
with "latest" sqlalchemy
This commit is contained in:
Lance Edgar 2025-12-31 20:04:49 -06:00
parent 2713ad72e5
commit 18c23ce0ce
2 changed files with 22 additions and 1 deletions

View file

@ -298,6 +298,9 @@ class InstallHandler(GenericHandler):
"""
envname = os.path.basename(sys.prefix)
appdir = os.path.join(sys.prefix, "app")
dburl = dbinfo["dburl"]
if not isinstance(dburl, str):
dburl = dburl.render_as_string(hide_password=False)
context = {
"envdir": sys.prefix,
"envname": envname,
@ -305,7 +308,7 @@ class InstallHandler(GenericHandler):
"app_title": self.app_title,
"pypi_name": self.pypi_name,
"appdir": appdir,
"db_url": dbinfo["dburl"],
"db_url": dburl,
"egg_name": self.egg_name,
}
context.update(kwargs)

View file

@ -170,6 +170,8 @@ class TestInstallHandler(ConfigTestCase):
def test_make_template_context(self):
handler = self.make_handler()
# can handle dburl as string
dbinfo = {"dburl": "sqlite:///poser.sqlite"}
context = handler.make_template_context(dbinfo)
self.assertEqual(context["envdir"], sys.prefix)
@ -180,6 +182,22 @@ class TestInstallHandler(ConfigTestCase):
self.assertEqual(context["appdir"], os.path.join(sys.prefix, "app"))
self.assertEqual(context["db_url"], "sqlite:///poser.sqlite")
try:
import sqlalchemy as sa
except ImportError:
pytest.skip("remainder of test is not relevant without sqlalchemy")
# but also can handle dburl as object
dbinfo = {"dburl": sa.create_engine("sqlite:///poser.sqlite").url}
context = handler.make_template_context(dbinfo)
self.assertEqual(context["envdir"], sys.prefix)
self.assertEqual(context["pkg_name"], "poser")
self.assertEqual(context["app_title"], "poser")
self.assertEqual(context["pypi_name"], "poser")
self.assertEqual(context["egg_name"], "poser")
self.assertEqual(context["appdir"], os.path.join(sys.prefix, "app"))
self.assertEqual(context["db_url"], "sqlite:///poser.sqlite")
def test_make_appdir(self):
handler = self.make_handler()
handler.templates = TemplateLookup(