Skip to content

Instantly share code, notes, and snippets.

@dvf
Last active January 25, 2023 07:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save dvf/c103e697dab77c304d39d60cf279c500 to your computer and use it in GitHub Desktop.
Save dvf/c103e697dab77c304d39d60cf279c500 to your computer and use it in GitHub Desktop.
Example of recursively walking a folder using Django Storages API
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