From 47eb24793a3ff1718cdcf2efedd214e72c6875de Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 29 Jun 2026 11:18:58 +0200 Subject: [PATCH 01/15] fix(Config): refactor project/data_folder_path --- src/opengeodeweb_viewer/app.py | 8 ++++---- src/opengeodeweb_viewer/config.py | 14 ++++---------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/opengeodeweb_viewer/app.py b/src/opengeodeweb_viewer/app.py index ca61d2bf..478aef39 100644 --- a/src/opengeodeweb_viewer/app.py +++ b/src/opengeodeweb_viewer/app.py @@ -207,11 +207,11 @@ def run_server(Server: type[ServerProtocol] = _Server) -> None: args = parser.parse_args() if not "host" in args: - args.host = os.environ["DEFAULT_HOST"] + args.host = os.environ["HOST"] if not "port" in args or args.port == 8080: - args.port = os.environ.get("DEFAULT_PORT") - if "data_folder_path" in args and args.data_folder_path: - os.environ["DATA_FOLDER_PATH"] = args.data_folder_path + args.port = os.environ.get("PORT") + if "project_folder_path" in args and args.project_folder_path: + os.environ["PROJECT_FOLDER_PATH"] = args.project_folder_path db_full_path = os.path.join(os.environ["DATA_FOLDER_PATH"], "project.db") connection.init_database(db_full_path, create_tables=False) diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index 876fc697..67dfcb6a 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -4,23 +4,17 @@ def default_config() -> None: - os.environ["DEFAULT_HOST"] = "localhost" - os.environ["DEFAULT_PORT"] = "1234" + os.environ["HOST"] = "localhost" + os.environ["PORT"] = "1234" + os.environ["DATA_FOLDER_PATH"] = os.path.join(os.environ["PROJECT_FOLDER_PATH"], "data") def prod_config() -> None: default_config() - os.environ["DATA_FOLDER_PATH"] = "/data/" - + os.environ["PROJECT_FOLDER_PATH"] = "/project/" def dev_config() -> None: default_config() - if platform == "linux": - os.environ["DATA_FOLDER_PATH"] = "/temp/OpenGeodeWeb_Data/" - elif platform == "win32": - os.environ["DATA_FOLDER_PATH"] = os.path.join( - "C:/Users", os.getlogin(), "OpenGeodeWeb_Data" - ) data_folder_path = os.environ.get("DATA_FOLDER_PATH") if data_folder_path and not os.path.exists(data_folder_path): os.mkdir(data_folder_path) From ff3f67de33a03d329180acf8a1341d6dd6e98469 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 29 Jun 2026 11:38:50 +0200 Subject: [PATCH 02/15] fix tests --- src/opengeodeweb_viewer/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index 67dfcb6a..c4242990 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -6,12 +6,12 @@ def default_config() -> None: os.environ["HOST"] = "localhost" os.environ["PORT"] = "1234" + os.environ["PROJECT_FOLDER_PATH"] = "/project/" os.environ["DATA_FOLDER_PATH"] = os.path.join(os.environ["PROJECT_FOLDER_PATH"], "data") def prod_config() -> None: default_config() - os.environ["PROJECT_FOLDER_PATH"] = "/project/" def dev_config() -> None: default_config() From 8cbf155fa90d0530cee558e624bb9c256b465fd7 Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Mon, 29 Jun 2026 11:32:22 +0000 Subject: [PATCH 03/15] Apply prepare changes --- requirements.txt | 1 - src/opengeodeweb_viewer/config.py | 5 ++++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 50aaa5fd..9108a15f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -63,4 +63,3 @@ wslink==1.12.4 yarl>=1 # via aiohttp -opengeodeweb-microservice==1.*,>=1.1.3 diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index 67dfcb6a..b5d6c9f8 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -6,13 +6,16 @@ def default_config() -> None: os.environ["HOST"] = "localhost" os.environ["PORT"] = "1234" - os.environ["DATA_FOLDER_PATH"] = os.path.join(os.environ["PROJECT_FOLDER_PATH"], "data") + os.environ["DATA_FOLDER_PATH"] = os.path.join( + os.environ["PROJECT_FOLDER_PATH"], "data" + ) def prod_config() -> None: default_config() os.environ["PROJECT_FOLDER_PATH"] = "/project/" + def dev_config() -> None: default_config() data_folder_path = os.environ.get("DATA_FOLDER_PATH") From f4071267f8c5706bcd358ca865b01d1065437947 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 29 Jun 2026 11:45:20 +0200 Subject: [PATCH 04/15] test --- src/opengeodeweb_viewer/config.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index 966fa9d2..b9cf29c6 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -6,11 +6,11 @@ def default_config() -> None: os.environ["HOST"] = "localhost" os.environ["PORT"] = "1234" - os.environ["PROJECT_FOLDER_PATH"] = "/project/" os.environ["DATA_FOLDER_PATH"] = os.path.join(os.environ["PROJECT_FOLDER_PATH"], "data") def prod_config() -> None: + os.environ["PROJECT_FOLDER_PATH"] = "/project/" default_config() @@ -47,8 +47,8 @@ def _copy_test_assets( def test_config() -> None: default_config() if "DATA_FOLDER_PATH" not in os.environ: - data_path = os.path.join(os.path.dirname(__file__), "..", "..", "tests", "data") - os.environ["DATA_FOLDER_PATH"] = os.path.abspath(data_path) + project_folder_path = os.path.join(os.path.dirname(__file__), "..", "..", "tests") + os.environ["PROJECT_FOLDER_PATH"] = os.path.abspath(project_folder_path) data_path = os.environ["DATA_FOLDER_PATH"] if not os.path.exists(data_path): From 9fb872be4049e30ee9fae9b9104926692dbdbbd7 Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Mon, 29 Jun 2026 11:40:11 +0000 Subject: [PATCH 05/15] Apply prepare changes --- src/opengeodeweb_viewer/config.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index 966fa9d2..9357584e 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -7,7 +7,9 @@ def default_config() -> None: os.environ["HOST"] = "localhost" os.environ["PORT"] = "1234" os.environ["PROJECT_FOLDER_PATH"] = "/project/" - os.environ["DATA_FOLDER_PATH"] = os.path.join(os.environ["PROJECT_FOLDER_PATH"], "data") + os.environ["DATA_FOLDER_PATH"] = os.path.join( + os.environ["PROJECT_FOLDER_PATH"], "data" + ) def prod_config() -> None: From 60b8be3f397f6f8a8deb0748fdb79a35689ff226 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Mon, 29 Jun 2026 11:54:41 +0200 Subject: [PATCH 06/15] tests okay --- tests/conftest.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 1b39a6fb..6efeb563 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -193,8 +193,8 @@ def server(xprocess: XProcess) -> Generator[ServerMonitor, None, None]: @pytest.fixture(scope="session", autouse=True) def configure_test_environment() -> Generator[None, None, None]: - project_root = Path(__file__).parent.absolute() - os.environ["DATA_FOLDER_PATH"] = str(project_root / "data") + project_folder_path = str(Path(__file__).parent.absolute()) + os.environ["PROJECT_FOLDER_PATH"] = project_folder_path config.test_config() db_path = Path(os.environ["DATA_FOLDER_PATH"]) / "project.db" From 7861e2775b73a2ee3742a22935dac4df85b8f38a Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Mon, 29 Jun 2026 11:48:42 +0000 Subject: [PATCH 07/15] Apply prepare changes --- src/opengeodeweb_viewer/config.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index b9cf29c6..da657403 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -6,7 +6,9 @@ def default_config() -> None: os.environ["HOST"] = "localhost" os.environ["PORT"] = "1234" - os.environ["DATA_FOLDER_PATH"] = os.path.join(os.environ["PROJECT_FOLDER_PATH"], "data") + os.environ["DATA_FOLDER_PATH"] = os.path.join( + os.environ["PROJECT_FOLDER_PATH"], "data" + ) def prod_config() -> None: @@ -47,7 +49,9 @@ def _copy_test_assets( def test_config() -> None: default_config() if "DATA_FOLDER_PATH" not in os.environ: - project_folder_path = os.path.join(os.path.dirname(__file__), "..", "..", "tests") + project_folder_path = os.path.join( + os.path.dirname(__file__), "..", "..", "tests" + ) os.environ["PROJECT_FOLDER_PATH"] = os.path.abspath(project_folder_path) data_path = os.environ["DATA_FOLDER_PATH"] From 4b5177549678dc6eea4c8928097ddb6935425177 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 30 Jun 2026 08:06:34 +0200 Subject: [PATCH 08/15] test --- src/opengeodeweb_viewer/app.py | 36 +++++++++++-------- src/opengeodeweb_viewer/config.py | 60 +++++++++++++++---------------- tests/conftest.py | 17 ++++----- 3 files changed, 61 insertions(+), 52 deletions(-) diff --git a/src/opengeodeweb_viewer/app.py b/src/opengeodeweb_viewer/app.py index 478aef39..06a3e9d1 100644 --- a/src/opengeodeweb_viewer/app.py +++ b/src/opengeodeweb_viewer/app.py @@ -105,11 +105,12 @@ class _Server(VtkTypingMixin, ServerProtocol): view = None debug = False + + @staticmethod def add_arguments(parser: argparse.ArgumentParser) -> None: parser.add_argument( - "--data_folder_path", - default=os.environ.get("DATA_FOLDER_PATH"), + "--project_folder_path", help="Path to the folder where data is stored", ) @@ -194,24 +195,31 @@ def initialize(self) -> None: def run_server(Server: type[ServerProtocol] = _Server) -> None: - PYTHON_ENV = os.environ.get("PYTHON_ENV", default="prod").strip().lower() - if PYTHON_ENV == "prod": - prod_config() - elif PYTHON_ENV == "dev": - dev_config() - parser = argparse.ArgumentParser(description="Vtk server") server.add_arguments(parser) Server.add_arguments(parser) args = parser.parse_args() - if not "host" in args: - args.host = os.environ["HOST"] - if not "port" in args or args.port == 8080: - args.port = os.environ.get("PORT") - if "project_folder_path" in args and args.project_folder_path: - os.environ["PROJECT_FOLDER_PATH"] = args.project_folder_path + if not "project_folder_path" in args : + raise ValueError("project_folder_path must be provided") + + PYTHON_ENV = os.environ.get("PYTHON_ENV", "prod").strip().lower() + + if PYTHON_ENV == "prod": + app_config = ProdConfig(args.project_folder_path) + elif PYTHON_ENV == "dev": + app_config = DevConfig(args.project_folder_path) + elif PYTHON_ENV == "test": + app_config = TestConfig(args.project_folder_path) + else: + raise ValueError(f"Unknown PYTHON_ENV: {PYTHON_ENV!r}") + + + if args.host is not None: + app_config.HOST = args.host + if args.port is not None: + app_config.PORT = args.port db_full_path = os.path.join(os.environ["DATA_FOLDER_PATH"], "project.db") connection.init_database(db_full_path, create_tables=False) diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index da657403..94c0397f 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -1,26 +1,41 @@ import os from shutil import copyfile, copytree -from sys import platform -def default_config() -> None: - os.environ["HOST"] = "localhost" - os.environ["PORT"] = "1234" - os.environ["DATA_FOLDER_PATH"] = os.path.join( - os.environ["PROJECT_FOLDER_PATH"], "data" - ) +class Config: + HOST = "localhost" + PORT = "1234" + DATABASE_FILENAME = "project.db" + def __init__(self, project_folder_path: str): + self.PROJECT_FOLDER_PATH = project_folder_path + self.DATA_FOLDER_PATH = os.path.join(project_folder_path, "data") + os.environ["PROJECT_FOLDER_PATH"] = project_folder_path + os.environ["DATA_FOLDER_PATH"] = self.DATA_FOLDER_PATH + os.environ["HOST"] = self.HOST + os.environ["PORT"] = self.PORT + os.environ["DATABASE_FILENAME"] = self.DATABASE_FILENAME -def prod_config() -> None: - os.environ["PROJECT_FOLDER_PATH"] = "/project/" - default_config() +class ProdConfig(Config): + def __init__(self) -> None: + super().__init__("/project") -def dev_config() -> None: - default_config() - data_folder_path = os.environ.get("DATA_FOLDER_PATH") - if data_folder_path and not os.path.exists(data_folder_path): - os.mkdir(data_folder_path) + +class DevConfig(Config): + def __init__(self) -> None: + super().__init__(os.path.dirname(os.path.abspath(__file__))) + os.makedirs(self.DATA_FOLDER_PATH, exist_ok=True) + + +class TestConfig(Config): + def __init__(self, project_folder_path: str) -> None: + print("Received ", project_folder_path, flush=True) + super().__init__(project_folder_path) + os.makedirs(self.DATA_FOLDER_PATH, exist_ok=True) + db_file = os.path.join(self.DATA_FOLDER_PATH, self.DATABASE_FILENAME) + if not os.path.exists(db_file): + open(db_file, "a").close() def _copy_test_assets( @@ -46,18 +61,3 @@ def _copy_test_assets( copyfile(src, os.path.join(uploads_directory, file)) -def test_config() -> None: - default_config() - if "DATA_FOLDER_PATH" not in os.environ: - project_folder_path = os.path.join( - os.path.dirname(__file__), "..", "..", "tests" - ) - os.environ["PROJECT_FOLDER_PATH"] = os.path.abspath(project_folder_path) - - data_path = os.environ["DATA_FOLDER_PATH"] - if not os.path.exists(data_path): - os.makedirs(data_path, exist_ok=True) - - db_file = os.path.join(data_path, "project.db") - if not os.path.exists(db_file): - open(db_file, "a").close() diff --git a/tests/conftest.py b/tests/conftest.py index 6efeb563..80db0544 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -9,7 +9,7 @@ import shutil import xml.etree.ElementTree as ET from typing import Callable, Generator, Any -from opengeodeweb_viewer import config +from opengeodeweb_viewer.config import TestConfig from opengeodeweb_microservice.database.connection import get_session, init_database from opengeodeweb_microservice.database.data import Data from opengeodeweb_viewer.rpc.viewer.viewer_protocols import VtkViewerView @@ -158,7 +158,7 @@ class FixtureHelper: def __init__(self, root_path: Path) -> None: self.root_path = Path(root_path) - def get_xprocess_args(self) -> tuple[str, type, type]: + def get_xprocess_args(self, project_folder_path: str) -> tuple[str, type, type]: class Starter(ProcessStarter): # type: ignore terminate_on_interrupt = True pattern = "wslink: Starting factory" @@ -167,6 +167,8 @@ class Starter(ProcessStarter): # type: ignore # command to start process args = [ "opengeodeweb-viewer", + "--project_folder_path", + project_folder_path, ] return "app", Starter, ServerMonitor @@ -178,7 +180,8 @@ class Starter(ProcessStarter): # type: ignore @pytest.fixture def server(xprocess: XProcess) -> Generator[ServerMonitor, None, None]: - name, Starter, Monitor = HELPER.get_xprocess_args() + project_folder_path = str(Path(__file__).parent.absolute()) + name, Starter, Monitor = HELPER.get_xprocess_args(project_folder_path) os.environ["PYTHON_ENV"] = "test" _, log = xprocess.ensure(name, Starter) monitor = Monitor(log) @@ -194,15 +197,13 @@ def server(xprocess: XProcess) -> Generator[ServerMonitor, None, None]: @pytest.fixture(scope="session", autouse=True) def configure_test_environment() -> Generator[None, None, None]: project_folder_path = str(Path(__file__).parent.absolute()) - os.environ["PROJECT_FOLDER_PATH"] = project_folder_path - - config.test_config() - db_path = Path(os.environ["DATA_FOLDER_PATH"]) / "project.db" + app_config = TestConfig(project_folder_path) + db_path = Path(app_config.DATA_FOLDER_PATH) / "project.db" init_database(db_path=str(db_path)) os.environ["TEST_DB_PATH"] = str(db_path) yield - tmp_data_path = os.environ.get("DATA_FOLDER_PATH") + tmp_data_path = app_config.DATA_FOLDER_PATH if tmp_data_path and "ogw_test_data_" in tmp_data_path: shutil.rmtree(tmp_data_path, ignore_errors=True) print(f"Cleaned up test data folder: {tmp_data_path}", flush=True) From 825a54d680a969bb6d35f09e5d8fec4685c5239c Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 30 Jun 2026 08:49:57 +0200 Subject: [PATCH 09/15] tests okay --- src/opengeodeweb_viewer/app.py | 12 ++++++------ tests/conftest.py | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/opengeodeweb_viewer/app.py b/src/opengeodeweb_viewer/app.py index 06a3e9d1..74feaae1 100644 --- a/src/opengeodeweb_viewer/app.py +++ b/src/opengeodeweb_viewer/app.py @@ -197,7 +197,7 @@ def initialize(self) -> None: def run_server(Server: type[ServerProtocol] = _Server) -> None: parser = argparse.ArgumentParser(description="Vtk server") server.add_arguments(parser) - + parser.set_defaults(port=None, host=None) Server.add_arguments(parser) args = parser.parse_args() @@ -215,11 +215,11 @@ def run_server(Server: type[ServerProtocol] = _Server) -> None: else: raise ValueError(f"Unknown PYTHON_ENV: {PYTHON_ENV!r}") - - if args.host is not None: - app_config.HOST = args.host - if args.port is not None: - app_config.PORT = args.port + if args.host is None: + args.host = app_config.HOST + print(args.port, app_config.PORT, flush=True) + if args.port is None: + args.port = app_config.PORT db_full_path = os.path.join(os.environ["DATA_FOLDER_PATH"], "project.db") connection.init_database(db_full_path, create_tables=False) diff --git a/tests/conftest.py b/tests/conftest.py index 80db0544..6cc8cf02 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -18,9 +18,9 @@ class ServerMonitor: - def __init__(self, log: str) -> None: + def __init__(self, log: str, port: str = "1234") -> None: self.log = log - self.ws = create_connection("ws://localhost:1234/ws") + self.ws = create_connection(f"ws://localhost:{port}/ws") self.images_dir_path = os.path.abspath( os.path.join(os.path.dirname(__file__), "data", "images") ) From 9699bd814fe4f5439a6b75286833219009f73bab Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Tue, 30 Jun 2026 08:07:14 +0000 Subject: [PATCH 10/15] Apply prepare changes --- src/opengeodeweb_viewer/app.py | 5 +---- src/opengeodeweb_viewer/config.py | 2 -- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/opengeodeweb_viewer/app.py b/src/opengeodeweb_viewer/app.py index 06a3e9d1..211ef13d 100644 --- a/src/opengeodeweb_viewer/app.py +++ b/src/opengeodeweb_viewer/app.py @@ -105,8 +105,6 @@ class _Server(VtkTypingMixin, ServerProtocol): view = None debug = False - - @staticmethod def add_arguments(parser: argparse.ArgumentParser) -> None: parser.add_argument( @@ -201,7 +199,7 @@ def run_server(Server: type[ServerProtocol] = _Server) -> None: Server.add_arguments(parser) args = parser.parse_args() - if not "project_folder_path" in args : + if not "project_folder_path" in args: raise ValueError("project_folder_path must be provided") PYTHON_ENV = os.environ.get("PYTHON_ENV", "prod").strip().lower() @@ -215,7 +213,6 @@ def run_server(Server: type[ServerProtocol] = _Server) -> None: else: raise ValueError(f"Unknown PYTHON_ENV: {PYTHON_ENV!r}") - if args.host is not None: app_config.HOST = args.host if args.port is not None: diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index 94c0397f..ab1a3d20 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -59,5 +59,3 @@ def _copy_test_assets( copyfile(src, os.path.join(tmp_data_root, test_id, file)) copyfile(src, os.path.join(structure_directory, file)) copyfile(src, os.path.join(uploads_directory, file)) - - From 392c5788fa65b0930437cd6a6b70bedddeb61af6 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 30 Jun 2026 09:09:21 +0200 Subject: [PATCH 11/15] mypy --- mypy.ini | 4 +++- src/opengeodeweb_viewer/app.py | 1 + src/opengeodeweb_viewer/config.py | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/mypy.ini b/mypy.ini index 089c0496..6193e686 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1,4 +1,6 @@ [mypy] strict = True files = src/ -disallow_untyped_decorators = False \ No newline at end of file +disallow_untyped_decorators = False +mypy_path = src +explicit_package_bases = True \ No newline at end of file diff --git a/src/opengeodeweb_viewer/app.py b/src/opengeodeweb_viewer/app.py index b6df933e..f90d78ec 100644 --- a/src/opengeodeweb_viewer/app.py +++ b/src/opengeodeweb_viewer/app.py @@ -204,6 +204,7 @@ def run_server(Server: type[ServerProtocol] = _Server) -> None: PYTHON_ENV = os.environ.get("PYTHON_ENV", "prod").strip().lower() + app_config: Config if PYTHON_ENV == "prod": app_config = ProdConfig(args.project_folder_path) elif PYTHON_ENV == "dev": diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index ab1a3d20..d8e0be66 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -18,12 +18,12 @@ def __init__(self, project_folder_path: str): class ProdConfig(Config): - def __init__(self) -> None: + def __init__(self, project_folder_path: str) -> None: super().__init__("/project") class DevConfig(Config): - def __init__(self) -> None: + def __init__(self, project_folder_path: str) -> None: super().__init__(os.path.dirname(os.path.abspath(__file__))) os.makedirs(self.DATA_FOLDER_PATH, exist_ok=True) From 5d4e9bf4a1e5428d296c2ade91058d45b1dbe1ad Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 30 Jun 2026 11:01:19 +0200 Subject: [PATCH 12/15] sync_env --- src/opengeodeweb_viewer/app.py | 18 ++++++++++++++---- src/opengeodeweb_viewer/config.py | 9 ++++++--- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/opengeodeweb_viewer/app.py b/src/opengeodeweb_viewer/app.py index f90d78ec..a0a3f3ef 100644 --- a/src/opengeodeweb_viewer/app.py +++ b/src/opengeodeweb_viewer/app.py @@ -199,8 +199,10 @@ def run_server(Server: type[ServerProtocol] = _Server) -> None: Server.add_arguments(parser) args = parser.parse_args() - if not "project_folder_path" in args: + if args.project_folder_path is None: raise ValueError("project_folder_path must be provided") + else: + args.project_folder_path = os.path.abspath(args.project_folder_path) PYTHON_ENV = os.environ.get("PYTHON_ENV", "prod").strip().lower() @@ -214,18 +216,26 @@ def run_server(Server: type[ServerProtocol] = _Server) -> None: else: raise ValueError(f"Unknown PYTHON_ENV: {PYTHON_ENV!r}") - if args.host is None: + + if args.host is not None: + app_config.HOST = str(args.host) + else: args.host = app_config.HOST - if args.port is None: + + if args.port is not None: + app_config.PORT = str(args.port) + else: args.port = app_config.PORT + app_config.sync_env() + db_full_path = os.path.join(os.environ["DATA_FOLDER_PATH"], "project.db") connection.init_database(db_full_path, create_tables=False) print(f"Viewer connected to database at: {db_full_path}", flush=True) print(f"{args=}", flush=True) Server.configure(args) - + print(os.environ, flush=True) server.start_webserver(options=args, protocol=Server) diff --git a/src/opengeodeweb_viewer/config.py b/src/opengeodeweb_viewer/config.py index d8e0be66..a48fba18 100644 --- a/src/opengeodeweb_viewer/config.py +++ b/src/opengeodeweb_viewer/config.py @@ -10,7 +10,10 @@ class Config: def __init__(self, project_folder_path: str): self.PROJECT_FOLDER_PATH = project_folder_path self.DATA_FOLDER_PATH = os.path.join(project_folder_path, "data") - os.environ["PROJECT_FOLDER_PATH"] = project_folder_path + self.sync_env() + + def sync_env(self) -> None: + os.environ["PROJECT_FOLDER_PATH"] = self.PROJECT_FOLDER_PATH os.environ["DATA_FOLDER_PATH"] = self.DATA_FOLDER_PATH os.environ["HOST"] = self.HOST os.environ["PORT"] = self.PORT @@ -19,12 +22,12 @@ def __init__(self, project_folder_path: str): class ProdConfig(Config): def __init__(self, project_folder_path: str) -> None: - super().__init__("/project") + super().__init__(project_folder_path) class DevConfig(Config): def __init__(self, project_folder_path: str) -> None: - super().__init__(os.path.dirname(os.path.abspath(__file__))) + super().__init__(project_folder_path) os.makedirs(self.DATA_FOLDER_PATH, exist_ok=True) From 4d3b26b280fcb5137be767529d159e5d0d80bb64 Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Tue, 30 Jun 2026 09:09:57 +0000 Subject: [PATCH 13/15] Apply prepare changes --- mypy.ini | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mypy.ini b/mypy.ini index 6193e686..089c0496 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1,6 +1,4 @@ [mypy] strict = True files = src/ -disallow_untyped_decorators = False -mypy_path = src -explicit_package_bases = True \ No newline at end of file +disallow_untyped_decorators = False \ No newline at end of file From 77ee9659356364f365b9724befd54cf6d5f817f4 Mon Sep 17 00:00:00 2001 From: JulienChampagnol <91873154+JulienChampagnol@users.noreply.github.com> Date: Tue, 30 Jun 2026 11:01:57 +0000 Subject: [PATCH 14/15] Apply prepare changes --- src/opengeodeweb_viewer/app.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/opengeodeweb_viewer/app.py b/src/opengeodeweb_viewer/app.py index a0a3f3ef..7c6c79a6 100644 --- a/src/opengeodeweb_viewer/app.py +++ b/src/opengeodeweb_viewer/app.py @@ -216,7 +216,6 @@ def run_server(Server: type[ServerProtocol] = _Server) -> None: else: raise ValueError(f"Unknown PYTHON_ENV: {PYTHON_ENV!r}") - if args.host is not None: app_config.HOST = str(args.host) else: From 2310f9906469a53cb334c7cdafb7da0196d8b905 Mon Sep 17 00:00:00 2001 From: JulienChampagnol Date: Tue, 30 Jun 2026 14:24:16 +0200 Subject: [PATCH 15/15] cleanup --- src/opengeodeweb_viewer/app.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/opengeodeweb_viewer/app.py b/src/opengeodeweb_viewer/app.py index a0a3f3ef..46b43100 100644 --- a/src/opengeodeweb_viewer/app.py +++ b/src/opengeodeweb_viewer/app.py @@ -235,7 +235,6 @@ def run_server(Server: type[ServerProtocol] = _Server) -> None: print(f"{args=}", flush=True) Server.configure(args) - print(os.environ, flush=True) server.start_webserver(options=args, protocol=Server)