22import os
33import threading
44import time
5- import uuid
65import zipfile
76
87# Third party imports
1514# Local application imports
1615from . import geode_functions
1716from .data import Data
18- from .database import db
17+ from .database import database
1918
2019
2120def increment_request_counter (current_app ):
@@ -147,17 +146,23 @@ def handle_exception(e):
147146 return response
148147
149148
150- def create_unique_data_folder ( ) -> tuple [ str , str ] :
149+ def create_data_folder_from_id ( data_id : str ) -> str :
151150 base_data_folder = flask .current_app .config ["DATA_FOLDER_PATH" ]
152- generated_id = str (uuid .uuid4 ()).replace ("-" , "" )
153- data_path = os .path .join (base_data_folder , generated_id )
151+ data_path = os .path .join (base_data_folder , data_id )
154152 os .makedirs (data_path , exist_ok = True )
155- return generated_id , data_path
153+ return data_path
156154
157155
158156def save_all_viewables_and_return_info (
159- geode_object , data , generated_id , data_path , additional_files = None
157+ geode_object , data , input_file , additional_files = None
160158):
159+ data_entry = Data .create (
160+ name = data .name (),
161+ geode_object = geode_object ,
162+ input_file = input_file ,
163+ additional_files = additional_files
164+ )
165+ data_path = create_data_folder_from_id (data_entry .id )
161166 saved_native_file_path = geode_functions .save (
162167 geode_object ,
163168 data ,
@@ -172,42 +177,35 @@ def save_all_viewables_and_return_info(
172177 )
173178 with open (saved_light_viewable_file_path , "rb" ) as f :
174179 binary_light_viewable = f .read ()
175-
176- data_entry = Data (
177- id = generated_id ,
178- name = data .name (),
179- native_file_name = os .path .basename (saved_native_file_path [0 ]),
180- viewable_file_name = os .path .basename (saved_viewable_file_path ),
181- light_viewable = os .path .basename (saved_light_viewable_file_path ),
182- geode_object = geode_object ,
183- input_file = additional_files or [],
184- additional_files = additional_files or [],
185- )
186-
187- db .session .add (data_entry )
188- db .session .commit ()
180+ data_entry .native_file_name = os .path .basename (saved_native_file_path [0 ])
181+ data_entry .viewable_file_name = os .path .basename (saved_viewable_file_path )
182+ data_entry .light_viewable = os .path .basename (saved_light_viewable_file_path )
183+
184+ database .session .commit ()
189185
190186 return {
191- "name" : data .name () ,
192- "native_file_name" : os . path . basename ( saved_native_file_path [ 0 ]) ,
193- "viewable_file_name" : os . path . basename ( saved_viewable_file_path ) ,
187+ "name" : data_entry .name ,
188+ "native_file_name" : data_entry . native_file_name ,
189+ "viewable_file_name" : data_entry . viewable_file_name ,
194190 "id" : data_entry .id ,
195191 "object_type" : geode_functions .get_object_type (geode_object ),
196192 "binary_light_viewable" : binary_light_viewable .decode ("utf-8" ),
197- "geode_object" : geode_object ,
198- "input_files" : additional_files or [] ,
193+ "geode_object" : data_entry . geode_object ,
194+ "input_files" : data_entry . additional_files ,
199195 }
200196
201197
202198def generate_native_viewable_and_light_viewable_from_object (geode_object , data ):
203- generated_id , data_path = create_unique_data_folder ()
204- return save_all_viewables_and_return_info (
205- geode_object , data , generated_id , data_path
206- )
199+ return save_all_viewables_and_return_info (geode_object , data )
207200
208201
209202def generate_native_viewable_and_light_viewable_from_file (geode_object , input_filename ):
210- generated_id , data_path = create_unique_data_folder ()
203+ temp_data_entry = Data .create_and_get_id (
204+ name = "temp" ,
205+ geode_object = geode_object
206+ )
207+
208+ data_path = create_data_folder_from_id (temp_data_entry .id )
211209
212210 full_input_filename = geode_functions .upload_file_path (input_filename )
213211 copied_full_path = os .path .join (
@@ -230,12 +228,13 @@ def generate_native_viewable_and_light_viewable_from_file(geode_object, input_fi
230228 shutil .copy2 (source_path , dest_path )
231229 additional_files_copied .append (additional_file .filename )
232230
233- data = geode_functions .load_data (geode_object , generated_id , input_filename )
231+ data = geode_functions .load_data (geode_object , temp_data_entry .id , input_filename )
232+
233+ database .session .delete (temp_data_entry )
234+ database .session .flush ()
234235
235236 return save_all_viewables_and_return_info (
236237 geode_object ,
237238 data ,
238- generated_id ,
239- data_path ,
240239 additional_files = additional_files_copied ,
241240 )
0 commit comments