Sage-Bionetworks/synapsePythonClient

Downloading files/folders from synapse with additional jamboree credentials fails

s-hoyt opened this issue · 4 comments

Bug Report

Operating system

MacOS Catalina version 10.15.7

Client version

Output of:

import synapseclient
synapseclient.__version__

'2.2.0'

Description of the problem

Downloading files/folders from synapse with additional jamboree credentials fails.

I am trying to download a folder from synapse, where if I were to do it manually I would click to download each file and then supply my jamboree access key & secret key. I was hoping to do this with the python client because there are a lot of files, but the python client never prompts me for the jamboree keys. Instead each file download silently fails, resulting in an empty list of files.

import synapseclient
import synapseutils 
 
syn = synapseclient.Synapse() 
syn.login('synapse_username','password') 
files = synapseutils.syncFromSynapse(syn, 'synID')

After running this I don't get any errors, but files is empty

Expected behavior

I expected the files in the folder associated with the synapse ID to be downloaded

Actual behavior

No error, but also no successful downloads.

>>> files
[]

Hello @s-hoyt

Could you provide the synapse id of the folder you are downloading ("synID" in the script above).

Are you able to download these files individually outside of a sync, e.g.

syn.get(<syn_file_id)

If so that would help determine whether the issue is with sync or with the client being able to access these files at all.

Also, could you run the following against one of the files and let me know what the result is?

entity = syn.get(<syn_file_id>, downloadFile=False)
print(entity['_file_handle']['concreteType'])

Thank you.

Hi @jkiang13

The synID of the folder = syn22349509

When I try to download an individual file:
syn22350959 = syn.get(entity='syn22350959')

I get the error:
botocore.exceptions.ProfileNotFound: The config profile (default) could not be found

I am not sure if this is an error in how I set up the client, or an error with this file.

When I run:
entity = syn.get(entity='syn22350959', downloadFile = False)
print(entity['_file_handle']['concreteType'])

I get:
org.sagebionetworks.repo.model.file.ExternalObjectStoreFileHandle

Thank you

Hi @s-hoyt ,

Okay this confirms that these files are accessed through external AWS credentials (I thought that's what you were referring to with the jamboree credentials but I wasn't sure). Unlike typical files stored in Synapse, the Synapse backend does not have access to files stored in this way and only serves as a directory, the clients themselves only can access these files and they need your AWS credentials to do so.

The Synapse Python client is not able to find any default AWS profile with your credentials (i.e. the credentials that you have been supplying on the web for individual downloads).

Can you create a file at path ~/.aws/credentials with the following content (filling in your values on the right side). You can also do this using the aws configure command if you have the awscli installed.

[default]
aws_access_key_id = <aws_access_key_id>
aws_secret_access_key = <aws_secret_access_key>

After creating this file then try again to retrieve an individual file and the sync as you have above.

@jkiang13

Thank you! This worked and I was able to download all the files.