|
9 | 9 | import shutil |
10 | 10 | from opengeodeweb_viewer.database.connection import db_manager |
11 | 11 | from opengeodeweb_microservice.database.data import Data |
12 | | -from shutil import copyfile, copytree |
13 | | -import os |
| 12 | +from shutil import copyfile |
14 | 13 | import time |
15 | | -from typing import Callable, Optional, List |
| 14 | +from typing import Callable |
16 | 15 | from websocket import WebSocketTimeoutException |
17 | 16 |
|
18 | 17 |
|
@@ -198,91 +197,60 @@ def configure_test_environment(): |
198 | 197 | raise RuntimeError("Failed to initialize test database") |
199 | 198 |
|
200 | 199 | def _seed_database(session): |
201 | | - # Seed mesh data: id=123456789 -> hat.vtp |
202 | 200 | if session.get(Data, "123456789") is None: |
203 | 201 | session.add( |
204 | 202 | Data( |
205 | 203 | id="123456789", |
206 | | - native_file_name="native.vtp", |
| 204 | + native_file_name="", |
207 | 205 | viewable_file_name="hat.vtp", |
208 | 206 | geode_object="mesh", |
209 | 207 | light_viewable=None, |
210 | 208 | input_file="", |
211 | 209 | additional_files=[], |
212 | 210 | ) |
213 | 211 | ) |
214 | | - # Seed model data: id=12345678 -> CrossSection.vtm |
215 | 212 | if session.get(Data, "12345678") is None: |
216 | 213 | session.add( |
217 | 214 | Data( |
218 | 215 | id="12345678", |
219 | | - native_file_name="native.vtm", |
| 216 | + native_file_name="", |
220 | 217 | viewable_file_name="CrossSection.vtm", |
221 | 218 | geode_object="model", |
222 | 219 | light_viewable=None, |
223 | 220 | input_file="", |
224 | 221 | additional_files=[], |
225 | 222 | ) |
226 | 223 | ) |
227 | | - # Seed mesh data: id=44556677 -> points.vtp (tests point set) |
228 | | - if session.get(Data, "44556677") is None: |
| 224 | + if session.get(Data, "33445566") is None: |
229 | 225 | session.add( |
230 | 226 | Data( |
231 | | - id="44556677", |
232 | | - native_file_name="native.vtp", |
233 | | - viewable_file_name="points.vtp", |
| 227 | + id="33445566", |
| 228 | + native_file_name="", |
| 229 | + viewable_file_name="polygon_attribute.vtp", |
234 | 230 | geode_object="mesh", |
235 | 231 | light_viewable=None, |
236 | 232 | input_file="", |
237 | 233 | additional_files=[], |
238 | 234 | ) |
239 | 235 | ) |
240 | | - # Seed mesh data: id=22334455 -> edged_curve.vtp (tests edged curve) |
241 | | - if session.get(Data, "22334455") is None: |
| 236 | + if session.get(Data, "33445577") is None: |
242 | 237 | session.add( |
243 | 238 | Data( |
244 | | - id="22334455", |
245 | | - native_file_name="native.vtp", |
246 | | - viewable_file_name="edged_curve.vtp", |
| 239 | + id="33445577", |
| 240 | + native_file_name="", |
| 241 | + viewable_file_name="vertex_attribute.vtp", |
247 | 242 | geode_object="mesh", |
248 | 243 | light_viewable=None, |
249 | 244 | input_file="", |
250 | 245 | additional_files=[], |
251 | 246 | ) |
252 | 247 | ) |
253 | | - # Seed mesh data: id=11223344 -> hybrid_solid.vtu (polyèdres) |
254 | 248 | if session.get(Data, "11223344") is None: |
255 | 249 | session.add( |
256 | 250 | Data( |
257 | 251 | id="11223344", |
258 | | - native_file_name="native.vtu", |
259 | | - viewable_file_name="hybrid_solid.vtu", |
260 | | - geode_object="mesh", |
261 | | - light_viewable=None, |
262 | | - input_file="", |
263 | | - additional_files=[], |
264 | | - ) |
265 | | - ) |
266 | | - # Seed mesh data: id=33445566 -> polygon_attribute.vtp |
267 | | - if session.get(Data, "33445566") is None: |
268 | | - session.add( |
269 | | - Data( |
270 | | - id="33445566", |
271 | | - native_file_name="native.vtp", |
272 | | - viewable_file_name="polygon_attribute.vtp", |
273 | | - geode_object="mesh", |
274 | | - light_viewable=None, |
275 | | - input_file="", |
276 | | - additional_files=[], |
277 | | - ) |
278 | | - ) |
279 | | - # Seed mesh data: id=33445577 -> vertex_attribute.vtp |
280 | | - if session.get(Data, "33445577") is None: |
281 | | - session.add( |
282 | | - Data( |
283 | | - id="33445577", |
284 | | - native_file_name="native.vtp", |
285 | | - viewable_file_name="vertex_attribute.vtp", |
| 252 | + native_file_name="", |
| 253 | + viewable_file_name="polyhedron_attribute.vtu", |
286 | 254 | geode_object="mesh", |
287 | 255 | light_viewable=None, |
288 | 256 | input_file="", |
@@ -311,59 +279,39 @@ def dataset_factory() -> Callable[..., str]: |
311 | 279 | data_root = os.environ.get("DATA_FOLDER_PATH") |
312 | 280 | assert data_root, "DATA_FOLDER_PATH undefined" |
313 | 281 |
|
314 | | - def create_dataset( |
315 | | - *, |
316 | | - id: str, |
317 | | - geode_object: str, |
318 | | - viewable_file_name: str, |
319 | | - native_file_name: Optional[str] = None, |
320 | | - additional_files: Optional[List[str]] = None, |
321 | | - light_viewable: Optional[bool] = None, |
322 | | - input_file: Optional[str] = None, |
323 | | - ) -> str: |
| 282 | + def create_dataset(*, id: str, viewable_file_name: str) -> str: |
324 | 283 | dest_dir = os.path.join(data_root, id) |
325 | 284 | os.makedirs(dest_dir, exist_ok=True) |
| 285 | + src = os.path.join(src_data, viewable_file_name) |
| 286 | + dst = os.path.join(dest_dir, viewable_file_name) |
| 287 | + copyfile(src, dst) |
326 | 288 |
|
327 | | - def _copy_asset(fname: str): |
328 | | - src = os.path.join(src_data, fname) |
329 | | - dst = os.path.join(dest_dir, fname) |
330 | | - os.makedirs(os.path.dirname(dst), exist_ok=True) |
331 | | - if os.path.isdir(src): |
332 | | - copytree(src, dst, dirs_exist_ok=True) |
333 | | - else: |
334 | | - copyfile(src, dst) |
335 | | - |
336 | | - _copy_asset(viewable_file_name) |
337 | | - if native_file_name: |
338 | | - native_src = os.path.join(src_data, native_file_name) |
339 | | - if os.path.exists(native_src): |
340 | | - _copy_asset(native_file_name) |
341 | | - for fname in additional_files or []: |
342 | | - _copy_asset(fname) |
| 289 | + ext = os.path.splitext(viewable_file_name)[1].lower() |
| 290 | + geode_object = "model" if ext == ".vtm" else "mesh" |
343 | 291 |
|
344 | | - with db_manager.session_scope() as session: |
| 292 | + session = db_manager.get_session() |
| 293 | + if session is None: |
| 294 | + raise RuntimeError("No database session available") |
| 295 | + try: |
345 | 296 | row = session.get(Data, id) |
346 | 297 | if row is None: |
347 | 298 | session.add( |
348 | 299 | Data( |
349 | 300 | id=id, |
350 | | - native_file_name=native_file_name or "", |
| 301 | + native_file_name="", |
351 | 302 | viewable_file_name=viewable_file_name, |
352 | 303 | geode_object=geode_object, |
353 | | - light_viewable=light_viewable, |
354 | | - input_file=input_file or "", |
355 | | - additional_files=additional_files or [], |
| 304 | + light_viewable=None, |
| 305 | + input_file="", |
| 306 | + additional_files=[], |
356 | 307 | ) |
357 | 308 | ) |
358 | 309 | else: |
359 | | - row.native_file_name = native_file_name or row.native_file_name |
360 | | - row.viewable_file_name = viewable_file_name or row.viewable_file_name |
361 | | - row.geode_object = geode_object or row.geode_object |
362 | | - row.light_viewable = ( |
363 | | - light_viewable if light_viewable is not None else row.light_viewable |
364 | | - ) |
365 | | - row.input_file = input_file or row.input_file |
366 | | - row.additional_files = additional_files or row.additional_files |
| 310 | + row.viewable_file_name = viewable_file_name |
| 311 | + row.geode_object = geode_object |
| 312 | + session.commit() |
| 313 | + finally: |
| 314 | + session.close() |
367 | 315 | return id |
368 | 316 |
|
369 | 317 | return create_dataset |
0 commit comments