aboutsummaryrefslogtreecommitdiff
path: root/src/mlia/backend/executor/fs.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mlia/backend/executor/fs.py')
-rw-r--r--src/mlia/backend/executor/fs.py88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/mlia/backend/executor/fs.py b/src/mlia/backend/executor/fs.py
new file mode 100644
index 0000000..3fce19c
--- /dev/null
+++ b/src/mlia/backend/executor/fs.py
@@ -0,0 +1,88 @@
+# SPDX-FileCopyrightText: Copyright 2022, Arm Limited and/or its affiliates.
+# SPDX-License-Identifier: Apache-2.0
+"""Module to host all file system related functions."""
+from __future__ import annotations
+
+import re
+import shutil
+from pathlib import Path
+from typing import Literal
+
+from mlia.utils.filesystem import get_mlia_resources
+
+ResourceType = Literal["applications", "systems"]
+
+
+def get_backend_resources() -> Path:
+ """Get backend resources folder path."""
+ return get_mlia_resources() / "backends"
+
+
+def get_backends_path(name: ResourceType) -> Path:
+ """Return the absolute path of the specified resource.
+
+ It uses importlib to return resources packaged with MANIFEST.in.
+ """
+ if not name:
+ raise ResourceWarning("Resource name is not provided")
+
+ resource_path = get_backend_resources() / name
+ if resource_path.is_dir():
+ return resource_path
+
+ raise ResourceWarning(f"Resource '{name}' not found.")
+
+
+def copy_directory_content(source: Path, destination: Path) -> None:
+ """Copy content of the source directory into destination directory."""
+ for item in source.iterdir():
+ src = source / item.name
+ dest = destination / item.name
+
+ if src.is_dir():
+ shutil.copytree(src, dest)
+ else:
+ shutil.copy2(src, dest)
+
+
+def remove_resource(resource_directory: str, resource_type: ResourceType) -> None:
+ """Remove resource data."""
+ resources = get_backends_path(resource_type)
+
+ resource_location = resources / resource_directory
+ if not resource_location.exists():
+ raise Exception(f"Resource {resource_directory} does not exist")
+
+ if not resource_location.is_dir():
+ raise Exception(f"Wrong resource {resource_directory}")
+
+ shutil.rmtree(resource_location)
+
+
+def remove_directory(directory_path: Path | None) -> None:
+ """Remove directory."""
+ if not directory_path or not directory_path.is_dir():
+ raise Exception("No directory path provided")
+
+ shutil.rmtree(directory_path)
+
+
+def recreate_directory(directory_path: Path | None) -> None:
+ """Recreate directory."""
+ if not directory_path:
+ raise Exception("No directory path provided")
+
+ if directory_path.exists() and not directory_path.is_dir():
+ raise Exception(
+ f"Path {str(directory_path)} does exist and it is not a directory."
+ )
+
+ if directory_path.is_dir():
+ remove_directory(directory_path)
+
+ directory_path.mkdir()
+
+
+def valid_for_filename(value: str, replacement: str = "") -> str:
+ """Replace non alpha numeric characters."""
+ return re.sub(r"[^\w.]", replacement, value, flags=re.ASCII)