Skip to content

Commit

Permalink
[python/r] Always write TileDB Cloud–specific metadata to Experiments (
Browse files Browse the repository at this point in the history
…#1286)

* Add dataset_type metadata to SOMAExperiment
* Apply dataset_type metadata regardless of URI
  • Loading branch information
aaronwolen committed Apr 25, 2023
1 parent ecda213 commit f3f200f
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 8 deletions.
3 changes: 1 addition & 2 deletions apis/python/src/tiledbsoma/_experiment.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,5 @@ class Experiment(
def _set_create_metadata(cls, handle: Wrapper[Any]) -> None:
# Root SOMA objects include a `dataset_type` entry to allow the
# TileDB Cloud UI to detect that they are SOMA datasets.
if handle.uri.startswith("tiledb://"):
handle.metadata["dataset_type"] = "soma"
handle.metadata["dataset_type"] = "soma"
return super()._set_create_metadata(handle)
28 changes: 22 additions & 6 deletions apis/r/R/SOMACollectionBase.R
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,16 @@ SOMACollectionBase <- R6::R6Class(
#' @description Add a new SOMA object to the collection. (lifecycle: experimental)
create = function() {
super$create()
private$write_object_type_metadata()

# Root SOMA objects include a `dataset_type` entry to allow the
# TileDB Cloud UI to detect that they are SOMA datasets.
if (self$class() == "SOMAExperiment") {
metadata <- list(dataset_type = "soma")
} else {
metadata <- list()
}

private$write_object_type_metadata(metadata)
self
},

Expand Down Expand Up @@ -112,11 +121,13 @@ SOMACollectionBase <- R6::R6Class(
private$soma_type_cache <- self$get_metadata(SOMA_OBJECT_TYPE_METADATA_KEY)
},

write_object_type_metadata = function() {
meta <- list()
meta[[SOMA_OBJECT_TYPE_METADATA_KEY]] <- self$class()
meta[[SOMA_ENCODING_VERSION_METADATA_KEY]] <- SOMA_ENCODING_VERSION
self$set_metadata(meta)
# Add standard SOMA metadata values to the object with the option to include
# additional metadata.
write_object_type_metadata = function(metadata = list()) {
stopifnot(is.list(metadata))
metadata[[SOMA_OBJECT_TYPE_METADATA_KEY]] <- self$class()
metadata[[SOMA_ENCODING_VERSION_METADATA_KEY]] <- SOMA_ENCODING_VERSION
self$set_metadata(metadata)
},

# Instantiate a soma member object.
Expand All @@ -142,6 +153,11 @@ SOMACollectionBase <- R6::R6Class(
internal_use_only = "allowed_use"
)
soma_type <- tiledb_object$get_metadata(SOMA_OBJECT_TYPE_METADATA_KEY)
spdl::debug(
"[SOMACollectionBase] Instantiating {} object at: '{}'",
soma_type %||% "Unknown",
uri
)

soma_constructor <- switch(soma_type,
SOMADataFrame = SOMADataFrame$new,
Expand Down

0 comments on commit f3f200f

Please sign in to comment.