Last active
January 25, 2023 07:46
-
-
Save dvf/c103e697dab77c304d39d60cf279c500 to your computer and use it in GitHub Desktop.
Example of recursively walking a folder using Django Storages API
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from pathlib import Path | |
from django.core.files.storage import default_storage | |
def walk_folder(storage, base="/", error_handler=None): | |
""" | |
Recursively walks a folder, using Django's File Storage. | |
:param storage: <Storage> | |
:param base: <str> The base folder | |
:param error_handler: <callable> | |
:yields: A tuple of base, subfolders, files | |
""" | |
try: | |
folders, files = storage.listdir(base) | |
except OSError as e: | |
logger.exception("An error occurred while walking directory %s", base) | |
if error_handler: | |
error_handler(e) | |
return | |
for subfolder in folders: | |
# On S3, we don't really have subfolders, so exclude "." | |
if subfolder == ".": | |
continue | |
new_base = str(Path(base, subfolder)) | |
for f in walk_folder(storage, new_base): | |
yield f | |
yield base, folders, files | |
for base, subfolders, files in walk_folder(default_storage, "some_folder"): | |
print(base, subfolders, files) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment