From 496d4b9b5e317a99e5ee4fd73bbabb93dcecd17c Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Thu, 18 Sep 2025 17:07:42 +0200 Subject: [PATCH 1/8] sql alchemy replacing flask sql alchemy --- app.py | 12 +++++++++++- src/opengeodeweb_back/app_config.py | 3 +-- src/opengeodeweb_back/utils_functions.py | 4 ---- tests/conftest.py | 5 +---- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/app.py b/app.py index 3672fe02..93d98b74 100644 --- a/app.py +++ b/app.py @@ -56,8 +56,18 @@ def return_error(): flask.abort(500, f"Test") +def get_db_path_from_config(): + database_uri = app.config.get("SQLALCHEMY_DATABASE_URI", "") + if database_uri.startswith("sqlite:///"): + return database_uri.replace("sqlite:///", "") + return None + + # ''' Main ''' if __name__ == "__main__": - init_database(app) + db_path = get_db_path_from_config() + if db_path: + init_database(db_path) + print(f"Python is running in {FLASK_DEBUG} mode") app.run(debug=FLASK_DEBUG, host=DEFAULT_HOST, port=PORT, ssl_context=SSL) diff --git a/src/opengeodeweb_back/app_config.py b/src/opengeodeweb_back/app_config.py index 453a0eda..96e69745 100644 --- a/src/opengeodeweb_back/app_config.py +++ b/src/opengeodeweb_back/app_config.py @@ -4,9 +4,8 @@ # Third party imports # Local application imports -from opengeodeweb_microservice.database.connection import get_database -DATABASE_FILENAME = "project.db" +DATABASE_FILENAME = "project.db" # Should be declared only once. class Config(object): diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index 2830a325..487ad6a9 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -249,10 +249,6 @@ def generate_native_viewable_and_light_viewable_from_file( data = geode_functions.load(geode_object, copied_full_path) - # Remplacer : - # database.session.delete(temp_data_entry) - # database.session.flush() - # Par : session = get_session() if session: session.delete(temp_data_entry) diff --git a/tests/conftest.py b/tests/conftest.py index e9b41626..2b4f9cc3 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -28,10 +28,7 @@ def copy_data(): print("Current working directory:", os.getcwd()) print("Directory contents:", os.listdir(".")) - init_database(app) - # print(list(app.blueprints.keys())) - # for rule in app.url_map.iter_rules(): - # print(f"Route: {rule.rule} -> {rule.endpoint}") + init_database(db_path) @pytest.fixture From f967f9bc5e93d41793219110ca411aca1e183d72 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Fri, 19 Sep 2025 09:19:09 +0200 Subject: [PATCH 2/8] fix(database): use SQLAlchemy database to fit new version of OGW-Microservice --- src/opengeodeweb_back/app_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengeodeweb_back/app_config.py b/src/opengeodeweb_back/app_config.py index 96e69745..5725359f 100644 --- a/src/opengeodeweb_back/app_config.py +++ b/src/opengeodeweb_back/app_config.py @@ -5,7 +5,7 @@ # Third party imports # Local application imports -DATABASE_FILENAME = "project.db" # Should be declared only once. +DATABASE_FILENAME = "project.db" class Config(object): From d324cba125d7c48158499e13c4d6ea8f31335af3 Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Tue, 30 Sep 2025 16:02:56 +0200 Subject: [PATCH 3/8] removed debug logs, moved SQLAlchemy variables to Vease Back. --- app.py | 30 ++++++++++++++---------- src/opengeodeweb_back/app_config.py | 9 +------ src/opengeodeweb_back/utils_functions.py | 1 - 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/app.py b/app.py index 93d98b74..400d73b6 100644 --- a/app.py +++ b/app.py @@ -29,6 +29,22 @@ ORIGINS = app.config.get("ORIGINS") SSL = app.config.get("SSL") + +def get_db_path_from_config(): + database_uri = app.config.get("SQLALCHEMY_DATABASE_URI", "") + if database_uri.startswith("sqlite:///"): + return database_uri.replace("sqlite:///", "") + return None + + +db_path = get_db_path_from_config() +if db_path: + db_dir = os.path.dirname(db_path) + if db_dir and not os.path.exists(db_dir): + os.makedirs(db_dir, exist_ok=True) + init_database(db_path) + print(f"Database initialized at: {db_path}") + flask_cors.CORS(app, origins=ORIGINS) app.register_blueprint( blueprint_routes.routes, @@ -56,18 +72,8 @@ def return_error(): flask.abort(500, f"Test") -def get_db_path_from_config(): - database_uri = app.config.get("SQLALCHEMY_DATABASE_URI", "") - if database_uri.startswith("sqlite:///"): - return database_uri.replace("sqlite:///", "") - return None - - # ''' Main ''' if __name__ == "__main__": - db_path = get_db_path_from_config() - if db_path: - init_database(db_path) - - print(f"Python is running in {FLASK_DEBUG} mode") + data_folder = app.config.get("DATA_FOLDER_PATH") + upload_folder = app.config.get("UPLOAD_FOLDER") app.run(debug=FLASK_DEBUG, host=DEFAULT_HOST, port=PORT, ssl_context=SSL) diff --git a/src/opengeodeweb_back/app_config.py b/src/opengeodeweb_back/app_config.py index 5725359f..f80e7ca5 100644 --- a/src/opengeodeweb_back/app_config.py +++ b/src/opengeodeweb_back/app_config.py @@ -5,8 +5,6 @@ # Third party imports # Local application imports -DATABASE_FILENAME = "project.db" - class Config(object): FLASK_DEBUG = os.environ.get("FLASK_DEBUG", default=False) @@ -18,6 +16,7 @@ class Config(object): LAST_REQUEST_TIME = time.time() LAST_PING_TIME = time.time() SQLALCHEMY_TRACK_MODIFICATIONS = False + DATABASE_FILENAME = "project.db" class ProdConfig(Config): @@ -26,9 +25,6 @@ class ProdConfig(Config): MINUTES_BEFORE_TIMEOUT = "1" SECONDS_BETWEEN_SHUTDOWNS = "10" DATA_FOLDER_PATH = "/data" - SQLALCHEMY_DATABASE_URI = f"sqlite:///{os.path.abspath( - os.path.join(DATA_FOLDER_PATH, DATABASE_FILENAME) - )}" class DevConfig(Config): @@ -38,6 +34,3 @@ class DevConfig(Config): SECONDS_BETWEEN_SHUTDOWNS = "10" BASE_DIR = os.path.dirname(os.path.abspath(__file__)) DATA_FOLDER_PATH = os.path.join(BASE_DIR, "data") - SQLALCHEMY_DATABASE_URI = f"sqlite:///{os.path.join( - BASE_DIR, DATA_FOLDER_PATH, DATABASE_FILENAME - )}" diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index 487ad6a9..fb6629e3 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -87,7 +87,6 @@ def validate_request(request: flask.Request, schema: dict[str, str]) -> None: if json_data is None: json_data = {} - try: validate = fastjsonschema.compile(schema) validate(json_data) From 52947521f736eb054cfc880c4934eaee4f1d439f Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Wed, 1 Oct 2025 09:21:03 +0000 Subject: [PATCH 4/8] Apply prepare changes --- requirements.txt | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/requirements.txt b/requirements.txt index aa902438..5b528e8b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --output-file=./requirements.txt --pre ./requirements-internal.in ./requirements.in +# pip-compile --output-file=./requirements.txt --pre ./requirements.in # asgiref==3.*,>=3.9.2 # via flask @@ -10,8 +10,6 @@ blinker==1.*,>=1.9.0 # via flask click==8.*,>=8.3.0 # via flask -fastjsonschema==2.*,>=2.21.1 - # via opengeodeweb-microservice flask[async]==3.0.3 # via # -r requirements.in @@ -21,9 +19,7 @@ flask[async]==3.0.3 flask-cors==6.*,>=6.0.1 # via -r requirements.in flask-sqlalchemy==3.*,>=3.1.1 - # via - # -r requirements.in - # opengeodeweb-microservice + # via -r requirements.in geode-common==33.11.0 # via # -r requirements.in @@ -63,12 +59,8 @@ opengeode-io==7.4.0 # -r requirements.in # geode-viewables # opengeode-geosciencesio -opengeodeweb-microservice==1.*,>=1.0.0 - # via -r requirements-internal.in sqlalchemy==2.*,>=2.0.43 - # via - # flask-sqlalchemy - # opengeodeweb-microservice + # via flask-sqlalchemy typing-extensions==4.*,>=4.15.0 # via sqlalchemy werkzeug==3.0.3 From 5c3d2a5d6060c28a6d78e1e0912e90fc3eea1209 Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Wed, 1 Oct 2025 10:20:34 +0000 Subject: [PATCH 5/8] Apply prepare changes --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 5b528e8b..fbd6b37c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,7 +10,7 @@ blinker==1.*,>=1.9.0 # via flask click==8.*,>=8.3.0 # via flask -flask[async]==3.0.3 +flask[async]==3.*,>=3.0.3 # via # -r requirements.in # flask From 6cc055ee25891de48df8aa42f14488a61b8a896b Mon Sep 17 00:00:00 2001 From: MaxNumerique Date: Wed, 1 Oct 2025 13:11:19 +0200 Subject: [PATCH 6/8] removed dep : Flask-SQLAlchemy --- requirements.in | 3 +-- src/opengeodeweb_back/app_config.py | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/requirements.in b/requirements.in index b9c6544f..14d45e01 100644 --- a/requirements.in +++ b/requirements.in @@ -7,5 +7,4 @@ geode-common==33.11.0 geode-viewables==3.3.0 Flask[async]==3.0.3 Flask-Cors==6.0.1 -werkzeug==3.0.3 -Flask-SQLAlchemy==3.1.1 \ No newline at end of file +werkzeug==3.0.3 \ No newline at end of file diff --git a/src/opengeodeweb_back/app_config.py b/src/opengeodeweb_back/app_config.py index f80e7ca5..095b2754 100644 --- a/src/opengeodeweb_back/app_config.py +++ b/src/opengeodeweb_back/app_config.py @@ -15,7 +15,6 @@ class Config(object): REQUEST_COUNTER = 0 LAST_REQUEST_TIME = time.time() LAST_PING_TIME = time.time() - SQLALCHEMY_TRACK_MODIFICATIONS = False DATABASE_FILENAME = "project.db" From eedd720dc5d58f18b7126f0f830d3637ed776e93 Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Wed, 1 Oct 2025 11:11:44 +0000 Subject: [PATCH 7/8] Apply prepare changes --- requirements.txt | 9 --------- 1 file changed, 9 deletions(-) diff --git a/requirements.txt b/requirements.txt index fbd6b37c..3be0d76d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,19 +15,14 @@ flask[async]==3.*,>=3.0.3 # -r requirements.in # flask # flask-cors - # flask-sqlalchemy flask-cors==6.*,>=6.0.1 # via -r requirements.in -flask-sqlalchemy==3.*,>=3.1.1 - # via -r requirements.in geode-common==33.11.0 # via # -r requirements.in # geode-viewables geode-viewables==3.3.0 # via -r requirements.in -greenlet==3.*,>=3.2.4 - # via sqlalchemy itsdangerous==2.*,>=2.2.0 # via flask jinja2==3.*,>=3.1.6 @@ -59,10 +54,6 @@ opengeode-io==7.4.0 # -r requirements.in # geode-viewables # opengeode-geosciencesio -sqlalchemy==2.*,>=2.0.43 - # via flask-sqlalchemy -typing-extensions==4.*,>=4.15.0 - # via sqlalchemy werkzeug==3.0.3 # via # -r requirements.in From d0d5324e429641242b27d29ced2f950c6df4b66d Mon Sep 17 00:00:00 2001 From: MaxNumerique <144453705+MaxNumerique@users.noreply.github.com> Date: Thu, 2 Oct 2025 15:05:00 +0000 Subject: [PATCH 8/8] Apply prepare changes --- requirements.txt | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/requirements.txt b/requirements.txt index c9b18da1..d32a13d4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,16 +6,16 @@ # asgiref~=3.0 # via flask -blinker==1.*,>=1.9.0 +blinker~=1.0 # via flask -click==8.*,>=8.3.0 +click~=8.0 # via flask -flask[async]==3.*,>=3.0.3 +flask[async]~=3.0 # via # -r requirements.in # flask # flask-cors -flask-cors==6.*,>=6.0.1 +flask-cors~=6.0 # via -r requirements.in geode-common==33.11.0 # via @@ -23,14 +23,13 @@ geode-common==33.11.0 # geode-viewables geode-viewables==3.3.0 # via -r requirements.in -itsdangerous==2.*,>=2.2.0 +itsdangerous~=2.0 # via flask -jinja2==3.*,>=3.1.6 +jinja2~=3.0 # via flask -markupsafe==3.*,>=3.0.3 +markupsafe~=3.0 # via # jinja2 - # opengeodeweb-microservice # werkzeug opengeode-core==15.27.4 # via @@ -60,4 +59,3 @@ werkzeug==3.0.3 # -r requirements.in # flask # flask-cors - # opengeodeweb-microservice