Last active
April 18, 2016 03:59
-
-
Save cbare/8e7ab6fe8ad6d903aa0c to your computer and use it in GitHub Desktop.
Recursively download the contents of a Project or Folder from Synapse
This file contains 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
import os | |
import shutil | |
import synapseclient | |
from synapseclient import Project, Folder, Entity, File | |
syn = synapseclient.login() | |
def download(entity, directory=None, verbose=False, indent=0): | |
""" | |
Recusively download a Project or Folder from Synapse. | |
:param entity: A Synapse Entity or Synapse ID. | |
:param directory: The destination directory for the downloaded files. | |
:param verbose: Print a directory tree of the downloaded project or folder. | |
:param indent: keeps track of indent level for printing during recursive calls. | |
""" | |
if not directory: | |
directory = os.getcwd() | |
entity = syn.get(entity, downloadLocation=directory, downloadFile=True) | |
if isinstance(entity, Project) or isinstance(entity, Folder): | |
if verbose: | |
print("%s%s/" % (" "*indent, entity.name)) | |
subdir = os.path.join(directory, entity.name) | |
if not os.path.exists(subdir): | |
os.makedirs(subdir) | |
results = syn.chunkedQuery('select id, name from entity where parentId=="%s"' % entity.id) | |
for result in results: | |
download(result['entity.id'], directory=subdir, verbose=verbose, indent=indent+2) | |
else: | |
if verbose: | |
print("%s%s" % (" "*indent, entity.name)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment