From 0d7e87f98fabd5a6496d368cbf7c272f320a1ef3 Mon Sep 17 00:00:00 2001 From: Noa Dove Date: Sat, 16 May 2026 16:05:37 -0700 Subject: [PATCH 1/8] Switch query service to new attrs API --- src/azul/service/query_service.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/azul/service/query_service.py b/src/azul/service/query_service.py index e94b6f4c57..dca7cc24a2 100644 --- a/src/azul/service/query_service.py +++ b/src/azul/service/query_service.py @@ -20,7 +20,7 @@ Self, ) -import attr +import attrs from furl import ( furl, ) @@ -136,7 +136,7 @@ def process_response(self, response: R1) -> R2: raise NotImplementedError -@attr.s(frozen=True, auto_attribs=True, kw_only=True) +@attrs.frozen(kw_only=True) class OpenSearchChain[R0, R1, R2](OpenSearchStage[R0, R2]): """ The result of wrapping a stage or chain in another stage. @@ -167,7 +167,7 @@ def stages(self) -> Iterable[OpenSearchStage]: yield self.inner -@attr.s(frozen=True, auto_attribs=True, kw_only=True) +@attrs.frozen(kw_only=True) class _OpenSearchStage[R1, R2](OpenSearchStage[R1, R2], metaclass=ABCMeta): """ A base implementation of a stage. @@ -187,7 +187,7 @@ def wrap[R0](self, other: OpenSearchStage[R0, R1]) -> OpenSearchChain[R0, R1, R2 TranslatedFilters = Mapping[FieldPath, Mapping[str, Sequence[PrimitiveJSON]]] -@attr.s(frozen=True, auto_attribs=True, kw_only=True) +@attrs.frozen(kw_only=True) class FilterStage(_OpenSearchStage[Response, Response]): """ Converts the given filters to an OpenSearch query and adds that query as @@ -290,7 +290,7 @@ def prepare_query(self, skip_field_paths: tuple[FieldPath] = ()) -> Query: return Q('bool', must=query_list) -@attr.s(frozen=True, auto_attribs=True, kw_only=True) +@attrs.frozen(kw_only=True) class AggregationStage(_OpenSearchStage[MutableJSON, MutableJSON]): """ Cooperate with the given filter stage to augment the request with an @@ -520,7 +520,7 @@ def _populate_accessible(self, aggs: MutableJSON) -> None: aggs[special_fields.accessible.name] = agg -@attr.s(frozen=True, auto_attribs=True, kw_only=True) +@attrs.frozen(kw_only=True) class SlicingStage(_OpenSearchStage[Response, Response]): """ Augments the request with a document slice (known as a *source filter* in @@ -549,7 +549,7 @@ def _prepared_slice(self) -> DocumentSlice | None: # FIXME: Elminate Eliminate reliance on Elasticsearch DSL # https://github.com/DataBiosphere/azul/issues/4111 -@attr.s(frozen=True, auto_attribs=True, kw_only=True) +@attrs.frozen(kw_only=True) class ToDictStage(_OpenSearchStage[Response, MutableJSON]): def prepare_request(self, request: Search) -> Search: @@ -576,7 +576,7 @@ def sort_key_to_json(s: SortKey) -> AnyJSON: return list(s) -@attr.s(auto_attribs=True, kw_only=True, frozen=True) +@attrs.frozen(kw_only=True) class Pagination: order: str size: int @@ -589,9 +589,9 @@ def advance(self, search_before: SortKey | None, search_after: SortKey | None ) -> Self: - return attr.evolve(self, - search_before=search_before, - search_after=search_after) + return attrs.evolve(self, + search_before=search_before, + search_after=search_after) def link(self, *, previous: bool, **params: str) -> furl | None: """ @@ -620,7 +620,7 @@ class ResponsePagination(JSONTypedDict): ResponseTriple = tuple[JSONs, ResponsePagination, JSON] -@attr.s(frozen=True, auto_attribs=True, kw_only=True) +@attrs.frozen(kw_only=True) class PaginationStage(_OpenSearchStage[JSON, ResponseTriple]): """ Handles the pagination of search results From af8fbd6acf0b6ce3ff574931396f513fbff0759d Mon Sep 17 00:00:00 2001 From: Noa Dove Date: Wed, 20 May 2026 22:56:28 -0700 Subject: [PATCH 2/8] Add FIXMEs (#8042) --- src/azul/service/index_service.py | 4 ++++ src/azul/service/manifest_service.py | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/azul/service/index_service.py b/src/azul/service/index_service.py index dda3c73869..6f9a747a4d 100644 --- a/src/azul/service/index_service.py +++ b/src/azul/service/index_service.py @@ -83,6 +83,8 @@ def prepare_request(self, request: Search) -> Search: return request def _file_url(self, *, uuid: str, version: str, drs_uri: str | None) -> str | None: + # FIXME: Redundant implementations of file URLs and mirror URIs + # https://github.com/DataBiosphere/azul/issues/8042 if drs_uri is None: # To download a file we need its DRS URI return None @@ -93,6 +95,8 @@ def _file_url(self, *, uuid: str, version: str, drs_uri: str | None) -> str | No version=version)) def _file_mirror_uri(self, source: SourceRef, file: JSON) -> str | None: + # FIXME: Redundant implementations of file URLs and mirror URIs + # https://github.com/DataBiosphere/azul/issues/8042 file_cls = self.plugin.file_class mirror_service = MirrorService.for_catalog(self.catalog) return mirror_service.mirror_uri(source, file_cls, file) diff --git a/src/azul/service/manifest_service.py b/src/azul/service/manifest_service.py index 689f6a017b..fdcadf54bf 100644 --- a/src/azul/service/manifest_service.py +++ b/src/azul/service/manifest_service.py @@ -1139,6 +1139,8 @@ def _azul_file_url(self, file: JSON, args: Mapping = frozendict() ) -> str | None: + # FIXME: Redundant implementations of file URLs and mirror URIs + # https://github.com/DataBiosphere/azul/issues/8042 if file['drs_uri'] is None: # To download a file we need its DRS URI return None @@ -1151,6 +1153,8 @@ def _azul_file_url(self, **args)) def _azul_mirror_uri(self, source: SourceRef, file: JSON) -> str | None: + # FIXME: Redundant implementations of file URLs and mirror URIs + # https://github.com/DataBiosphere/azul/issues/8042 file_cls = self.metadata_plugin.file_class return self.mirror_service.mirror_uri(source, file_cls, file) From c11d557a1188b0af6120442125a89a3a9d123229 Mon Sep 17 00:00:00 2001 From: Noa Dove Date: Thu, 28 May 2026 20:59:28 -0700 Subject: [PATCH 3/8] Qualify test class name --- test/service/test_response.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/service/test_response.py b/test/service/test_response.py index 8c584eec43..ab4c19f1f0 100644 --- a/test/service/test_response.py +++ b/test/service/test_response.py @@ -3832,7 +3832,7 @@ def test(self): }, response.json()) -class TestResponseWithDCP2Cans(DCP2CannedBundleTestCase, WebServiceTestCase): +class TestResponseWithHCADCP2Cans(DCP2CannedBundleTestCase, WebServiceTestCase): @classmethod def setUpClass(cls): From 1a36fc2a6a2ae2dcbe6a5a3e537420a665cf41ae Mon Sep 17 00:00:00 2001 From: Noa Dove Date: Mon, 18 May 2026 18:49:36 -0700 Subject: [PATCH 4/8] Extract test superclass --- test/service/test_response.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/test/service/test_response.py b/test/service/test_response.py index ab4c19f1f0..3c3b051e05 100644 --- a/test/service/test_response.py +++ b/test/service/test_response.py @@ -3832,7 +3832,7 @@ def test(self): }, response.json()) -class TestResponseWithHCADCP2Cans(DCP2CannedBundleTestCase, WebServiceTestCase): +class DCP2ResponseTestCase(DCP2CannedBundleTestCase, WebServiceTestCase): @classmethod def setUpClass(cls): @@ -3844,6 +3844,15 @@ def tearDownClass(cls): cls._teardown_indices() super().tearDownClass() + def get_file(self, entry_id: str) -> JSON: + url = self.base_url.set(path=('index', 'files', entry_id)) + response = self._http_client.request('GET', str(url)) + raise_on_status(response) + return one(response.json()['files']) + + +class TestResponseWithHCADCP2Cans(DCP2ResponseTestCase): + @classmethod def bundles(cls) -> list[SourcedBundleFQID]: return [ @@ -3870,12 +3879,6 @@ def test_tdr_sources(self): prefix=Prefix.parse(source[prefix_field])) self.assertEqual(self.source.ref, source) - def get_file(self, entry_id: str) -> JSON: - url = self.base_url.set(path=('index', 'files', entry_id)) - response = self._http_client.request('GET', str(url)) - raise_on_status(response) - return one(response.json()['files']) - def test_file_urls(self): with self.subTest(phantom=False): file = self.get_file('507d2814-1688-54e7-b73e-2f831aa34368') From bd2c124ce055939d3afdfb3af37acd463ab52a63 Mon Sep 17 00:00:00 2001 From: Noa Dove Date: Wed, 27 May 2026 21:00:13 -0700 Subject: [PATCH 5/8] Extract private method --- test/azul_test_case.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/test/azul_test_case.py b/test/azul_test_case.py index 249e1433fa..f48bb793ae 100644 --- a/test/azul_test_case.py +++ b/test/azul_test_case.py @@ -19,6 +19,7 @@ from typing import ( Callable, Iterable, + Mapping, Optional, ) from unittest import ( @@ -63,6 +64,9 @@ from azul.indexer.mirror_service import ( MirrorService, ) +from azul.lib.types import ( + JSON, +) from azul.logging import ( configure_test_logging, get_test_logger, @@ -542,6 +546,13 @@ def _patch_source_cache(cls): ) cls.addClassPatch(patch_source_cache(hit=[cls.source.ref.id])) + @classmethod + def _source_config(cls) -> Mapping[str, JSON]: + return { + str(source.ref.spec): source.config.to_json() + for source in cls._sources() + } + class DCP2TestCase(TDRTestCase): source = Source( @@ -555,10 +566,6 @@ class DCP2TestCase(TDRTestCase): @classmethod def catalog_config(cls) -> dict[CatalogName, Config.Catalog]: - sources = { - str(source.ref.spec): source.config.to_json() - for source in cls._sources() - } return { cls.catalog: config.Catalog(name=cls.catalog, atlas='hca', @@ -566,7 +573,7 @@ def catalog_config(cls) -> dict[CatalogName, Config.Catalog]: mirror_limit=None, plugins=dict(metadata=config.Catalog.Plugin(name='hca'), repository=config.Catalog.Plugin(name='tdr_hca')), - sources=sources) + sources=cls._source_config()) } @@ -582,7 +589,6 @@ class AnvilTestCase(TDRTestCase): @classmethod def catalog_config(cls) -> dict[CatalogName, Config.Catalog]: - sources = {str(cls.source.ref.spec): cls.source.config.to_json()} return { cls.catalog: config.Catalog(name=cls.catalog, atlas='anvil', @@ -590,7 +596,7 @@ def catalog_config(cls) -> dict[CatalogName, Config.Catalog]: mirror_limit=None, plugins=dict(metadata=config.Catalog.Plugin(name='anvil'), repository=config.Catalog.Plugin(name='tdr_anvil')), - sources=sources) + sources=cls._source_config()) } From 86eaae28a119f699f741a8af1f49f85a2c0a9cc4 Mon Sep 17 00:00:00 2001 From: Noa Dove Date: Wed, 27 May 2026 21:03:21 -0700 Subject: [PATCH 6/8] [p 1/2] Fix: curl manifest futilely includes external LungMAP files (#8027) --- test/azul_test_case.py | 25 + ...4-dbba-33e6-9e40-6a9b3fe8585f.tdr.hca.json | 1572 +++++++++++++++++ test/service/test_response.py | 30 + 3 files changed, 1627 insertions(+) create mode 100644 test/indexer/data/1928ae54-dbba-33e6-9e40-6a9b3fe8585f.tdr.hca.json diff --git a/test/azul_test_case.py b/test/azul_test_case.py index f48bb793ae..f76e359104 100644 --- a/test/azul_test_case.py +++ b/test/azul_test_case.py @@ -577,6 +577,31 @@ def catalog_config(cls) -> dict[CatalogName, Config.Catalog]: } +class LungmapTestCase(TDRTestCase): + source_spec = ('tdr:bigquery:gcp:datarepo-dev-5d9526e0:' + 'lungmap_dev_1bdcecde16be420888f478cd2133d11d__20220401_20220404') + source = Source( + config=SourceConfig(mirror=False), + ref=TDRSourceRef( + id='96c6482b-7949-4d6e-894b-371149e85134', + spec=TDRSourceSpec.parse(source_spec), + prefix=Prefix.of_everything + ) + ) + + @classmethod + def catalog_config(cls) -> dict[CatalogName, Config.Catalog]: + return { + cls.catalog: config.Catalog(name=cls.catalog, + atlas='lungmap', + internal=False, + mirror_limit=-1, + plugins=dict(metadata=config.Catalog.Plugin(name='hca'), + repository=config.Catalog.Plugin(name='tdr_hca')), + sources=cls._source_config()) + } + + class AnvilTestCase(TDRTestCase): source = Source( config=SourceConfig(mirror=True), diff --git a/test/indexer/data/1928ae54-dbba-33e6-9e40-6a9b3fe8585f.tdr.hca.json b/test/indexer/data/1928ae54-dbba-33e6-9e40-6a9b3fe8585f.tdr.hca.json new file mode 100644 index 0000000000..9787792dea --- /dev/null +++ b/test/indexer/data/1928ae54-dbba-33e6-9e40-6a9b3fe8585f.tdr.hca.json @@ -0,0 +1,1572 @@ +{ + "manifest": { + "sequence_file/002ebcd6-722d-434d-b21b-13a06e659a67": { + "uuid": "002ebcd6-722d-434d-b21b-13a06e659a67", + "name": "ACD3_snRNA_S33_L001_R2_001.fastq.gz", + "version": "2025-01-07T21:14:38.055401Z", + "drs_uri": "drs://dg.4503:696f302b-ecd9-4bcc-a750-56c22b496f02", + "size": 4845312460, + "sha256": "d9440b3d1d7dbaa98b93fa6e8686f0334fcc271e4621a77b75cdab3dde46b110", + "crc32c": "808a4ad6", + "sha1": null, + "s3_etag": null, + "content-type": ".gz", + "indexed": false + }, + "sequence_file/563ab2c6-6a71-474b-859b-206cb49ad5e3": { + "uuid": "563ab2c6-6a71-474b-859b-206cb49ad5e3", + "name": "ACD1_snATAC.demultiplexed.R1.fastq.gz", + "version": "2025-01-07T21:14:38.102511Z", + "drs_uri": "drs://dg.4503:d184f3fb-4544-4ba8-850f-3ce366e28901", + "size": 15144424495, + "sha256": "90e585e99ac28ef24cb5feae76e981abbf61b983048252adf5b3ee338d48f028", + "crc32c": "e32d7982", + "sha1": null, + "s3_etag": null, + "content-type": ".gz", + "indexed": false + }, + "sequence_file/9c41c821-ebb1-49c7-9fbf-f76000fd2a39": { + "uuid": "9c41c821-ebb1-49c7-9fbf-f76000fd2a39", + "name": "ACD4_Multiome_RNA_S4_L001_R1_001.fastq.gz", + "version": "2025-01-07T21:14:38.463212Z", + "drs_uri": "drs://dg.4503:3872df96-cfbb-48fd-b5d6-19307dc302d1", + "size": 4698100692, + "sha256": "337ee1ec1dc7ffcc0c1f03c6f3c2f83768474cdf38b05286efe2c0661749e90c", + "crc32c": "d6e430a7", + "sha1": null, + "s3_etag": null, + "content-type": ".gz", + "indexed": false + }, + "analysis_file/005f71ed-fcba-4026-bc97-a8c9707f26ee": { + "uuid": "005f71ed-fcba-4026-bc97-a8c9707f26ee", + "name": "ACD2_snATAC_barcodes.tsv.gz", + "version": "2023-10-31T16:42:42.419707Z", + "drs_uri": "drs://jade.datarepo-dev.broadinstitute.org/v2_85c93a64-a9d0-4331-ad36-53a6498e57fc", + "size": 189802, + "sha256": "18e814695d3d05b73895119d534104ce79b8efad8e1a7a5f257aa8fc1154b1ff", + "crc32c": "421fb97c", + "sha1": null, + "s3_etag": null, + "content-type": "application/x-gzip", + "indexed": false + }, + "analysis_file/2f62e136-c6ab-483d-a172-e06e288e706a": { + "uuid": "2f62e136-c6ab-483d-a172-e06e288e706a", + "name": "ACD2_snRNA_filtered_feature_bc_matrix.h5", + "version": "2023-10-31T19:24:27.330500Z", + "drs_uri": "drs://jade.datarepo-dev.broadinstitute.org/v2_cd90c770-0be8-4032-b2fb-e27b9920d597", + "size": 32215589, + "sha256": "0b2caff39994274cf22f5b1951720895578acc975ddf2dff7816c1e1ee159899", + "crc32c": "251a8c8b", + "sha1": null, + "s3_etag": null, + "content-type": "application/octet-stream", + "indexed": false + }, + "analysis_file/74070236-1a1b-4bbe-bb56-08ac6bc7f96f": { + "uuid": "74070236-1a1b-4bbe-bb56-08ac6bc7f96f", + "name": "ACD3_snATAC_barcodes.tsv.gz", + "version": "2023-10-31T16:42:42.404063Z", + "drs_uri": "drs://jade.datarepo-dev.broadinstitute.org/v2_64e708cb-76a6-447a-8459-57bf4254d7cc", + "size": 236750, + "sha256": "d47addd264d62eb5cd3d93d3b1b2b9c3aba0b76506377f50ee60168a7a2ca250", + "crc32c": "e13bb9ff", + "sha1": null, + "s3_etag": null, + "content-type": "application/x-gzip", + "indexed": false + } + }, + "metadata": { + "sequence_file/002ebcd6-722d-434d-b21b-13a06e659a67": { + "describedBy": "https://schema.humancellatlas.org/type/file/9.3.0/sequence_file", + "file_core": { + "checksum": "cf9bfa79726cea64ce6dd108d1ea9ada", + "describedBy": "https://schema.humancellatlas.org/core/file/6.2.0/file_core", + "file_name": "ACD3_snRNA_S33_L001_R2_001.fastq.gz", + "file_source": "LungMAP", + "format": "fastq.gz" + }, + "lane_index": 1, + "library_prep_id": "ACD3_snRNA_S33", + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "002ebcd6-722d-434d-b21b-13a06e659a67", + "submission_date": "2022-11-14T15:49:13.374432Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2025-01-07T21:14:38.055401Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "read_index": "read2", + "schema_type": "file", + "schema_version": "9.3.0" + }, + "sequence_file/563ab2c6-6a71-474b-859b-206cb49ad5e3": { + "describedBy": "https://schema.humancellatlas.org/type/file/9.3.0/sequence_file", + "file_core": { + "checksum": "368eb50aa056bcc37aaca065f3021494", + "describedBy": "https://schema.humancellatlas.org/core/file/6.2.0/file_core", + "file_name": "ACD1_snATAC.demultiplexed.R1.fastq.gz", + "file_source": "LungMAP", + "format": "fastq.gz" + }, + "lane_index": 1, + "library_prep_id": "ACD1_snATAC", + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "563ab2c6-6a71-474b-859b-206cb49ad5e3", + "submission_date": "2022-11-14T15:43:50.799759Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2025-01-07T21:14:38.102511Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "read_index": "read1", + "schema_type": "file", + "schema_version": "9.3.0" + }, + "sequence_file/9c41c821-ebb1-49c7-9fbf-f76000fd2a39": { + "describedBy": "https://schema.humancellatlas.org/type/file/9.3.0/sequence_file", + "file_core": { + "checksum": "374070d742f5e8f61860aa91e8d43695", + "describedBy": "https://schema.humancellatlas.org/core/file/6.2.0/file_core", + "file_name": "ACD4_Multiome_RNA_S4_L001_R1_001.fastq.gz", + "file_source": "LungMAP", + "format": "fastq.gz" + }, + "lane_index": 1, + "library_prep_id": "ACD4_Multiome_S4_RNA", + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "9c41c821-ebb1-49c7-9fbf-f76000fd2a39", + "submission_date": "2022-11-14T15:46:24.851947Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2025-01-07T21:14:38.463212Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "read_index": "read1", + "schema_type": "file", + "schema_version": "9.3.0" + }, + "analysis_file/005f71ed-fcba-4026-bc97-a8c9707f26ee": { + "describedBy": "https://schema.humancellatlas.org/type/file/6.3.0/analysis_file", + "file_core": { + "checksum": "ee79675cefde50c47ab7d669faee69a3", + "describedBy": "https://schema.humancellatlas.org/core/file/6.2.0/file_core", + "file_name": "ACD2_snATAC_barcodes.tsv.gz", + "file_source": "LungMAP", + "format": "tsv.gz", + "schema_version": "6.2.0" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "005f71ed-fcba-4026-bc97-a8c9707f26ee", + "schema_major_version": 1, + "schema_minor_version": 1, + "schema_version": "1.1.0", + "submission_date": "2023-08-21T18:58:33.340386Z", + "submitter_id": "Shuyang.Zhao@cchmc.org", + "update_date": "2023-10-31T16:42:42.419707Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "file", + "schema_version": "6.3.0" + }, + "analysis_file/2f62e136-c6ab-483d-a172-e06e288e706a": { + "describedBy": "https://schema.humancellatlas.org/type/file/6.3.0/analysis_file", + "file_core": { + "checksum": "60fb52c05f09b17c1a79b0aee457a913", + "describedBy": "https://schema.humancellatlas.org/core/file/6.2.0/file_core", + "file_name": "ACD2_snRNA_filtered_feature_bc_matrix.h5", + "file_source": "LungMAP", + "format": "h5", + "schema_version": "6.2.0" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "2f62e136-c6ab-483d-a172-e06e288e706a", + "schema_major_version": 1, + "schema_minor_version": 1, + "schema_version": "1.1.0", + "submission_date": "2023-08-21T18:58:54.570982Z", + "submitter_id": "Shuyang.Zhao@cchmc.org", + "update_date": "2023-10-31T19:24:27.330500Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "file", + "schema_version": "6.3.0" + }, + "analysis_file/74070236-1a1b-4bbe-bb56-08ac6bc7f96f": { + "describedBy": "https://schema.humancellatlas.org/type/file/6.3.0/analysis_file", + "file_core": { + "checksum": "e6118c625dd2cefec7e571c6913e1e38", + "describedBy": "https://schema.humancellatlas.org/core/file/6.2.0/file_core", + "file_name": "ACD3_snATAC_barcodes.tsv.gz", + "file_source": "LungMAP", + "format": "tsv.gz", + "schema_version": "6.2.0" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "74070236-1a1b-4bbe-bb56-08ac6bc7f96f", + "schema_major_version": 1, + "schema_minor_version": 1, + "schema_version": "1.1.0", + "submission_date": "2023-08-21T18:59:18.551852Z", + "submitter_id": "Shuyang.Zhao@cchmc.org", + "update_date": "2023-10-31T16:42:42.404063Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "file", + "schema_version": "6.3.0" + }, + "cell_suspension/0c422f39-b2b1-4cf9-9096-b48517c72191": { + "biomaterial_core": { + "biomaterial_id": "0c422f39-b2b1-4cf9-9096-b48517c72191", + "biomaterial_name": "ACD5 Cells", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [ + 9606 + ] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/13.3.0/cell_suspension", + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "0c422f39-b2b1-4cf9-9096-b48517c72191", + "submission_date": "2022-11-15T21:33:40.760875Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2022-12-15T12:39:12.341323Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial" + }, + "cell_suspension/22433fb5-60b1-4a35-80ac-189fd2b26850": { + "biomaterial_core": { + "biomaterial_id": "22433fb5-60b1-4a35-80ac-189fd2b26850", + "biomaterial_name": "ACD2 Cells (snATAC)", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [ + 9606 + ] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/13.3.0/cell_suspension", + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "22433fb5-60b1-4a35-80ac-189fd2b26850", + "submission_date": "2022-11-15T21:29:46.551786Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2022-12-15T12:57:31.578442Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial" + }, + "cell_suspension/48771554-42be-4151-9303-3189ddd66260": { + "biomaterial_core": { + "biomaterial_id": "48771554-42be-4151-9303-3189ddd66260", + "biomaterial_name": "ACD4 Cells", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [ + 9606 + ] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/13.3.0/cell_suspension", + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "48771554-42be-4151-9303-3189ddd66260", + "submission_date": "2022-11-15T21:31:24.458000Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2022-12-15T12:39:12.338347Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial" + }, + "cell_suspension/6f3291e6-d60c-475b-ae6b-661b25fc41de": { + "biomaterial_core": { + "biomaterial_id": "6f3291e6-d60c-475b-ae6b-661b25fc41de", + "biomaterial_name": "ACD3 Cells (snATAC)", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [ + 9606 + ] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/13.3.0/cell_suspension", + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "6f3291e6-d60c-475b-ae6b-661b25fc41de", + "submission_date": "2022-11-15T21:30:07.666008Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2022-12-15T12:57:31.580702Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial" + }, + "cell_suspension/736e10c0-85db-4f18-a7e1-f7eaa6cb6372": { + "biomaterial_core": { + "biomaterial_id": "736e10c0-85db-4f18-a7e1-f7eaa6cb6372", + "biomaterial_name": "ACD1 Cells (snRNA)", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [ + 9606 + ] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/13.3.0/cell_suspension", + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "736e10c0-85db-4f18-a7e1-f7eaa6cb6372", + "submission_date": "2022-12-15T12:57:09.142805Z", + "submitter_id": "josh.fortriede.cchmc@lungmap.net", + "update_date": "2022-12-15T12:57:31.582812Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial" + }, + "cell_suspension/877b6440-7d77-4b58-9f44-e2cad80ada6d": { + "biomaterial_core": { + "biomaterial_id": "877b6440-7d77-4b58-9f44-e2cad80ada6d", + "biomaterial_name": "ACD1 Cells (snATAC)", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [ + 9606 + ] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/13.3.0/cell_suspension", + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "877b6440-7d77-4b58-9f44-e2cad80ada6d", + "submission_date": "2022-11-15T21:29:30.716679Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2022-12-15T12:57:31.573556Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial" + }, + "cell_suspension/c2feb442-7900-4e62-baea-7974593a679e": { + "biomaterial_core": { + "biomaterial_id": "c2feb442-7900-4e62-baea-7974593a679e", + "biomaterial_name": "ACD3 Cells (snRNA)", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [ + 9606 + ] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/13.3.0/cell_suspension", + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "c2feb442-7900-4e62-baea-7974593a679e", + "submission_date": "2022-12-15T12:57:16.013546Z", + "submitter_id": "josh.fortriede.cchmc@lungmap.net", + "update_date": "2022-12-15T12:57:31.568022Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial" + }, + "cell_suspension/e08b4629-6e99-4e08-a80a-dd38bdb73ae6": { + "biomaterial_core": { + "biomaterial_id": "e08b4629-6e99-4e08-a80a-dd38bdb73ae6", + "biomaterial_name": "ACD2 Cells (snRNA)", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [ + 9606 + ] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/13.3.0/cell_suspension", + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "e08b4629-6e99-4e08-a80a-dd38bdb73ae6", + "submission_date": "2022-12-15T12:57:12.415811Z", + "submitter_id": "josh.fortriede.cchmc@lungmap.net", + "update_date": "2022-12-15T12:57:31.584997Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial" + }, + "process/1a4f34f2-bb3a-45c5-b7b1-a3d0bbe79e54": { + "describedBy": "https://schema.humancellatlas.org/type/process/9.2.0/process", + "process_core": { + "describedBy": "https://schema.humancellatlas.org/core/process/10.0.0/process_core", + "process_id": "1a4f34f2-bb3a-45c5-b7b1-a3d0bbe79e54" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "1a4f34f2-bb3a-45c5-b7b1-a3d0bbe79e54", + "submission_date": "2022-11-15T21:38:24.490934Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2022-11-15T21:38:24.490934Z", + "updater_id": "Shuyang.Zhao.cchmc@lungmap.net" + }, + "schema_type": "process" + }, + "process/39bbd553-237d-43d1-bd9c-b17525b7d9ce": { + "describedBy": "https://schema.humancellatlas.org/type/process/9.2.0/process", + "process_core": { + "describedBy": "https://schema.humancellatlas.org/core/process/10.0.0/process_core", + "process_id": "39bbd553-237d-43d1-bd9c-b17525b7d9ce" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "39bbd553-237d-43d1-bd9c-b17525b7d9ce", + "submission_date": "2022-11-15T21:38:24.426670Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2022-11-15T21:38:24.426670Z", + "updater_id": "Shuyang.Zhao.cchmc@lungmap.net" + }, + "schema_type": "process" + }, + "process/53d7ef73-9885-4d3e-9a53-3d3d5cb84fa2": { + "describedBy": "https://schema.humancellatlas.org/type/process/9.2.0/process", + "process_core": { + "describedBy": "https://schema.humancellatlas.org/core/process/10.0.0/process_core", + "process_id": "53d7ef73-9885-4d3e-9a53-3d3d5cb84fa2" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "53d7ef73-9885-4d3e-9a53-3d3d5cb84fa2", + "submission_date": "2022-12-15T12:34:55.729768Z", + "submitter_id": "josh.fortriede.cchmc@lungmap.net", + "update_date": "2022-12-15T12:34:55.729768Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "process" + }, + "process/5adec5c1-db34-48c7-8965-0eeec5ba95fb": { + "describedBy": "https://schema.humancellatlas.org/type/process/9.2.0/process", + "process_core": { + "describedBy": "https://schema.humancellatlas.org/core/process/10.0.0/process_core", + "process_id": "5adec5c1-db34-48c7-8965-0eeec5ba95fb" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "5adec5c1-db34-48c7-8965-0eeec5ba95fb", + "submission_date": "2022-12-15T12:34:55.706203Z", + "submitter_id": "josh.fortriede.cchmc@lungmap.net", + "update_date": "2022-12-15T12:34:55.706203Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "process" + }, + "process/63f5d0eb-cb89-4f58-ab60-23fb51690747": { + "describedBy": "https://schema.humancellatlas.org/type/process/9.2.0/process", + "process_core": { + "describedBy": "https://schema.humancellatlas.org/core/process/10.0.0/process_core", + "process_id": "63f5d0eb-cb89-4f58-ab60-23fb51690747" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "63f5d0eb-cb89-4f58-ab60-23fb51690747", + "submission_date": "2022-11-15T21:38:24.472150Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2022-11-15T21:38:24.472150Z", + "updater_id": "Shuyang.Zhao.cchmc@lungmap.net" + }, + "schema_type": "process" + }, + "process/7ede3e76-518a-4e38-9deb-5cd4f2fc4ff4": { + "describedBy": "https://schema.humancellatlas.org/type/process/9.2.0/process", + "process_core": { + "describedBy": "https://schema.humancellatlas.org/core/process/10.0.0/process_core", + "process_id": "7ede3e76-518a-4e38-9deb-5cd4f2fc4ff4" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "7ede3e76-518a-4e38-9deb-5cd4f2fc4ff4", + "submission_date": "2022-11-15T21:38:24.533177Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2022-11-15T21:38:24.533177Z", + "updater_id": "Shuyang.Zhao.cchmc@lungmap.net" + }, + "schema_type": "process" + }, + "process/810b6201-9e0f-4df2-950e-f0c9fca63334": { + "describedBy": "https://schema.humancellatlas.org/type/process/9.2.0/process", + "process_core": { + "describedBy": "https://schema.humancellatlas.org/core/process/10.0.0/process_core", + "process_id": "810b6201-9e0f-4df2-950e-f0c9fca63334" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "810b6201-9e0f-4df2-950e-f0c9fca63334", + "submission_date": "2022-12-15T12:57:31.707099Z", + "submitter_id": "josh.fortriede.cchmc@lungmap.net", + "update_date": "2022-12-15T12:57:31.707099Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "process" + }, + "process/977d701f-29a4-4fc5-b8a1-5094592d49ae": { + "describedBy": "https://schema.humancellatlas.org/type/process/9.2.0/process", + "process_core": { + "describedBy": "https://schema.humancellatlas.org/core/process/10.0.0/process_core", + "process_id": "977d701f-29a4-4fc5-b8a1-5094592d49ae" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "977d701f-29a4-4fc5-b8a1-5094592d49ae", + "submission_date": "2022-12-15T12:34:55.751566Z", + "submitter_id": "josh.fortriede.cchmc@lungmap.net", + "update_date": "2022-12-15T12:34:55.751566Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "process" + }, + "process/9f6e00f4-76db-4a6e-9d06-c213b8726f42": { + "describedBy": "https://schema.humancellatlas.org/type/process/9.2.0/process", + "process_core": { + "describedBy": "https://schema.humancellatlas.org/core/process/10.0.0/process_core", + "process_id": "9f6e00f4-76db-4a6e-9d06-c213b8726f42" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "9f6e00f4-76db-4a6e-9d06-c213b8726f42", + "submission_date": "2022-12-15T12:34:55.744662Z", + "submitter_id": "josh.fortriede.cchmc@lungmap.net", + "update_date": "2022-12-15T12:34:55.744662Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "process" + }, + "process/a3e0f751-d823-43af-b2d6-e477523b3859": { + "describedBy": "https://schema.humancellatlas.org/type/process/9.2.0/process", + "process_core": { + "describedBy": "https://schema.humancellatlas.org/core/process/10.0.0/process_core", + "process_id": "a3e0f751-d823-43af-b2d6-e477523b3859" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "a3e0f751-d823-43af-b2d6-e477523b3859", + "submission_date": "2022-12-15T12:57:31.698674Z", + "submitter_id": "josh.fortriede.cchmc@lungmap.net", + "update_date": "2022-12-15T12:57:31.698674Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "process" + }, + "process/adaa99c9-360b-4b9e-b4f0-26fdbff63f76": { + "describedBy": "https://schema.humancellatlas.org/type/process/9.2.0/process", + "process_core": { + "describedBy": "https://schema.humancellatlas.org/core/process/10.0.0/process_core", + "process_id": "adaa99c9-360b-4b9e-b4f0-26fdbff63f76" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "adaa99c9-360b-4b9e-b4f0-26fdbff63f76", + "submission_date": "2022-11-15T21:38:24.517028Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2022-11-15T21:38:24.517028Z", + "updater_id": "Shuyang.Zhao.cchmc@lungmap.net" + }, + "schema_type": "process" + }, + "process/cfd710c6-b796-4dad-931b-866e21af816a": { + "describedBy": "https://schema.humancellatlas.org/type/process/9.2.0/process", + "process_core": { + "describedBy": "https://schema.humancellatlas.org/core/process/10.0.0/process_core", + "process_id": "cfd710c6-b796-4dad-931b-866e21af816a" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "cfd710c6-b796-4dad-931b-866e21af816a", + "submission_date": "2022-12-15T12:57:31.683001Z", + "submitter_id": "josh.fortriede.cchmc@lungmap.net", + "update_date": "2022-12-15T12:57:31.683001Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "process" + }, + "process/ec16af14-b4f0-4e1e-8159-98b6a5c249ad": { + "describedBy": "https://schema.humancellatlas.org/type/process/9.2.0/process", + "process_core": { + "describedBy": "https://schema.humancellatlas.org/core/process/10.0.0/process_core", + "process_id": "ec16af14-b4f0-4e1e-8159-98b6a5c249ad" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "ec16af14-b4f0-4e1e-8159-98b6a5c249ad", + "submission_date": "2022-12-15T12:34:55.722198Z", + "submitter_id": "josh.fortriede.cchmc@lungmap.net", + "update_date": "2022-12-15T12:34:55.722198Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "process" + }, + "specimen_from_organism/1aa2900c-7572-4bda-b518-2d458d789ff5": { + "biomaterial_core": { + "biomaterial_id": "1aa2900c-7572-4bda-b518-2d458d789ff5", + "biomaterial_name": "ACD3 Lung", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [ + 9606 + ] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/10.4.0/specimen_from_organism", + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "organ": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.7/organ_ontology", + "ontology": "UBERON:0002048", + "ontology_label": "Lung", + "text": "Lung" + }, + "preservation_storage": { + "describedBy": "https://schema.humancellatlas.org/module/biomaterial/6.1.1/preservation_storage", + "storage_method": "frozen at -80C" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "1aa2900c-7572-4bda-b518-2d458d789ff5", + "submission_date": "2022-12-15T12:33:03.922626Z", + "submitter_id": "josh.fortriede.cchmc@lungmap.net", + "update_date": "2022-12-15T12:34:55.602005Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial" + }, + "specimen_from_organism/60470e37-8335-4802-b6a6-db43b03b9099": { + "biomaterial_core": { + "biomaterial_id": "60470e37-8335-4802-b6a6-db43b03b9099", + "biomaterial_name": "ACD2 Lung", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [ + 9606 + ] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/10.4.0/specimen_from_organism", + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "organ": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.7/organ_ontology", + "ontology": "UBERON:0002048", + "ontology_label": "Lung", + "text": "Lung" + }, + "preservation_storage": { + "describedBy": "https://schema.humancellatlas.org/module/biomaterial/6.1.1/preservation_storage", + "storage_method": "frozen at -80C" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "60470e37-8335-4802-b6a6-db43b03b9099", + "submission_date": "2022-12-15T12:32:59.649554Z", + "submitter_id": "josh.fortriede.cchmc@lungmap.net", + "update_date": "2022-12-15T12:34:55.599245Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial" + }, + "specimen_from_organism/6b238b29-6db5-40a1-9cc5-4290d009b312": { + "biomaterial_core": { + "biomaterial_id": "6b238b29-6db5-40a1-9cc5-4290d009b312", + "biomaterial_name": "ACD4 Lung", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [ + 9606 + ] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/10.4.0/specimen_from_organism", + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "organ": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.7/organ_ontology", + "ontology": "UBERON:0002048", + "ontology_label": "Lung", + "text": "Lung" + }, + "preservation_storage": { + "describedBy": "https://schema.humancellatlas.org/module/biomaterial/6.1.1/preservation_storage", + "storage_method": "frozen at -80C" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "6b238b29-6db5-40a1-9cc5-4290d009b312", + "submission_date": "2022-12-15T12:33:09.211320Z", + "submitter_id": "josh.fortriede.cchmc@lungmap.net", + "update_date": "2022-12-15T12:34:55.604849Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial" + }, + "specimen_from_organism/9a82f545-639a-4c3a-a2b8-53c3a5163fb6": { + "biomaterial_core": { + "biomaterial_id": "9a82f545-639a-4c3a-a2b8-53c3a5163fb6", + "biomaterial_name": "ACD5 Lung", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [ + 9606 + ] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/10.4.0/specimen_from_organism", + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "organ": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.7/organ_ontology", + "ontology": "UBERON:0002048", + "ontology_label": "Lung", + "text": "Lung" + }, + "preservation_storage": { + "describedBy": "https://schema.humancellatlas.org/module/biomaterial/6.1.1/preservation_storage", + "storage_method": "frozen at -80C" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "9a82f545-639a-4c3a-a2b8-53c3a5163fb6", + "submission_date": "2022-12-15T12:33:14.015524Z", + "submitter_id": "josh.fortriede.cchmc@lungmap.net", + "update_date": "2022-12-15T12:34:55.607117Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial" + }, + "specimen_from_organism/aedbc237-e962-4584-b99e-75a7b9656974": { + "biomaterial_core": { + "biomaterial_id": "aedbc237-e962-4584-b99e-75a7b9656974", + "biomaterial_name": "ACD1 lung", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [ + 9606 + ] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/10.4.0/specimen_from_organism", + "diseases": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.8/disease_ontology", + "ontology": "MONDO:0009934", + "ontology_label": "congenital alveolar capillary dysplasia", + "text": "congenital alveolar capillary dysplasia" + } + ], + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "organ": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.7/organ_ontology", + "ontology": "UBERON:0002048", + "ontology_label": "Lung", + "text": "Lung" + }, + "preservation_storage": { + "describedBy": "https://schema.humancellatlas.org/module/biomaterial/6.1.1/preservation_storage", + "storage_method": "frozen at -80C" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "aedbc237-e962-4584-b99e-75a7b9656974", + "submission_date": "2022-12-15T12:32:55.338580Z", + "submitter_id": "josh.fortriede.cchmc@lungmap.net", + "update_date": "2022-12-15T12:34:55.591879Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial" + }, + "dissociation_protocol/269595be-8020-4fa3-9c6c-849c0f665884": { + "describedBy": "https://schema.humancellatlas.org/type/protocol/biomaterial_collection/6.2.0/dissociation_protocol", + "method": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/process_type_ontology", + "text": "" + }, + "protocol_core": { + "describedBy": "https://schema.humancellatlas.org/core/protocol/5.2.5/protocol_core", + "protocol_id": "269595be-8020-4fa3-9c6c-849c0f665884", + "protocol_name": "Cell Dissociation Protocol" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "269595be-8020-4fa3-9c6c-849c0f665884", + "schema_major_version": 1, + "schema_minor_version": 1, + "schema_version": "1.1.0", + "submission_date": "2022-12-15T12:22:02.636955Z", + "submitter_id": "Joshua.Fortriede@cchmc.org", + "update_date": "2022-12-15T12:22:08.686424Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "reagents": [], + "schema_type": "protocol", + "schema_version": "6.2.0" + }, + "donor_organism/3051e591-8ee0-4c39-810f-c4fe6a92e3a3": { + "biomaterial_core": { + "biomaterial_description": "ACD2", + "biomaterial_id": "3051e591-8ee0-4c39-810f-c4fe6a92e3a3", + "biomaterial_name": "ACD2", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/15.5.0/donor_organism", + "development_stage": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.6/development_stage_ontology", + "ontology": "HsapDv:0000097", + "ontology_label": "3-year-old human stage", + "text": "3-year-old human stage" + }, + "diseases": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.8/disease_ontology", + "ontology": "MONDO:0009934", + "ontology_label": "congenital alveolar capillary dysplasia", + "text": "congenital alveolar capillary dysplasia" + } + ], + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "is_living": "unknown", + "organism_age": "3.5", + "organism_age_unit": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/time_unit_ontology", + "ontology": "UO:0000036", + "ontology_label": "year", + "text": "year" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "3051e591-8ee0-4c39-810f-c4fe6a92e3a3", + "submission_date": "2022-11-15T21:08:20.333899Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2024-05-20T19:59:14.832520Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial", + "sex": "male" + }, + "donor_organism/55333c14-5093-4419-9c84-76ef16033927": { + "biomaterial_core": { + "biomaterial_description": "ACD4", + "biomaterial_id": "55333c14-5093-4419-9c84-76ef16033927", + "biomaterial_name": "ACD4", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/15.5.0/donor_organism", + "development_stage": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.6/development_stage_ontology", + "ontology": "HsapDv:0000174", + "ontology_label": "1-month-old human stage", + "text": "1-month-old human stage" + }, + "diseases": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.8/disease_ontology", + "ontology": "MONDO:0009934", + "ontology_label": "congenital alveolar capillary dysplasia", + "text": "congenital alveolar capillary dysplasia" + } + ], + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "is_living": "unknown", + "organism_age": "5", + "organism_age_unit": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/time_unit_ontology", + "ontology": "UO:0000034", + "ontology_label": "week", + "text": "week" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "55333c14-5093-4419-9c84-76ef16033927", + "submission_date": "2022-11-15T21:08:25.334848Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2024-05-20T19:59:14.818212Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial", + "sex": "male" + }, + "donor_organism/9da94063-7cc7-4286-a2b0-ef006bcfa9b0": { + "biomaterial_core": { + "biomaterial_description": "ACD5", + "biomaterial_id": "9da94063-7cc7-4286-a2b0-ef006bcfa9b0", + "biomaterial_name": "ACD5", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/15.5.0/donor_organism", + "development_stage": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.6/development_stage_ontology", + "ontology": "HsapDv:0000174", + "ontology_label": "1-month-old human stage", + "text": "1-month-old human stage" + }, + "diseases": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.8/disease_ontology", + "ontology": "MONDO:0009934", + "ontology_label": "congenital alveolar capillary dysplasia", + "text": "congenital alveolar capillary dysplasia" + } + ], + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "is_living": "unknown", + "organism_age": "1", + "organism_age_unit": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/time_unit_ontology", + "ontology": "UO:0000035", + "ontology_label": "month", + "text": "month" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "9da94063-7cc7-4286-a2b0-ef006bcfa9b0", + "submission_date": "2022-11-15T21:08:27.869712Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2024-05-20T19:59:14.847175Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial", + "sex": "male" + }, + "donor_organism/d7ec7c39-146f-40dd-9c61-3d73bf908445": { + "biomaterial_core": { + "biomaterial_description": "ACD3", + "biomaterial_id": "d7ec7c39-146f-40dd-9c61-3d73bf908445", + "biomaterial_name": "ACD3", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/15.5.0/donor_organism", + "development_stage": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.6/development_stage_ontology", + "ontology": "HsapDv:0000182", + "ontology_label": "9-month-old human stage", + "text": "9-month-old human stage" + }, + "diseases": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.8/disease_ontology", + "ontology": "MONDO:0009934", + "ontology_label": "congenital alveolar capillary dysplasia", + "text": "congenital alveolar capillary dysplasia" + } + ], + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "is_living": "unknown", + "organism_age": "9", + "organism_age_unit": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/time_unit_ontology", + "ontology": "UO:0000035", + "ontology_label": "month", + "text": "month" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "d7ec7c39-146f-40dd-9c61-3d73bf908445", + "submission_date": "2022-11-15T21:08:22.735348Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2024-05-20T19:59:14.838012Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial", + "sex": "male" + }, + "donor_organism/ee1f02ff-cfee-4f99-ab44-6ac896965815": { + "biomaterial_core": { + "biomaterial_description": "ACD1", + "biomaterial_id": "ee1f02ff-cfee-4f99-ab44-6ac896965815", + "biomaterial_name": "ACD1", + "describedBy": "https://schema.humancellatlas.org/core/biomaterial/8.2.0/biomaterial_core", + "ncbi_taxon_id": [] + }, + "describedBy": "https://schema.humancellatlas.org/type/biomaterial/15.5.0/donor_organism", + "development_stage": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.6/development_stage_ontology", + "ontology": "HsapDv:0000082", + "ontology_label": "newborn human stage", + "text": "newborn human stage" + }, + "diseases": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.8/disease_ontology", + "ontology": "MONDO:0009934", + "ontology_label": "congenital alveolar capillary dysplasia", + "text": "congenital alveolar capillary dysplasia" + } + ], + "genus_species": [ + { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/species_ontology", + "ontology": "NCBITaxon:9606", + "ontology_label": "Homo sapiens", + "text": "Homo sapiens" + } + ], + "is_living": "unknown", + "organism_age": "2", + "organism_age_unit": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/time_unit_ontology", + "ontology": "UO:0000034", + "ontology_label": "week", + "text": "week" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "ee1f02ff-cfee-4f99-ab44-6ac896965815", + "submission_date": "2022-11-15T21:08:17.062047Z", + "submitter_id": "Shuyang.Zhao.cchmc@lungmap.net", + "update_date": "2024-05-20T19:59:14.828160Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "biomaterial", + "sex": "male" + }, + "collection_protocol/3e396673-63c9-4fdb-b869-012fdd638137": { + "describedBy": "https://schema.humancellatlas.org/type/protocol/biomaterial_collection/9.2.0/collection_protocol", + "method": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/5.3.5/process_type_ontology", + "text": "" + }, + "protocol_core": { + "describedBy": "https://schema.humancellatlas.org/core/protocol/5.2.5/protocol_core", + "protocol_id": "3e396673-63c9-4fdb-b869-012fdd638137", + "protocol_name": "Sample Collection Protocol from Donors" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "3e396673-63c9-4fdb-b869-012fdd638137", + "schema_major_version": 1, + "schema_minor_version": 1, + "schema_version": "1.1.0", + "submission_date": "2022-12-15T12:21:34.326538Z", + "submitter_id": "Joshua.Fortriede@cchmc.org", + "update_date": "2022-12-15T12:21:55.021543Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "schema_type": "protocol", + "schema_version": "9.2.0" + }, + "project/fdadee7e-2097-45d5-bf81-cc280bd8348e": { + "array_express_accessions": [], + "biostudies_accessions": [], + "contributors": [ + { + "corresponding_contributor": false, + "describedBy": "https://schema.humancellatlas.org/module/project/8.0.1/contact", + "email": "jeffrey.whitsett@cchmc.org", + "institution": "Cincinnati Children's Hospital Medical Center", + "laboratory": "Division of Neonatology, Perinatal and Pulmonary Biology", + "name": "Jeffrey A. Whitsett", + "project_role": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/1.0.0/contributor_role_ontology", + "text": "principal investigator" + } + }, + { + "corresponding_contributor": true, + "describedBy": "https://schema.humancellatlas.org/module/project/8.0.1/contact", + "email": "minzhe.guo@cchmc.org", + "institution": "Cincinnati Children's Hospital Medical Center", + "laboratory": "Division of Neonatology, Perinatal and Pulmonary Biology", + "name": "Minzhe Guo", + "project_role": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/1.0.0/contributor_role_ontology", + "ontology": "EFO:0009742", + "ontology_label": "computational scientist", + "text": "computational scientist" + } + }, + { + "corresponding_contributor": false, + "describedBy": "https://schema.humancellatlas.org/module/project/8.0.1/contact", + "email": "Kathryn.Wikenheiser-Brokamp@cchmc.org", + "institution": "Cincinnati Children's Hospital Medical Center", + "laboratory": "Division of Pathology & Laboratory Medicine", + "name": "Kathryn A Wikenheiser-Brokamp", + "project_role": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/1.0.0/contributor_role_ontology", + "ontology": "EFO:0009738", + "ontology_label": "pathologist", + "text": "pathologist" + } + }, + { + "corresponding_contributor": false, + "describedBy": "https://schema.humancellatlas.org/module/project/8.0.1/contact", + "email": "Yan.Xu@cchmc.org", + "institution": "Cincinnati Children's Hospital Medical Center", + "laboratory": "Neonatology & Pulmonary Biology Perinatal Institute", + "name": "Yan Xu", + "project_role": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/1.0.0/contributor_role_ontology", + "ontology": "EFO:0001739", + "ontology_label": "investigator", + "text": "investigator" + } + }, + { + "corresponding_contributor": false, + "describedBy": "https://schema.humancellatlas.org/module/project/8.0.1/contact", + "email": "kevin.burns@cchmc.org", + "institution": "DMCC", + "name": "Kevin Burns", + "project_role": { + "describedBy": "https://schema.humancellatlas.org/module/ontology/1.0.0/contributor_role_ontology", + "ontology": "EFO:0009737", + "ontology_label": "data curator", + "text": "data curator" + } + } + ], + "describedBy": "https://schema.humancellatlas.org/type/project/15.0.0/project", + "funders": [], + "geo_series_accessions": [], + "insdc_project_accessions": [], + "insdc_study_accessions": [], + "project_core": { + "describedBy": "https://schema.humancellatlas.org/core/project/7.0.5/project_core", + "project_description": "ACDMPV is a lethal developmental disorder of lung morphogenesis caused by insufficiency of FOXF1 (forkhead box F1) transcription factor function. The cellular and transcriptional mechanisms by which FOXF1 deficiency disrupts human lung formation are unknown. To identify cell types, gene networks, and cell-cell interactions underlying the pathogenesis of ACDMPV. We used single-nucleus RNA and assay for transposase-accessible chromatin sequencing, immunofluorescence confocal microscopy, and RNA in situ hybridization to identify cell types and molecular networks influenced by FOXF1 in ACDMPV lungs. Pathogenic single-nucleotide variants and copy-number variant deletions involving the FOXF1 gene locus in all subjects with ACDMPV (n = 6) were accompanied by marked changes in lung structure, including deficient alveolar development and a paucity of pulmonary microvasculature. Single-nucleus RNA and assay for transposase-accessible chromatin sequencing identified alterations in cell number and gene expression in endothelial cells (ECs), pericytes, fibroblasts, and epithelial cells in ACDMPV lungs. Distinct cell-autonomous roles for FOXF1 in capillary ECs and pericytes were identified. Pathogenic variants involving the FOXF1 gene locus disrupt gene expression in EC progenitors, inhibiting the differentiation or survival of capillary 2 ECs and cell-cell interactions necessary for both pulmonary vasculogenesis and alveolar type 1 cell differentiation. Loss of the pulmonary microvasculature was associated with increased VEGFA (vascular endothelial growth factor A) signaling and marked expansion of systemic bronchial ECs expressing COL15A1 (collagen type XV \u03b1 1 chain). Distinct FOXF1 gene regulatory networks were identified in subsets of pulmonary endothelial and fibroblast progenitors, providing both cellular and molecular targets for the development of therapies for ACDMPV and other diffuse lung diseases of infancy.", + "project_short_name": "Alveolar capillary dysplasia with misalignment of the pulmonary veins (ACDMPV)", + "project_title": "Alveolar capillary dysplasia with misalignment of the pulmonary veins (ACDMPV)" + }, + "provenance": { + "describedBy": "https://schema.humancellatlas.org/system/1.1.0/provenance", + "document_id": "fdadee7e-2097-45d5-bf81-cc280bd8348e", + "schema_major_version": 1, + "schema_minor_version": 1, + "schema_version": "1.1.0", + "submission_date": "2022-11-10T16:57:48.457844Z", + "submitter_id": "Shuyang.Zhao@cchmc.org", + "update_date": "2024-06-25T15:12:06.304736Z", + "updater_id": "josh.fortriede.cchmc@lungmap.net" + }, + "publications": [ + { + "authors": [], + "describedBy": "https://schema.humancellatlas.org/module/project/7.0.0/publication", + "doi": "10.1164/rccm.202210-2015OC", + "official_hca_publication": false, + "pmid": 37463497, + "title": "Single Cell Multiomics Identifies Cells and Genetic Networks Underlying Alveolar Capillary Dysplasia", + "url": "https://www.atsjournals.org/doi/10.1164/rccm.202210-2015OC" + } + ], + "schema_type": "project", + "schema_version": "15.0.0", + "supplementary_links": [] + } + }, + "links": { + "describedBy": "https://schema.humancellatlas.org/system/2.1.1/links", + "schema_type": "links", + "schema_version": "2.1.1", + "links": [ + { + "link_type": "process_link", + "process_id": "1a4f34f2-bb3a-45c5-b7b1-a3d0bbe79e54", + "process_type": "process", + "inputs": [ + { + "input_type": "specimen_from_organism", + "input_id": "1aa2900c-7572-4bda-b518-2d458d789ff5" + } + ], + "outputs": [ + { + "output_type": "cell_suspension", + "output_id": "6f3291e6-d60c-475b-ae6b-661b25fc41de" + } + ], + "protocols": [ + { + "protocol_type": "dissociation_protocol", + "protocol_id": "269595be-8020-4fa3-9c6c-849c0f665884" + } + ] + }, + { + "link_type": "process_link", + "process_id": "53d7ef73-9885-4d3e-9a53-3d3d5cb84fa2", + "process_type": "process", + "inputs": [ + { + "input_type": "donor_organism", + "input_id": "d7ec7c39-146f-40dd-9c61-3d73bf908445" + } + ], + "outputs": [ + { + "output_type": "specimen_from_organism", + "output_id": "1aa2900c-7572-4bda-b518-2d458d789ff5" + } + ], + "protocols": [ + { + "protocol_type": "collection_protocol", + "protocol_id": "3e396673-63c9-4fdb-b869-012fdd638137" + } + ] + }, + { + "link_type": "process_link", + "process_id": "7ede3e76-518a-4e38-9deb-5cd4f2fc4ff4", + "process_type": "process", + "inputs": [ + { + "input_type": "specimen_from_organism", + "input_id": "9a82f545-639a-4c3a-a2b8-53c3a5163fb6" + } + ], + "outputs": [ + { + "output_type": "cell_suspension", + "output_id": "0c422f39-b2b1-4cf9-9096-b48517c72191" + } + ], + "protocols": [ + { + "protocol_type": "dissociation_protocol", + "protocol_id": "269595be-8020-4fa3-9c6c-849c0f665884" + } + ] + }, + { + "link_type": "process_link", + "process_id": "977d701f-29a4-4fc5-b8a1-5094592d49ae", + "process_type": "process", + "inputs": [ + { + "input_type": "donor_organism", + "input_id": "9da94063-7cc7-4286-a2b0-ef006bcfa9b0" + } + ], + "outputs": [ + { + "output_type": "specimen_from_organism", + "output_id": "9a82f545-639a-4c3a-a2b8-53c3a5163fb6" + } + ], + "protocols": [ + { + "protocol_type": "collection_protocol", + "protocol_id": "3e396673-63c9-4fdb-b869-012fdd638137" + } + ] + }, + { + "link_type": "process_link", + "process_id": "cfd710c6-b796-4dad-931b-866e21af816a", + "process_type": "process", + "inputs": [ + { + "input_type": "specimen_from_organism", + "input_id": "aedbc237-e962-4584-b99e-75a7b9656974" + } + ], + "outputs": [ + { + "output_type": "cell_suspension", + "output_id": "736e10c0-85db-4f18-a7e1-f7eaa6cb6372" + } + ], + "protocols": [ + { + "protocol_type": "dissociation_protocol", + "protocol_id": "269595be-8020-4fa3-9c6c-849c0f665884" + } + ] + }, + { + "link_type": "process_link", + "process_id": "810b6201-9e0f-4df2-950e-f0c9fca63334", + "process_type": "process", + "inputs": [ + { + "input_type": "specimen_from_organism", + "input_id": "1aa2900c-7572-4bda-b518-2d458d789ff5" + } + ], + "outputs": [ + { + "output_type": "cell_suspension", + "output_id": "c2feb442-7900-4e62-baea-7974593a679e" + } + ], + "protocols": [ + { + "protocol_type": "dissociation_protocol", + "protocol_id": "269595be-8020-4fa3-9c6c-849c0f665884" + } + ] + }, + { + "link_type": "process_link", + "process_id": "5adec5c1-db34-48c7-8965-0eeec5ba95fb", + "process_type": "process", + "inputs": [ + { + "input_type": "donor_organism", + "input_id": "ee1f02ff-cfee-4f99-ab44-6ac896965815" + } + ], + "outputs": [ + { + "output_type": "specimen_from_organism", + "output_id": "aedbc237-e962-4584-b99e-75a7b9656974" + } + ], + "protocols": [ + { + "protocol_type": "collection_protocol", + "protocol_id": "3e396673-63c9-4fdb-b869-012fdd638137" + } + ] + }, + { + "link_type": "process_link", + "process_id": "adaa99c9-360b-4b9e-b4f0-26fdbff63f76", + "process_type": "process", + "inputs": [ + { + "input_type": "specimen_from_organism", + "input_id": "6b238b29-6db5-40a1-9cc5-4290d009b312" + } + ], + "outputs": [ + { + "output_type": "cell_suspension", + "output_id": "48771554-42be-4151-9303-3189ddd66260" + } + ], + "protocols": [ + { + "protocol_type": "dissociation_protocol", + "protocol_id": "269595be-8020-4fa3-9c6c-849c0f665884" + } + ] + }, + { + "link_type": "process_link", + "process_id": "63f5d0eb-cb89-4f58-ab60-23fb51690747", + "process_type": "process", + "inputs": [ + { + "input_type": "specimen_from_organism", + "input_id": "60470e37-8335-4802-b6a6-db43b03b9099" + } + ], + "outputs": [ + { + "output_type": "cell_suspension", + "output_id": "22433fb5-60b1-4a35-80ac-189fd2b26850" + } + ], + "protocols": [ + { + "protocol_type": "dissociation_protocol", + "protocol_id": "269595be-8020-4fa3-9c6c-849c0f665884" + } + ] + }, + { + "link_type": "process_link", + "process_id": "ec16af14-b4f0-4e1e-8159-98b6a5c249ad", + "process_type": "process", + "inputs": [ + { + "input_type": "donor_organism", + "input_id": "3051e591-8ee0-4c39-810f-c4fe6a92e3a3" + } + ], + "outputs": [ + { + "output_type": "specimen_from_organism", + "output_id": "60470e37-8335-4802-b6a6-db43b03b9099" + } + ], + "protocols": [ + { + "protocol_type": "collection_protocol", + "protocol_id": "3e396673-63c9-4fdb-b869-012fdd638137" + } + ] + }, + { + "link_type": "process_link", + "process_id": "39bbd553-237d-43d1-bd9c-b17525b7d9ce", + "process_type": "process", + "inputs": [ + { + "input_type": "specimen_from_organism", + "input_id": "aedbc237-e962-4584-b99e-75a7b9656974" + } + ], + "outputs": [ + { + "output_type": "cell_suspension", + "output_id": "877b6440-7d77-4b58-9f44-e2cad80ada6d" + } + ], + "protocols": [ + { + "protocol_type": "dissociation_protocol", + "protocol_id": "269595be-8020-4fa3-9c6c-849c0f665884" + } + ] + }, + { + "link_type": "process_link", + "process_id": "a3e0f751-d823-43af-b2d6-e477523b3859", + "process_type": "process", + "inputs": [ + { + "input_type": "specimen_from_organism", + "input_id": "60470e37-8335-4802-b6a6-db43b03b9099" + } + ], + "outputs": [ + { + "output_type": "cell_suspension", + "output_id": "e08b4629-6e99-4e08-a80a-dd38bdb73ae6" + } + ], + "protocols": [ + { + "protocol_type": "dissociation_protocol", + "protocol_id": "269595be-8020-4fa3-9c6c-849c0f665884" + } + ] + }, + { + "link_type": "process_link", + "process_id": "9f6e00f4-76db-4a6e-9d06-c213b8726f42", + "process_type": "process", + "inputs": [ + { + "input_type": "donor_organism", + "input_id": "55333c14-5093-4419-9c84-76ef16033927" + } + ], + "outputs": [ + { + "output_type": "specimen_from_organism", + "output_id": "6b238b29-6db5-40a1-9cc5-4290d009b312" + } + ], + "protocols": [ + { + "protocol_type": "collection_protocol", + "protocol_id": "3e396673-63c9-4fdb-b869-012fdd638137" + } + ] + } + ] + }, + "stitched": [] +} diff --git a/test/service/test_response.py b/test/service/test_response.py index 3c3b051e05..c6cc9ec8f8 100644 --- a/test/service/test_response.py +++ b/test/service/test_response.py @@ -101,6 +101,9 @@ TDRSourceRef, TDRSourceSpec, ) +from azul_test_case import ( + LungmapTestCase, +) from indexer import ( DCP1CannedBundleTestCase, DCP2CannedBundleTestCase, @@ -3941,3 +3944,30 @@ def test_contributed_analyses_matrix(self): }} } self.assertEqual(expected_tree, project['contributedAnalyses']) + + +class TestResponseWithLungmapCans(LungmapTestCase, DCP2ResponseTestCase): + + @classmethod + def bundles(cls) -> list[SourcedBundleFQID]: + return [ + cls.bundle_fqid(uuid='1928ae54-dbba-33e6-9e40-6a9b3fe8585f', + version='2024-06-25T15:12:06.304736Z'), + ] + + def test_file_with_host_based_drs_uri(self): + file = self.get_file('005f71ed-fcba-4026-bc97-a8c9707f26ee') + self.assertEqual('drs://jade.datarepo-dev.broadinstitute.org/v2_85c93a64-a9d0-4331-ad36-53a6498e57fc', + file['drs_uri']) + expected_file_url = str(self.base_url.set( + path='/repository/files/005f71ed-fcba-4026-bc97-a8c9707f26ee', + args=dict(catalog=self.catalog, + version='2023-10-31T16:42:42.419707Z') + )) + self.assertEqual(expected_file_url, file['azul_url']) + + def test_file_with_compact_drs_uri(self): + file = self.get_file('002ebcd6-722d-434d-b21b-13a06e659a67') + self.assertEqual('drs://dg.4503:696f302b-ecd9-4bcc-a750-56c22b496f02', + file['drs_uri']) + self.assertIsNone(file['azul_url']) From 29ef1fe08212bb2111613570f97a151520fa00a7 Mon Sep 17 00:00:00 2001 From: Noa Dove Date: Wed, 27 May 2026 21:03:27 -0700 Subject: [PATCH 7/8] [p 2/2] Fix: curl manifest futilely includes external LungMAP files (#8027) --- src/azul/service/index_service.py | 14 ++++++++++++++ src/azul/service/manifest_service.py | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/azul/service/index_service.py b/src/azul/service/index_service.py index 6f9a747a4d..5a13d7fc2e 100644 --- a/src/azul/service/index_service.py +++ b/src/azul/service/index_service.py @@ -29,6 +29,10 @@ CatalogName, config, ) +from azul.drs import ( + CompactDRSURI, + DRSURI, +) from azul.filters import ( Filters, ) @@ -88,6 +92,16 @@ def _file_url(self, *, uuid: str, version: str, drs_uri: str | None) -> str | No if drs_uri is None: # To download a file we need its DRS URI return None + elif ( + config.catalogs[self.catalog].atlas == 'lungmap' + and isinstance(DRSURI.parse(drs_uri), CompactDRSURI) + ): + # LungMAP contains files not hosted on TDR. Downloading these files + # requires authentication that can't be provided by Azul, rendering + # our file URLs non-functional. If a user tries to follow such a + # URL, the request fails with a 401 status, so we avoid exposing + # them wherever possible. + return None else: return str(self.file_url_func(catalog=self.catalog, fetch=False, diff --git a/src/azul/service/manifest_service.py b/src/azul/service/manifest_service.py index fdcadf54bf..5d2a533136 100644 --- a/src/azul/service/manifest_service.py +++ b/src/azul/service/manifest_service.py @@ -87,6 +87,10 @@ from azul.deployment import ( aws, ) +from azul.drs import ( + CompactDRSURI, + DRSURI, +) from azul.field_type import ( FieldType, FieldTypes, @@ -1144,6 +1148,16 @@ def _azul_file_url(self, if file['drs_uri'] is None: # To download a file we need its DRS URI return None + elif ( + config.catalogs[self.catalog].atlas == 'lungmap' + and isinstance(DRSURI.parse(json_str(file['drs_uri'])), CompactDRSURI) + ): + # LungMAP contains files not hosted on TDR. Downloading these files + # requires authentication that can't be provided by Azul, rendering + # our file URLs non-functional. If a user tries to follow such a + # URL, the request fails with a 401 status, so we avoid exposing + # them wherever possible. + return None else: special_fields = self.metadata_plugin.special_fields return str(self.file_url_func(catalog=self.catalog, From f7346e9d53173c5ba3994bc1bebeea1936009a49 Mon Sep 17 00:00:00 2001 From: Noa Dove Date: Mon, 13 Jul 2026 21:16:09 -0700 Subject: [PATCH 8/8] fixup! [p 2/2] Fix: curl manifest futilely includes external LungMAP files (#8027) --- src/azul/service/index_service.py | 9 +-------- src/azul/service/manifest_service.py | 9 +-------- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/src/azul/service/index_service.py b/src/azul/service/index_service.py index 5a13d7fc2e..982c87db90 100644 --- a/src/azul/service/index_service.py +++ b/src/azul/service/index_service.py @@ -29,10 +29,6 @@ CatalogName, config, ) -from azul.drs import ( - CompactDRSURI, - DRSURI, -) from azul.filters import ( Filters, ) @@ -92,10 +88,7 @@ def _file_url(self, *, uuid: str, version: str, drs_uri: str | None) -> str | No if drs_uri is None: # To download a file we need its DRS URI return None - elif ( - config.catalogs[self.catalog].atlas == 'lungmap' - and isinstance(DRSURI.parse(drs_uri), CompactDRSURI) - ): + elif drs_uri.startswith('drs://dg.4503'): # LungMAP contains files not hosted on TDR. Downloading these files # requires authentication that can't be provided by Azul, rendering # our file URLs non-functional. If a user tries to follow such a diff --git a/src/azul/service/manifest_service.py b/src/azul/service/manifest_service.py index 5d2a533136..662665870a 100644 --- a/src/azul/service/manifest_service.py +++ b/src/azul/service/manifest_service.py @@ -87,10 +87,6 @@ from azul.deployment import ( aws, ) -from azul.drs import ( - CompactDRSURI, - DRSURI, -) from azul.field_type import ( FieldType, FieldTypes, @@ -1148,10 +1144,7 @@ def _azul_file_url(self, if file['drs_uri'] is None: # To download a file we need its DRS URI return None - elif ( - config.catalogs[self.catalog].atlas == 'lungmap' - and isinstance(DRSURI.parse(json_str(file['drs_uri'])), CompactDRSURI) - ): + elif json_str(file['drs_uri']).startswith('drs://dg.4503'): # LungMAP contains files not hosted on TDR. Downloading these files # requires authentication that can't be provided by Azul, rendering # our file URLs non-functional. If a user tries to follow such a