diff --git a/requirements.txt b/requirements.txt index 8b7b73e0..fbd6b37c 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.*,>=3.0.3 # via # -r requirements.in @@ -21,9 +19,7 @@ flask[async]==3.*,>=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 diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index 2830a325..ab3d05bf 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -5,6 +5,7 @@ import zipfile from collections.abc import Callable from typing import Any +from concurrent.futures import ThreadPoolExecutor # Third party imports import flask @@ -175,38 +176,47 @@ def save_all_viewables_and_return_info( additional_files=additional_files, ) data_path = create_data_folder_from_id(data_entry.id) - saved_native_file_path = geode_functions.save( - geode_object, - data, - data_path, - "native." + data.native_extension(), - ) - saved_viewable_file_path = geode_functions.save_viewable( - geode_object, data, data_path, "viewable" - ) - saved_light_viewable_file_path = geode_functions.save_light_viewable( - geode_object, data, data_path, "light_viewable" - ) - with open(saved_light_viewable_file_path, "rb") as f: - binary_light_viewable = f.read() - data_entry.native_file_name = os.path.basename(saved_native_file_path[0]) - data_entry.viewable_file_name = os.path.basename(saved_viewable_file_path) - data_entry.light_viewable = os.path.basename(saved_light_viewable_file_path) - - session = get_session() - if session: - session.commit() - - return { - "native_file_name": data_entry.native_file_name, - "viewable_file_name": data_entry.viewable_file_name, - "id": data_entry.id, - "object_type": geode_functions.get_object_type(geode_object), - "binary_light_viewable": binary_light_viewable.decode("utf-8"), - "geode_object": data_entry.geode_object, - "input_files": data_entry.input_file, - "additional_files": data_entry.additional_files, - } + with ThreadPoolExecutor() as executor: + native_future = executor.submit( + geode_functions.save, + geode_object, + data, + data_path, + "native." + data.native_extension(), + ) + viewable_future = executor.submit( + geode_functions.save_viewable, geode_object, data, data_path, "viewable" + ) + light_viewable_future = executor.submit( + geode_functions.save_light_viewable, + geode_object, + data, + data_path, + "light_viewable", + ) + saved_light_viewable_file_path = light_viewable_future.result() + with open(saved_light_viewable_file_path, "rb") as f: + binary_light_viewable = f.read() + saved_native_file_path = native_future.result() + saved_viewable_file_path = viewable_future.result() + data_entry.native_file_name = os.path.basename(saved_native_file_path[0]) + data_entry.viewable_file_name = os.path.basename(saved_viewable_file_path) + data_entry.light_viewable = os.path.basename(saved_light_viewable_file_path) + + session = get_session() + if session: + session.commit() + + return { + "native_file_name": data_entry.native_file_name, + "viewable_file_name": data_entry.viewable_file_name, + "id": data_entry.id, + "object_type": geode_functions.get_object_type(geode_object), + "binary_light_viewable": binary_light_viewable.decode("utf-8"), + "geode_object": data_entry.geode_object, + "input_files": data_entry.input_file, + "additional_files": data_entry.additional_files, + } def generate_native_viewable_and_light_viewable_from_object(