"""
Module for managing files and folders
"""
import errno
import os
from sys import platform
from typing import List
from .exceptions import deprecated_function
deprecated = deprecated_function(message_suffix="The module `os_utils` will be removed in a future version.")
[docs]@deprecated
def get_content_list(folder: str = ".") -> List[str]:
"""Get list of contents in input folder
:param folder: input folder to list contents. Default is ``'.'``
:return: list of folder contents
"""
return os.listdir(folder)
[docs]@deprecated
def get_folder_list(folder: str = ".") -> List[str]:
"""Get list of sub-folders contained in input folder
:param folder: input folder to list sub-folders. Default is ``'.'``
:return: list of sub-folders
"""
dir_list = get_content_list(folder)
return [f for f in dir_list if not os.path.isfile(os.path.join(folder, f))]
[docs]@deprecated
def get_file_list(folder: str = ".") -> List[str]:
"""Get list of files contained in input folder
:param folder: input folder to list files only. Default is ``'.'``
:return: list of files
"""
dir_list = get_content_list(folder)
return [f for f in dir_list if os.path.isfile(os.path.join(folder, f))]
[docs]@deprecated
def create_parent_folder(filename: str) -> None:
"""Create parent folder for input filename recursively
:param filename: input filename
:raises: error if folder cannot be created
"""
path = os.path.dirname(filename)
if path != "":
make_folder(path)
[docs]@deprecated
def make_folder(path: str) -> None:
"""Create folder at input path recursively
Create a folder specified by input path if one
does not exist already
:param path: input path to folder to be created
:raises: os.error if folder cannot be created
"""
if not os.path.exists(path):
try:
os.makedirs(path)
except OSError as exception:
if exception.errno != errno.EEXIST:
raise ValueError(
f"Specified folder is not writable: {path}\nPlease check permissions or set a new valid folder."
) from exception
[docs]@deprecated
def rename(old_path: str, new_path: str, edit_folders: bool = True) -> None:
"""Rename files or folders
:param old_path: name of file or folder to rename
:param new_path: name of new file or folder
:param edit_folders: flag to allow recursive renaming of folders. Default is `True`
"""
if edit_folders:
os.renames(old_path, new_path)
else:
os.rename(old_path, new_path)
[docs]@deprecated
def size(pathname: str) -> int:
"""Returns size of a file or folder in Bytes
:param pathname: path to file or folder to be sized
:return: size of file or folder in Bytes
:raises: os.error if file is not accessible
"""
if os.path.isfile(pathname):
return os.path.getsize(pathname)
return sum(size(f"{pathname}/{name}") for name in get_content_list(pathname))
[docs]@deprecated
def sys_is_windows() -> bool:
"""Check if user is running the code on Windows machine
:return: `True` if OS is Windows and `False` otherwise
"""
return platform.lower().startswith("win")