diff --git a/qim3d/io/_downloader.py b/qim3d/io/_downloader.py index 89e3759d9a2c30a9eb557ba45d8a5dc0152165f3..1de7bcd91062fc20f35d987be01719da20cf028d 100644 --- a/qim3d/io/_downloader.py +++ b/qim3d/io/_downloader.py @@ -17,6 +17,9 @@ class Downloader: Attributes: folder_name (str or os.PathLike): Folder class with the name of the folder in <https://data.qim.dk/> + + Methods: + list_files(): Prints the downloadable files from the QIM data repository. Syntax for downloading and loading a file is `qim3d.io.Downloader().{folder_name}.{file_name}(load_file=True)` @@ -50,6 +53,7 @@ class Downloader: import qim3d downloader = qim3d.io.Downloader() + downloader.list_files() data = downloader.Cowry_Shell.Cowry_DOWNSAMPLED(load_file=True) qim3d.viz.slicer_orthogonal(data, color_map="magma") @@ -62,6 +66,27 @@ class Downloader: for idx, folder in enumerate(folders): exec(f"self.{folder} = self._Myfolder(folder)") + def list_files(self): + """Generate and print formatted folder, file, and size information.""" + + url_dl = "https://archive.compute.dtu.dk/download/public/projects/viscomp_data_repository" + + folders = _extract_names() + + for folder in folders: + log.info(f'\n{ouf.boxtitle(folder, return_str=True)}') + files = _extract_names(folder) + + for file in files: + url = os.path.join(url_dl, folder, file).replace("\\", "/") + file_size = _get_file_size(url) + formatted_file = f"{file[:-len(file.split('.')[-1])-1].replace('%20', '_')}" + formatted_size = _format_file_size(file_size) + path_string = f'{folder}.{formatted_file}' + + log.info(f'{path_string:<50}({formatted_size})') + + class _Myfolder: """Class for extracting the files from each folder in the Downloader class. @@ -231,3 +256,17 @@ def _extract_names(name: str = None): folders = [element.split(" ")[0][4:-4] for element in split] return folders + +def _format_file_size(size_in_bytes): + # Define size units + units = ["B", "KB", "MB", "GB", "TB", "PB"] + size = float(size_in_bytes) + unit_index = 0 + + # Convert to appropriate unit + while size >= 1024 and unit_index < len(units) - 1: + size /= 1024 + unit_index += 1 + + # Format the size with 1 decimal place + return f"{size:.2f}{units[unit_index]}"