From 771be0e056047d3f5d0c878c77f20d14e0443d56 Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Mon, 19 Jun 2023 11:23:30 +0200 Subject: [PATCH] do not fail php script generation when curly braces are present Fixes #3084. --- nominatim/tools/refresh.py | 12 +++++++----- test/python/tools/test_refresh_setup_website.py | 7 +++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/nominatim/tools/refresh.py b/nominatim/tools/refresh.py index 5dd98c0e..c6df9982 100644 --- a/nominatim/tools/refresh.py +++ b/nominatim/tools/refresh.py @@ -217,7 +217,7 @@ def setup_website(basedir: Path, config: Configuration, conn: Connection) -> Non basedir.mkdir() assert config.project_dir is not None - template = dedent(f"""\ + basedata = dedent(f"""\ Non for php_name, conf_name, var_type in PHP_CONST_DEFS: varout = _quote_php_variable(var_type, config, conf_name) - template += f"@define('CONST_{php_name}', {varout});\n" + basedata += f"@define('CONST_{php_name}', {varout});\n" - template += f"\nrequire_once('{config.lib_dir.php}/website/{{}}');\n" + template = "\nrequire_once(CONST_LibDir.'/website/{}');\n" search_name_table_exists = bool(conn and conn.table_exists('search_name')) for script in WEBSITE_SCRIPTS: if not search_name_table_exists and script == 'search.php': - (basedir / script).write_text(template.format('reverse-only-search.php'), 'utf-8') + out = template.format('reverse-only-search.php') else: - (basedir / script).write_text(template.format(script), 'utf-8') + out = template.format(script) + + (basedir / script).write_text(basedata + out, 'utf-8') def invalidate_osm_object(osm_type: str, osm_id: int, conn: Connection, diff --git a/test/python/tools/test_refresh_setup_website.py b/test/python/tools/test_refresh_setup_website.py index af3804c9..52b857c4 100644 --- a/test/python/tools/test_refresh_setup_website.py +++ b/test/python/tools/test_refresh_setup_website.py @@ -95,3 +95,10 @@ def test_relative_log_file(project_env, monkeypatch, test_script, run_website_sc assert run_website_script() == 10 +def test_variable_with_bracket(project_env, monkeypatch, test_script, run_website_script): + monkeypatch.setenv('NOMINATIM_DATABASE_DSN', 'pgsql:dbname=nominatim;user=foo;password=4{5') + + test_script('exit(CONST_Database_DSN === "pgsql:dbname=nominatim;user=foo;password=4{5" ? 10 : 20);') + + assert run_website_script() == 10 + -- 2.39.5