Views

A view is a view of all entities (File, Folder, Project, Table, Docker Repository, View) within one or more Projects or Folders. Views can:

  • Provide a way of isolating or linking data based on similarities
  • Provide the ability to link entities together by their annotations
  • Allow view/editing entities attributes in bulk
  • Allow entities to be easily searched and queried

Preliminaries:

library(synapser)
## 
## TERMS OF USE NOTICE:
##   When using Synapse, remember that the terms and conditions of use require that you:
##   1) Attribute data contributors when discussing these data or results from these data.
##   2) Not discriminate, identify, or recontact individuals or groups represented by the data.
##   3) Use and contribute only data de-identified to HIPAA standards.
##   4) Redistribute data only under these same terms of use.
synLogin()
## Welcome, test!
## NULL
# Create a new project
# use hex_digits to generate random string
hex_digits <- c(as.character(0:9), letters[1:6])
projectName <- sprintf("My unique project %s", paste0(sample(hex_digits, 32, replace = TRUE), collapse = ""))
project <- Project(projectName)
project <- synStore(project)

# Create some files
filePath <- tempfile()
connection <- file(filePath)
writeChar("this is the content of the first file", connection, eos = NULL)
close(connection)
file <- File(path = filePath, parent = project)
file <- synStore(file)
## ################################################## Uploading file to Synapse storage ##################################################
Uploading [--------------------]0.00%   0.0bytes/37.0bytes  file44026b03761e     
Uploading [####################]100.00%   37.0bytes/37.0bytes (196.4bytes/s) file44026b03761e Done...

filePath2 <- tempfile()
connection2 <- file(filePath2)
writeChar("this is the content of the second file", connection, eos = NULL)
close(connection2)
file2 <- File(path = filePath2, parent = project)
file2 <- synStore(file2)
## ################################################## Uploading file to Synapse storage ##################################################
Uploading [--------------------]0.00%   0.0bytes/38.0bytes  file4402139404f2     
Uploading [####################]100.00%   38.0bytes/38.0bytes (174.1bytes/s) file4402139404f2 Done...

# add some annotations
synSetAnnotations(file, list(contributor = "Sage", class = "V"))
## $class
## $class[[1]]
## [1] "V"
## 
## 
## $contributor
## $contributor[[1]]
## [1] "Sage"
synSetAnnotations(file2, list(contributor = "UW", rank = "X"))
## $rank
## $rank[[1]]
## [1] "X"
## 
## 
## $contributor
## $contributor[[1]]
## [1] "UW"

Creating a View:

view <- EntityViewSchema(name = "my first file view",
                         columns = c(
                           Column(name = "contributor", columnType = "STRING"),
                           Column(name = "class", columnType = "STRING"),
                           Column(name = "rank", columnType = "STRING")),
                         parent = project$properties$id,
                         scopes = project$properties$id,
                         includeEntityTypes = c(EntityViewType$FILE, EntityViewType$FOLDER),
                         add_default_columns = TRUE)

view <- synStore(view)

We support the following entity type in a View:

EntityViewType
## $DOCKER
## EntityViewType.DOCKER
## 
## $FILE
## EntityViewType.FILE
## 
## $FOLDER
## EntityViewType.FOLDER
## 
## $PROJECT
## EntityViewType.PROJECT
## 
## $TABLE
## EntityViewType.TABLE
## 
## $VIEW
## EntityViewType.VIEW

To see the content of your newly created View, use synTableQuery():

queryResults <- synTableQuery(sprintf("select * from %s", view$properties$id))
## 
 [####################]100.00%   1/1   Done...    
Downloading  [####################]100.00%   715.0bytes/715.0bytes (620.6kB/s) Job-950045781268530199537235.csv Done...
data <- as.data.frame(queryResults)
data
##     ROW_ID ROW_VERSION                             ROW_ETAG          id
## 1 10110454           1 cf49ba3d-0110-47d9-ae1a-3055d77b828c syn10110454
## 2 10110456           1 f10438f9-09aa-426b-98a4-21731db716a2 syn10110456
##               name           createdOn createdBy
## 1 file44026b03761e 2019-07-02 21:18:22   3323858
## 2 file4402139404f2 2019-07-02 21:18:23   3323858
##                                   etag type currentVersion    parentId
## 1 cf49ba3d-0110-47d9-ae1a-3055d77b828c file              1 syn10110452
## 2 f10438f9-09aa-426b-98a4-21731db716a2 file              1 syn10110452
##   benefactorId   projectId          modifiedOn modifiedBy dataFileHandleId
## 1  syn10110452 syn10110452 2019-07-02 21:18:23    3323858           707378
## 2  syn10110452 syn10110452 2019-07-02 21:18:23    3323858           707380
##   contributor class rank
## 1        Sage     V <NA>
## 2          UW  <NA>    X

Updating Annotations using View

To update ‘class’ annotation for ‘file2’, simply update the view:

data["class"] <- c("V", "VI")
synStore(Table(view$properties$id, data))

The change in annotations reflect in synGetAnnotations():

synGetAnnotations(file2$properties$id)

Update View’s Content

A view can contain different types of entity. To change the types of entity that will show up in a view:

view <- synGet(view$properties$id)
view$set_entity_types(list(EntityViewType$FILE))
## NULL

A View is a Table. Please visit Tables vignettes to see how to change schema, update content, and other operations that can be done on View.

synDelete(project)
## NULL