Skip to content
Snippets Groups Projects

display downloadable files

Merged s214735 requested to merge downloader_print into main
1 file
+ 42
0
Compare changes
  • Side-by-side
  • Inline
+ 42
0
@@ -62,6 +62,34 @@ class Downloader:
for idx, folder in enumerate(folders):
exec(f"self.{folder} = self._Myfolder(folder)")
def file_directory(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()
table_header = f"{'Folder name':<20} | {'File name':<105} | {'File size':<15}"
table_separator = "-" * len(table_header)
log.info(table_header)
log.info(table_separator)
for folder in folders:
files = _extract_names(folder)
formatted_files = []
formatted_sizes = []
for file in files:
url = os.path.join(url_dl, folder, file).replace("\\", "/")
file_size = _get_file_size(url)
formatted_files.append(f"`{file[:-len(file.split('.')[-1])-1].replace('%20', '_')}`")
formatted_sizes.append(_format_file_size(file_size))
file_list_str = ", ".join(formatted_files)
size_list_str = ", ".join(formatted_sizes)
log.info(f"{'`' + folder + '`':<20} | {file_list_str:<105} | {size_list_str:<15}")
class _Myfolder:
"""Class for extracting the files from each folder in the Downloader class.
@@ -231,3 +259,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]}"
Loading