fimeval 0.1.47__tar.gz → 0.1.50__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fimeval
3
- Version: 0.1.47
3
+ Version: 0.1.50
4
4
  Summary: A Framework for Automatic Evaluation of Flood Inundation Mapping Predictions Evaluation
5
5
  License: GPLv3
6
6
  Author: Surface Dynamics Modeling Lab
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "fimeval"
3
- version = "0.1.47"
3
+ version = "0.1.50"
4
4
  description = "A Framework for Automatic Evaluation of Flood Inundation Mapping Predictions Evaluation"
5
5
  authors = [
6
6
  "Surface Dynamics Modeling Lab",
@@ -4,6 +4,8 @@ from pathlib import Path
4
4
  import geopandas as gpd
5
5
  import rasterio
6
6
  import shutil
7
+ import subprocess
8
+ import platform
7
9
  import pandas as pd
8
10
  from rasterio.warp import reproject, Resampling
9
11
  from rasterio.io import MemoryFile
@@ -19,6 +21,30 @@ from .metrics import evaluationmetrics
19
21
  from .PWBs3 import get_PWB
20
22
  from ..utilis import MakeFIMsUniform
21
23
 
24
+ #giving the permission to the folder
25
+ def is_writable(path):
26
+ """Check if the directory and its contents are writable."""
27
+ path = Path(path)
28
+ return os.access(path, os.W_OK)
29
+
30
+ def fix_permissions(path):
31
+ path = Path(path).resolve()
32
+ script_path = Path(__file__).parent / "fix_permissions.sh"
33
+
34
+ if not script_path.exists():
35
+ raise FileNotFoundError(f"Shell script not found: {script_path}")
36
+
37
+ if is_writable(path):
38
+ return
39
+
40
+ try:
41
+ result = subprocess.run(["bash", str(script_path), str(path)],
42
+ check=True, capture_output=True, text=True)
43
+ print(result.stdout)
44
+ except subprocess.CalledProcessError as e:
45
+ print(f"Shell script failed:\n{e.stderr}")
46
+
47
+
22
48
  # Function for the evalution of the model
23
49
  def evaluateFIM(
24
50
  benchmark_path, candidate_paths, gdf, folder, method, output_dir, shapefile=None
@@ -49,6 +75,9 @@ def evaluateFIM(
49
75
  # Save the smallest extent boundary and cliped FIMS
50
76
  save_dir = os.path.join(output_dir, os.path.basename(folder), f"{method.__name__}")
51
77
  os.makedirs(save_dir, exist_ok=True)
78
+
79
+ #Give the permission to the output directory
80
+ fix_permissions(save_dir)
52
81
 
53
82
  # Get the smallest matched raster extent and make a boundary shapefile
54
83
  smallest_raster_path = get_smallest_raster_path(benchmark_path, *candidate_paths)
@@ -333,7 +362,16 @@ def evaluateFIM(
333
362
  print(f"Evaluation metrics saved to {csv_file}")
334
363
  return results
335
364
 
336
-
365
+ #Safely deleting the folder
366
+ def safe_delete_folder(folder_path):
367
+ try:
368
+ shutil.rmtree(folder_path)
369
+ except PermissionError:
370
+ print(f"Permission denied: Could not delete {folder_path}")
371
+ except FileNotFoundError:
372
+ print(f"Folder not found: {folder_path}")
373
+ except Exception as e:
374
+ print(f"Error deleting {folder_path}: {e}")
337
375
 
338
376
  def EvaluateFIM(main_dir, method_name, output_dir, PWB_dir=None, shapefile_dir=None, target_crs=None, target_resolution=None):
339
377
  main_dir = Path(main_dir)
@@ -342,7 +380,12 @@ def EvaluateFIM(main_dir, method_name, output_dir, PWB_dir=None, shapefile_dir=N
342
380
  gdf = get_PWB()
343
381
  else:
344
382
  gdf = gpd.read_file(PWB_dir)
383
+
384
+ #Grant the permission to the main directory
385
+ print(f"Fixing permissions for {main_dir}...")
386
+ fix_permissions(main_dir)
345
387
 
388
+ #runt the process
346
389
  def process_TIFF(tif_files, folder_dir):
347
390
  benchmark_path = None
348
391
  candidate_path = []
@@ -384,12 +427,12 @@ def EvaluateFIM(main_dir, method_name, output_dir, PWB_dir=None, shapefile_dir=N
384
427
  if TIFFfiles_main_dir:
385
428
  MakeFIMsUniform(main_dir, target_crs=target_crs, target_resolution=target_resolution)
386
429
 
387
- #processing folder
430
+ # processing folder
388
431
  processing_folder = main_dir / "processing"
389
432
  TIFFfiles = list(processing_folder.glob("*.tif"))
390
433
 
391
434
  process_TIFF(TIFFfiles, main_dir)
392
- shutil.rmtree(processing_folder)
435
+ safe_delete_folder(processing_folder)
393
436
  else:
394
437
  for folder in main_dir.iterdir():
395
438
  if folder.is_dir():
@@ -397,13 +440,12 @@ def EvaluateFIM(main_dir, method_name, output_dir, PWB_dir=None, shapefile_dir=N
397
440
 
398
441
  if tif_files:
399
442
  MakeFIMsUniform(folder, target_crs=target_crs, target_resolution=target_resolution)
400
- #processing folder
443
+
401
444
  processing_folder = folder / "processing"
402
445
  TIFFfiles = list(processing_folder.glob("*.tif"))
403
446
 
404
447
  process_TIFF(TIFFfiles, folder)
405
- shutil.rmtree(processing_folder)
448
+ safe_delete_folder(processing_folder)
406
449
  else:
407
- print(
408
- f"Skipping {folder.name} as it doesn't contain any tif files."
409
- )
450
+ print(f"Skipping {folder.name} as it doesn't contain any tif files.")
451
+
@@ -0,0 +1,20 @@
1
+ #!/bin/bash
2
+
3
+ DIR="$1"
4
+
5
+ if [ -z "$DIR" ]; then
6
+ echo "No directory provided."
7
+ exit 1
8
+ fi
9
+
10
+ UNAME=$(uname)
11
+ if [[ "$UNAME" == "Darwin" || "$UNAME" == "Linux" ]]; then
12
+ chmod -R u+rwX "$DIR"
13
+
14
+ elif [[ "$UNAME" == *"MINGW"* || "$UNAME" == *"MSYS"* || "$UNAME" == *"CYGWIN"* ]]; then
15
+ icacls "$DIR" /grant Everyone:F /T > /dev/null
16
+
17
+ else
18
+ echo "Unsupported OS: $UNAME"
19
+ exit 1
20
+ fi
File without changes
File without changes
File without changes