Skip to content

Commit f42a16f

Browse files
authored
[c++/python] Move metadata checks to C++ (#4412)
* Move SOMA type check to constructor for arrays * Add new SOMACollectionBase type with constructor check for groups * Create new class SOMACollectionBase * Use SOMACollectionBase for inheritance separate from SOMACollection * Clean-up PyBind11 inheritance * Move SOMA encoding check to C++ * Remove timestamps from SOMAArray C++ tests Writing/creating an array at a specific timestamp is planned for deprecation. * Remove timestamp tests before metadata write * Apply fixes from code review
1 parent b7ae1f7 commit f42a16f

37 files changed

+683
-689
lines changed

apis/python/src/tiledbsoma/_exception.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
from __future__ import annotations
88

9+
from . import _constants
10+
911

1012
class SOMAError(Exception):
1113
"""Base error type for SOMA-specific exceptions.
@@ -35,6 +37,8 @@ def is_does_not_exist_error(e: Exception) -> bool:
3537
...
3638
raise e
3739
"""
40+
if is_encoding_version_error(e):
41+
return False
3842
stre = str(e)
3943
# Local-disk/S3 does-not-exist exceptions say 'Group does not exist'; TileDB Cloud
4044
# does-not-exist exceptions are worded less clearly.
@@ -48,6 +52,15 @@ def is_does_not_exist_error(e: Exception) -> bool:
4852
)
4953

5054

55+
def is_encoding_version_error(e: Exception) -> bool:
56+
"""Given an Exception, return true if it indicates the object has an unsupported encoding version.
57+
58+
Lifecycle: Experimental.
59+
"""
60+
stre = str(e)
61+
return bool(_constants.SOMA_ENCODING_VERSION_METADATA_KEY in stre or "encoding version" in stre)
62+
63+
5164
class AlreadyExistsError(SOMAError):
5265
"""Raised when attempting to create an already existing SOMA object.
5366

apis/python/src/tiledbsoma/_factory.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,10 @@ def _open_soma_object(
156156
timestamp=(0, timestamp_ms),
157157
clib_type=clib_type,
158158
)
159-
except Exception as tdbe:
159+
except (RuntimeError, SOMAError) as tdbe:
160160
if is_does_not_exist_error(tdbe):
161161
raise DoesNotExistError(tdbe) from tdbe
162-
raise
162+
raise SOMAError(tdbe) from tdbe
163163
try:
164164
cls: type[SOMAObject] = _type_name_to_cls(handle.type.lower())
165165
return cls(

apis/python/src/tiledbsoma/_soma_object.py

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from somacore import options
1414
from typing_extensions import Self
1515

16-
from . import _constants, _tdb_handles
16+
from . import _tdb_handles
1717
from . import pytiledbsoma as clib
1818
from ._exception import DoesNotExistError, SOMAError, is_does_not_exist_error
1919
from ._soma_context import SOMAContext
@@ -137,24 +137,8 @@ def __init__(
137137
self._timestamp_ms = tiledb_timestamp_to_ms(self._handle.timestamp)
138138
self._metadata = _tdb_handles.MetadataWrapper.from_handle(self._handle)
139139
self._close_stack.enter_context(self._handle)
140-
self._check_required_metadata()
141140
self._parse_special_metadata()
142141

143-
def _check_required_metadata(self) -> None:
144-
encoding_version = self._metadata.get(_constants.SOMA_ENCODING_VERSION_METADATA_KEY)
145-
if encoding_version is None:
146-
raise SOMAError(
147-
f"Cannot access stored TileDB object with TileDB-SOMA. The object is missing "
148-
f"the required '{_constants.SOMA_ENCODING_VERSION_METADATA_KEY!r}' metadata key.",
149-
)
150-
if isinstance(encoding_version, bytes):
151-
encoding_version = str(encoding_version, "utf-8")
152-
if encoding_version not in _constants.SUPPORTED_SOMA_ENCODING_VERSIONS:
153-
raise ValueError(
154-
f"Unsupported SOMA object encoding version '{encoding_version}'. TileDB-SOMA "
155-
f"needs to be updated to a more recent version.",
156-
)
157-
158142
def _parse_special_metadata(self) -> None:
159143
"""Helper function the subclasses can override if they require additional validation or set-up."""
160144
return

apis/python/src/tiledbsoma/soma_collection.cc

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,14 @@ using namespace py::literals;
2828
using namespace tiledbsoma;
2929

3030
void load_soma_collection(py::module& m) {
31-
py::class_<SOMACollection, SOMAGroup, SOMAObject>(m, "SOMACollection")
31+
py::class_<SOMACollectionBase, SOMAGroup, SOMAObject>(m, "SOMACollectionBase")
32+
.def(
33+
"__iter__",
34+
[](SOMACollectionBase& collection) { return py::make_iterator(collection.begin(), collection.end()); },
35+
py::keep_alive<0, 1>())
36+
.def("get", &SOMACollectionBase::get);
37+
38+
py::class_<SOMACollection, SOMACollectionBase>(m, "SOMACollection")
3239
.def_static(
3340
"open",
3441
py::overload_cast<
@@ -41,14 +48,9 @@ void load_soma_collection(py::module& m) {
4148
"mode"_a,
4249
"context"_a,
4350
"timestamp"_a = py::none(),
44-
py::call_guard<py::gil_scoped_release>())
45-
.def(
46-
"__iter__",
47-
[](SOMACollection& collection) { return py::make_iterator(collection.begin(), collection.end()); },
48-
py::keep_alive<0, 1>())
49-
.def("get", &SOMACollection::get);
51+
py::call_guard<py::gil_scoped_release>());
5052

51-
py::class_<SOMAExperiment, SOMACollection, SOMAGroup, SOMAObject>(m, "SOMAExperiment")
53+
py::class_<SOMAExperiment, SOMACollectionBase>(m, "SOMAExperiment")
5254
.def_static(
5355
"open",
5456
&SOMAExperiment::open,
@@ -59,7 +61,7 @@ void load_soma_collection(py::module& m) {
5961
"timestamp"_a = py::none(),
6062
py::call_guard<py::gil_scoped_release>());
6163

62-
py::class_<SOMAMeasurement, SOMACollection, SOMAGroup, SOMAObject>(m, "SOMAMeasurement")
64+
py::class_<SOMAMeasurement, SOMACollectionBase>(m, "SOMAMeasurement")
6365
.def_static(
6466
"open",
6567
&SOMAMeasurement::open,
@@ -70,7 +72,7 @@ void load_soma_collection(py::module& m) {
7072
"timestamp"_a = py::none(),
7173
py::call_guard<py::gil_scoped_release>());
7274

73-
py::class_<SOMAScene, SOMACollection, SOMAGroup, SOMAObject>(m, "SOMAScene")
75+
py::class_<SOMAScene, SOMACollectionBase>(m, "SOMAScene")
7476
.def_static(
7577
"create",
7678
[](std::shared_ptr<SOMAContext> ctx,
@@ -111,7 +113,7 @@ void load_soma_collection(py::module& m) {
111113
"timestamp"_a = py::none(),
112114
py::call_guard<py::gil_scoped_release>());
113115

114-
py::class_<SOMAMultiscaleImage, SOMACollection, SOMAGroup, SOMAObject>(m, "SOMAMultiscaleImage")
116+
py::class_<SOMAMultiscaleImage, SOMACollectionBase>(m, "SOMAMultiscaleImage")
115117
.def_static(
116118
"create",
117119
[](std::shared_ptr<SOMAContext> ctx,

apis/python/tests/test_factory.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,7 @@ def tiledb_object_uri(tmp_path, metadata_typename, encoding_version, soma_type):
4141
("SOMACollection", soma.Collection),
4242
("SOMADataFrame", soma.DataFrame),
4343
("SOMADenseNDArray", soma.DenseNDArray),
44-
("SOMADenseNdArray", soma.DenseNDArray),
4544
("SOMASparseNDArray", soma.SparseNDArray),
46-
("SOMASparseNdArray", soma.SparseNDArray),
4745
],
4846
)
4947
@pytest.mark.parametrize("encoding_version", _constants.SUPPORTED_SOMA_ENCODING_VERSIONS)
@@ -100,9 +98,9 @@ def test_factory_unsupported_version(tiledb_object_uri, soma_type: type, tiledb_
10098
"""All of these should raise, as they are encoding formats from the future"""
10199
# TODO: Fix Windows test failures without the following.
102100
sleep(0.01)
103-
with pytest.raises(ValueError):
101+
with pytest.raises(soma.SOMAError):
104102
soma.open(tiledb_object_uri, tiledb_timestamp=tiledb_timestamp)
105-
with pytest.raises(ValueError):
103+
with pytest.raises(soma.SOMAError):
106104
soma_type.open(tiledb_object_uri, tiledb_timestamp=tiledb_timestamp)
107105

108106

apis/r/tests/testthat/test-11-Timestamps.R

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,6 @@ test_that("SOMANDSparseArray", {
9292
res <- snda$read()$tables()$concat()
9393
expect_equal(dim(res), c(60, 3))
9494

95-
## read at t = 1, expect zero rows as read is from (0, 1)
96-
ts3 <- as.POSIXct(1, tz = "UTC", origin = "1970-01-01")
97-
snda <- tiledbsoma::SOMASparseNDArrayOpen(uri, tiledb_timestamp = ts3)
98-
res <- snda$read()$tables()$concat()
99-
expect_equal(dim(res), c(0, 3))
10095
})
10196

10297
test_that("SOMANDDenseArray", {
@@ -118,14 +113,4 @@ test_that("SOMANDDenseArray", {
118113
dnda <- tiledbsoma::SOMADenseNDArrayOpen(uri, tiledb_timestamp = ts2)
119114
res <- dnda$read_arrow_table()
120115
expect_equal(dim(res), c(10, 1))
121-
122-
## read at t = 1, expect zero rows as read is from (0, 1)
123-
## NB that this requires a) nullable arrow schema and b) na.omit() on result
124-
## It also works without a) as the fill value is also NA
125-
ts3 <- as.POSIXct(1, tz = "UTC", origin = "1970-01-01")
126-
dnda <- tiledbsoma::SOMADenseNDArrayOpen(uri, tiledb_timestamp = ts3)
127-
res <- dnda$read_arrow_table()
128-
# print(res$soma_data)
129-
vec <- tibble::as_tibble(res)
130-
expect_equal(dim(na.omit(vec)), c(0, 1))
131116
})

encoding_specification.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ A SOMA Collection is stored as a TileDB group. The group has the following metad
1414

1515
| Metadata key | Datatype | Value | Description | Required |
1616
| :---------------------- | :----------------- | :--------------- | :-------------------- | :------- |
17-
| "soma_datatype" | TILEDB_STRING_UTF8 | "SOMACollection" | SOMA type name | required |
17+
| "soma_object_type" | TILEDB_STRING_UTF8 | "SOMACollection" | SOMA type name | required |
1818
| "soma_encoding_version" | TILEDB_STRING_UTF8 | "1.1.0" | SOMA encoding version | required |
1919

2020
### DataFrame encoding version 1.1.0
@@ -23,7 +23,7 @@ A SOMA DataFrame is stored as a sparse TileDB array. Index columns are stored as
2323

2424
| Metadata key | Datatype | Value | Description | Required |
2525
| :---------------------- | :----------------- | :-------------- | :-------------------- | :------- |
26-
| "soma_datatype" | TILEDB_STRING_UTF8 | "SOMADataFrame" | SOMA type name | required |
26+
| "soma_object_type" | TILEDB_STRING_UTF8 | "SOMADataFrame" | SOMA type name | required |
2727
| "soma_encoding_version" | TILEDB_STRING_UTF8 | "1.1.0" | SOMA encoding version | required |
2828

2929
### DenseNDArray encoding version 1.1.0
@@ -32,7 +32,7 @@ A SOMA DenseNDArray is stored as a dense TileDB array. The array has the followi
3232

3333
| Metadata key | Datatype | Value | Description | Required |
3434
| :---------------------- | :----------------- | :----------------- | :-------------------- | :------- |
35-
| "soma_datatype" | TILEDB_STRING_UTF8 | "SOMADenseNDArray" | SOMA type name | required |
35+
| "soma_object_type" | TILEDB_STRING_UTF8 | "SOMADenseNDArray" | SOMA type name | required |
3636
| "soma_encoding_version" | TILEDB_STRING_UTF8 | "1.1.0" | SOMA encoding version | required |
3737

3838
### Experiment encoding version 1.1.0
@@ -41,7 +41,7 @@ A SOMA Experiment is stored as a TileDB group. The group has the following metad
4141

4242
| Metadata key | Datatype | Value | Description | Required |
4343
| :---------------------- | :----------------- | :--------------- | :-------------------- | :------- |
44-
| "soma_datatype" | TILEDB_STRING_UTF8 | "SOMAExperiment" | SOMA type name | required |
44+
| "soma_object_type" | TILEDB_STRING_UTF8 | "SOMAExperiment" | SOMA type name | required |
4545
| "soma_encoding_version" | TILEDB_STRING_UTF8 | "1.1.0" | SOMA encoding version | required |
4646

4747
### MultiscaleImage encoding version 1.1.0
@@ -50,7 +50,7 @@ A SOMA MultiscaleImage is stored as a TileDB group that contains a SOMA DenseNDA
5050

5151
| Metadata key | Datatype | Value | Description | Required |
5252
| :------------------------------ | :----------------- | :------------------------------------------------ | :------------------------------------------------ | :------- |
53-
| "soma_datatype" | TILEDB_STRING_UTF8 | "SOMAMultiscaleImage" | SOMA type name | required |
53+
| "soma_object_type" | TILEDB_STRING_UTF8 | "SOMAMultiscaleImage" | SOMA type name | required |
5454
| "soma_encoding_version" | TILEDB_STRING_UTF8 | "1.1.0" | general SOMA encoding version | required |
5555
| "soma_spatial_encoding_version" | TILEDB_STRING_UTF8 | "0.2.0" | type-specific SOMA encoding version | required |
5656
| "soma_coordinate_space" | TILEDB_STRING_UTF8 | JSON serialization of the coordinate space | JSON serialization of the coordinate space | required |
@@ -89,7 +89,7 @@ A SOMA Experiment is stored as a TileDB group. The group has the following metad
8989

9090
| Metadata key | Datatype | Value | Description | Required |
9191
| :---------------------- | :----------------- | :---------------- | :-------------------- | :------- |
92-
| "soma_datatype" | TILEDB_STRING_UTF8 | "SOMAMeasurement" | SOMA type name | required |
92+
| "soma_object_type" | TILEDB_STRING_UTF8 | "SOMAMeasurement" | SOMA type name | required |
9393
| "soma_encoding_version" | TILEDB_STRING_UTF8 | "1.1.0" | SOMA encoding version | required |
9494

9595
### PointCloudDataFrame encoding version 1.1.0
@@ -98,7 +98,7 @@ The SOMA PointCloudDataFrame is stored as a sparse TileDB array. Index columns a
9898

9999
| Metadata key | Datatype | Value | Description | Required |
100100
| :------------------------------ | :----------------- | :----------------------------------------- | :------------------------------------------------------------ | :------- |
101-
| "soma_datatype" | TILEDB_STRING_UTF8 | "SOMAPointCloudDataFrame" | SOMA type name | required |
101+
| "soma_object_type" | TILEDB_STRING_UTF8 | "SOMAPointCloudDataFrame" | SOMA type name | required |
102102
| "soma_encoding_version" | TILEDB_STRING_UTF8 | "1.1.0" | general SOMA encoding version | required |
103103
| "soma_spatial_encoding_version" | TILEDB_STRING_UTF8 | "0.2.0" | type-specific SOMA encoding version | required |
104104
| "soma_coordinate_space" | TILEDB_STRING_UTF8 | JSON serialization of the coordinate space | JSON serialization of the coordinate space | required |
@@ -111,7 +111,7 @@ The SOMA Scene is stored as a TileDB group. It has the following group metadata:
111111

112112
| Metadata key | Datatype | Value | Description | Required |
113113
| :------------------------------ | :----------------- | :----------------------------------------- | :----------------------------------------- | :------- |
114-
| "soma_datatype" | TILEDB_STRING_UTF8 | "SOMAMultiscaleImage" | SOMA type name | required |
114+
| "soma_object_type" | TILEDB_STRING_UTF8 | "SOMAMultiscaleImage" | SOMA type name | required |
115115
| "soma_encoding_version" | TILEDB_STRING_UTF8 | "1.1.0" | general SOMA encoding version | required |
116116
| "soma_spatial_encoding_version" | TILEDB_STRING_UTF8 | "0.2.0" | type-specific SOMA encoding version | required |
117117
| "soma_coordinate_space" | TILEDB_STRING_UTF8 | JSON serialization of the coordinate space | JSON serialization of the coordinate space | optional |
@@ -223,7 +223,7 @@ A SOMA SparseNDArray is stored as a sparse TileDB array. The array has the follo
223223

224224
| Metadata key | Datatype | Value | Description | Required |
225225
| :---------------------- | :----------------- | :------------------ | :-------------------- | :------- |
226-
| "soma_datatype" | TILEDB_STRING_UTF8 | "SOMASparseNDArray" | SOMA type name | required |
226+
| "soma_object_type" | TILEDB_STRING_UTF8 | "SOMASparseNDArray" | SOMA type name | required |
227227
| "soma_encoding_version" | TILEDB_STRING_UTF8 | "1.1.0" | SOMA encoding version | required |
228228

229229
### CoordinateSpace serialization encoding version 1.1.0
@@ -261,7 +261,7 @@ A SOMA Collection is stored as a TileDB group. The group has the following metad
261261

262262
| Metadata key | Datatype | Value | Description | Required |
263263
| :---------------------- | :----------------- | :--------------- | :-------------------- | :------- |
264-
| "soma_datatype" | TILEDB_STRING_UTF8 | "SOMACollection" | SOMA type name | required |
264+
| "soma_object_type" | TILEDB_STRING_UTF8 | "SOMACollection" | SOMA type name | required |
265265
| "soma_encoding_version" | TILEDB_STRING_UTF8 | "1" | SOMA encoding version | required |
266266

267267
### DataFrame encoding version 1.0.0
@@ -270,7 +270,7 @@ A SOMA DataFrame is stored as a sparse TileDB array. Index columns are stored as
270270

271271
| Metadata key | Datatype | Value | Description | Required |
272272
| :---------------------- | :----------------- | :-------------- | :-------------------- | :------- |
273-
| "soma_datatype" | TILEDB_STRING_UTF8 | "SOMADataFrame" | SOMA type name | required |
273+
| "soma_object_type" | TILEDB_STRING_UTF8 | "SOMADataFrame" | SOMA type name | required |
274274
| "soma_encoding_version" | TILEDB_STRING_UTF8 | "1" | SOMA encoding version | required |
275275

276276
### DenseNDArray encoding version 1.0.0
@@ -279,7 +279,7 @@ A SOMA DenseNDArray is stored as a dense TileDB array. The array has the followi
279279

280280
| Metadata key | Datatype | Value | Description | Required |
281281
| :---------------------- | :----------------- | :----------------- | :-------------------- | :------- |
282-
| "soma_datatype" | TILEDB_STRING_UTF8 | "SOMADenseNDArray" | SOMA type name | required |
282+
| "soma_object_type" | TILEDB_STRING_UTF8 | "SOMADenseNDArray" | SOMA type name | required |
283283
| "soma_encoding_version" | TILEDB_STRING_UTF8 | "1" | SOMA encoding version | required |
284284

285285
### Experiment encoding version 1.0.0
@@ -288,7 +288,7 @@ A SOMA Experiment is stored as a TileDB group. The group has the following metad
288288

289289
| Metadata key | Datatype | Value | Description | Required |
290290
| :---------------------- | :----------------- | :--------------- | :-------------------- | :------- |
291-
| "soma_datatype" | TILEDB_STRING_UTF8 | "SOMAExperiment" | SOMA type name | required |
291+
| "soma_object_type" | TILEDB_STRING_UTF8 | "SOMAExperiment" | SOMA type name | required |
292292
| "soma_encoding_version" | TILEDB_STRING_UTF8 | "1" | SOMA encoding version | required |
293293

294294
### Measurement encoding version 1.0.0
@@ -297,7 +297,7 @@ A SOMA Experiment is stored as a TileDB group. The group has the following metad
297297

298298
| Metadata key | Datatype | Value | Description | Required |
299299
| :---------------------- | :----------------- | :---------------- | :-------------------- | :------- |
300-
| "soma_datatype" | TILEDB_STRING_UTF8 | "SOMAMeasurement" | SOMA type name | required |
300+
| "soma_object_type" | TILEDB_STRING_UTF8 | "SOMAMeasurement" | SOMA type name | required |
301301
| "soma_encoding_version" | TILEDB_STRING_UTF8 | "1" | SOMA encoding version | required |
302302

303303
### SparseNDArray encoding version 1.0.0
@@ -306,5 +306,5 @@ A SOMA SparseNDArray is stored as a sparse TileDB array. The array has the follo
306306

307307
| Metadata key | Datatype | Value | Description | Required |
308308
| :---------------------- | :----------------- | :------------------ | :-------------------- | :------- |
309-
| "soma_datatype" | TILEDB_STRING_UTF8 | "SOMASparseNDArray" | SOMA type name | required |
309+
| "soma_object_type" | TILEDB_STRING_UTF8 | "SOMASparseNDArray" | SOMA type name | required |
310310
| "soma_encoding_version" | TILEDB_STRING_UTF8 | "1" | SOMA encoding version | required |

libtiledbsoma/src/CMakeLists.txt

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ add_library(TILEDB_SOMA_OBJECTS OBJECT
8686
${CMAKE_CURRENT_SOURCE_DIR}/soma/soma_attribute.cc
8787
${CMAKE_CURRENT_SOURCE_DIR}/soma/soma_dimension.cc
8888
${CMAKE_CURRENT_SOURCE_DIR}/soma/soma_geometry_column.cc
89+
${CMAKE_CURRENT_SOURCE_DIR}/soma/soma_collection_base.cc
8990
${CMAKE_CURRENT_SOURCE_DIR}/soma/soma_collection.cc
9091
${CMAKE_CURRENT_SOURCE_DIR}/soma/soma_experiment.cc
9192
${CMAKE_CURRENT_SOURCE_DIR}/soma/soma_measurement.cc
@@ -233,27 +234,6 @@ else()
233234
)
234235
endif()
235236

236-
# Install header files
237-
# target_sources FILE_SET is preferred with cmake>=3.23
238-
# TODO Uncomment after finishing Python and R bindings
239-
# set(TILEDB_SOMA_PUBLIC_HEADERS
240-
# ${CMAKE_CURRENT_SOURCE_DIR}/cpp_api/tiledbsoma
241-
# ${CMAKE_CURRENT_SOURCE_DIR}/cpp_api/soma_collection.h
242-
# ${CMAKE_CURRENT_SOURCE_DIR}/cpp_api/soma_dataframe.h
243-
# ${CMAKE_CURRENT_SOURCE_DIR}/cpp_api/soma_dense_ndarray.h
244-
# ${CMAKE_CURRENT_SOURCE_DIR}/cpp_api/soma_experiment.h
245-
# ${CMAKE_CURRENT_SOURCE_DIR}/cpp_api/soma_measurement.h
246-
# ${CMAKE_CURRENT_SOURCE_DIR}/cpp_api/soma_scene.h
247-
# ${CMAKE_CURRENT_SOURCE_DIR}/cpp_api/soma_coordinates.h
248-
# ${CMAKE_CURRENT_SOURCE_DIR}/cpp_api/soma_geometry_dataframe.h
249-
# ${CMAKE_CURRENT_SOURCE_DIR}/cpp_api/soma_point_cloud_dataframe.h
250-
# ${CMAKE_CURRENT_SOURCE_DIR}/cpp_api/soma_multiscale_image.h
251-
# ${CMAKE_CURRENT_SOURCE_DIR}/cpp_api/soma_object.h
252-
# ${CMAKE_CURRENT_SOURCE_DIR}/cpp_api/soma_factory.h
253-
# ${CMAKE_CURRENT_SOURCE_DIR}/cpp_api/soma_sparse_ndarray.h
254-
# ${CMAKE_CURRENT_SOURCE_DIR}/cpp_api/logger_public.h
255-
# )
256-
257237
install(FILES
258238
${CMAKE_CURRENT_SOURCE_DIR}/soma/enums.h
259239
${CMAKE_CURRENT_SOURCE_DIR}/soma/soma_context.h
@@ -265,6 +245,7 @@ install(FILES
265245
${CMAKE_CURRENT_SOURCE_DIR}/soma/soma_attribute.h
266246
${CMAKE_CURRENT_SOURCE_DIR}/soma/soma_dimension.h
267247
${CMAKE_CURRENT_SOURCE_DIR}/soma/soma_geometry_column.h
248+
${CMAKE_CURRENT_SOURCE_DIR}/soma/soma_collection_base.h
268249
${CMAKE_CURRENT_SOURCE_DIR}/soma/soma_collection.h
269250
${CMAKE_CURRENT_SOURCE_DIR}/soma/soma_dataframe.h
270251
${CMAKE_CURRENT_SOURCE_DIR}/soma/soma_dense_ndarray.h

0 commit comments

Comments
 (0)