Folders in Synapse¶
Similar to Projects, Folders are “containers” that offer an additional way to organize your data. Instead of uploading a bunch of single files into your project, you can create folders to separate your data in a systematic way.
Folders in Synapse always have a “parent”, which could be a project or a folder. You can organize collections of folders and sub-folders, just as you would on your local computer.
Note: You may optionally follow the Uploading data in bulk tutorial instead. The bulk tutorial may fit your needs better as it limits the amount of code that you are required to write and maintain.
This tutorial will follow a mix of Flattened Data Layout and Hierarchy Data Layout. It is recommended to use one or the other, but not both. Both are used in this tutorial to demonstrate the flexibility of storing folders within folders on Synapse. With this example layout:
.
├── experiment_notes
│ ├── notes_2022
│ │ ├── fileA.txt
│ │ └── fileB.txt
│ └── notes_2023
│ ├── fileC.txt
│ └── fileD.txt
├── biospecimen_experiment_1
│ ├── fileA.txt
│ └── fileB.txt
├── biospecimen_experiment_2
│ ├── fileC.txt
│ └── fileD.txt
├── single_cell_RNAseq_batch_1
│ ├── SRR12345678_R1.fastq.gz
│ └── SRR12345678_R2.fastq.gz
└── single_cell_RNAseq_batch_2
├── SRR12345678_R1.fastq.gz
└── SRR12345678_R2.fastq.gz
Tutorial Purpose¶
In this tutorial you will:
- Create 4 new folders
- Print stored attributes about your folder
- Create 2 sub-folders
Prerequisites¶
- Make sure that you have completed the Project tutorial.
1. Create a new folder¶
# Step 1: Create a new folder
import synapseclient
from synapseclient import Folder
syn = synapseclient.login()
# Retrieve the project ID
my_project_id = syn.findEntityId(
name="My uniquely named project about Alzheimer's Disease"
)
# Create a Folder object and store it
my_scrnaseq_batch_1_folder = Folder(
name="single_cell_RNAseq_batch_1", parent=my_project_id
)
my_scrnaseq_batch_1_folder = syn.store(obj=my_scrnaseq_batch_1_folder)
my_scrnaseq_batch_2_folder = Folder(
name="single_cell_RNAseq_batch_2", parent=my_project_id
)
my_scrnaseq_batch_2_folder = syn.store(obj=my_scrnaseq_batch_2_folder)
biospecimen_experiment_1_folder = Folder(
name="biospecimen_experiment_1", parent=my_project_id
)
biospecimen_experiment_1_folder = syn.store(obj=biospecimen_experiment_1_folder)
biospecimen_experiment_2_folder = Folder(
name="biospecimen_experiment_2", parent=my_project_id
)
biospecimen_experiment_2_folder = syn.store(obj=biospecimen_experiment_2_folder)
2. Print stored attributes about your folder¶
biospecimen_experiment_2_folder = syn.store(obj=biospecimen_experiment_2_folder)
# Step 2: Print stored attributes about your folder
my_scrnaseq_batch_1_folder_id = my_scrnaseq_batch_1_folder.id
print(f"My folder ID is: {my_scrnaseq_batch_1_folder_id}")
print(f"The parent ID of my folder is: {my_scrnaseq_batch_1_folder.parentId}")
print(f"I created my folder on: {my_scrnaseq_batch_1_folder.createdOn}")
print(
f"The ID of the user that created my folder is: {my_scrnaseq_batch_1_folder.createdBy}"
)
print(f"My folder was last modified on: {my_scrnaseq_batch_1_folder.modifiedOn}")
You'll notice the output looks like:
My folder ID is: syn53205629
The parent ID of my folder is: syn53185532
I created my folder on: 2023-12-28T20:52:50.193Z
The ID of the user that created my folder is: 3481671
My folder was last modified on: 2023-12-28T20:52:50.193Z
3. Create 2 sub-folders¶
hierarchical_root_folder = Folder(name="experiment_notes", parent=my_project_id)
hierarchical_root_folder = syn.store(obj=hierarchical_root_folder)
folder_notes_2023 = Folder(name="notes_2023", parent=hierarchical_root_folder.id)
folder_notes_2023 = syn.store(obj=folder_notes_2023)
folder_notes_2022 = Folder(name="notes_2022", parent=hierarchical_root_folder.id)
folder_notes_2022 = syn.store(obj=folder_notes_2022)
Results¶
Now that you have created your folders you'll be able to inspect this on the Files tab of your project in the synapse web UI. It should look similar to:
Source code for this tutorial¶
Click to show me
"""
Here is where you'll find the code for the Folder tutorial.
"""
# Step 1: Create a new folder
import synapseclient
from synapseclient import Folder
syn = synapseclient.login()
# Retrieve the project ID
my_project_id = syn.findEntityId(
name="My uniquely named project about Alzheimer's Disease"
)
# Create a Folder object and store it
my_scrnaseq_batch_1_folder = Folder(
name="single_cell_RNAseq_batch_1", parent=my_project_id
)
my_scrnaseq_batch_1_folder = syn.store(obj=my_scrnaseq_batch_1_folder)
my_scrnaseq_batch_2_folder = Folder(
name="single_cell_RNAseq_batch_2", parent=my_project_id
)
my_scrnaseq_batch_2_folder = syn.store(obj=my_scrnaseq_batch_2_folder)
biospecimen_experiment_1_folder = Folder(
name="biospecimen_experiment_1", parent=my_project_id
)
biospecimen_experiment_1_folder = syn.store(obj=biospecimen_experiment_1_folder)
biospecimen_experiment_2_folder = Folder(
name="biospecimen_experiment_2", parent=my_project_id
)
biospecimen_experiment_2_folder = syn.store(obj=biospecimen_experiment_2_folder)
# Step 2: Print stored attributes about your folder
my_scrnaseq_batch_1_folder_id = my_scrnaseq_batch_1_folder.id
print(f"My folder ID is: {my_scrnaseq_batch_1_folder_id}")
print(f"The parent ID of my folder is: {my_scrnaseq_batch_1_folder.parentId}")
print(f"I created my folder on: {my_scrnaseq_batch_1_folder.createdOn}")
print(
f"The ID of the user that created my folder is: {my_scrnaseq_batch_1_folder.createdBy}"
)
print(f"My folder was last modified on: {my_scrnaseq_batch_1_folder.modifiedOn}")
# Step 3: Create 2 sub-folders
hierarchical_root_folder = Folder(name="experiment_notes", parent=my_project_id)
hierarchical_root_folder = syn.store(obj=hierarchical_root_folder)
folder_notes_2023 = Folder(name="notes_2023", parent=hierarchical_root_folder.id)
folder_notes_2023 = syn.store(obj=folder_notes_2023)
folder_notes_2022 = Folder(name="notes_2022", parent=hierarchical_root_folder.id)
folder_notes_2022 = syn.store(obj=folder_notes_2022)