File Upload¶
Files in Synapse are versionable. Please see Files and Versioning for more information about how versions in Files works.
Uploading a New Version¶
Uploading a new version follows the same steps as uploading a file for the first time - use the same file name and store it in the same location (e.g., the same parentId). It is recommended to add a comment to the new version in order to easily track differences at a glance. The example file raw_data.txt will now have a version of 2 and a comment describing the change.
Explicit example:
import synapseclient
# fetch the file in Synapse
file_to_update = syn.get('syn2222', downloadFile=False)
# save the local path to the new version of the file
file_to_update.path = '/path/to/new/version/of/raw_data.txt'
# add a version comment
file_to_update.versionComment = 'Added 5 random normally distributed numbers.'
# store the new file
updated_file = syn.store(file_to_update)
Implicit example:
# Assuming that there is a file created with:
syn.store(File('path/to/old/raw_data.txt', parentId='syn123456'))
# To create a new version of that file, make sure you store it with the exact same name
new_file = syn.store(File('path/to/new_version/raw_data.txt', parentId='syn123456'))
Updating Annotations or Provenance without Changing Versions¶
Any change to a File will automatically update its version. If this isn’t the desired behavior, such as minor changes to the metadata, you can set forceVersion=False with the Python client. For command line, the commands set-annotations and set-provenance will update the metadata without creating a new version. Adding/updating annotations and provenance in the web client will also not cause a version change.
Important: Because Provenance is tracked by version, set `forceVersion=False` for minor changes to avoid breaking Provenance.
Setting annotations without changing version:
# Get file from Synapse, set download=False since we are only updating annotations
file = syn.get('syn56789', download=False)
# Add annotations
file.annotations = {"fileType":"bam", "assay":"RNA-seq"}
# Store the file without creating a new version
file = syn.store(file, forceVersion=False)
Setting Provenance without Changing Version¶
To set Provenance without changing the file version:
# Get file from Synapse, set download=False since we are only updating provenance
file = syn.get('syn56789', download=False)
# Add provenance
file = syn.setProvenance(file, activity = Activity(used = '/path/to/example_code'))
# Store the file without creating a new version
file = syn.store(file, forceVersion=False)
Downloading a Specific Version¶
By default, the File downloaded will always be the most recent version. However, a specific version can be downloaded by passing the version parameter:
entity = syn.get("syn3260973", version=1)