Skip to content

Commit

Permalink
[Python] get_census_version_directory returns sorted elements (#728)
Browse files Browse the repository at this point in the history
* get_census_version_directory returns sorted elements

* typing
  • Loading branch information
ebezzi authored Aug 25, 2023
1 parent fd03fb6 commit 62e15e1
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
Methods to retrieve information about versions of the publicly hosted Census object.
"""
from collections import OrderedDict
from typing import Dict, Literal, Optional, Union, cast

import requests
Expand Down Expand Up @@ -159,6 +160,7 @@ def get_census_version_directory() -> Dict[CensusVersionName, CensusVersionDescr
"""
response = requests.get(CELL_CENSUS_RELEASE_DIRECTORY_URL)
response.raise_for_status()

directory: CensusDirectory = cast(CensusDirectory, response.json())

# Resolve all aliases for easier use
Expand All @@ -180,7 +182,17 @@ def get_census_version_directory() -> Dict[CensusVersionName, CensusVersionDescr
cast(CensusVersionDescription, directory[census_version])["alias"] = alias

# Cast is safe, as we have removed all aliases
return cast(Dict[CensusVersionName, CensusVersionDescription], directory)
unordered_directory = cast(Dict[CensusVersionName, CensusVersionDescription], directory)

# Sort by aliases and release date, descending

aliases = [(k, v) for k, v in unordered_directory.items() if v.get("alias") is not None]
releases = [(k, v) for k, v in unordered_directory.items() if v.get("alias") is None]
ordered_directory = OrderedDict()
for k, v in aliases + sorted(releases, key=lambda k: k[0], reverse=True):
ordered_directory[k] = v

return ordered_directory


def get_census_mirror_directory() -> Dict[CensusMirrorName, CensusMirror]:
Expand Down
33 changes: 21 additions & 12 deletions api/python/cellxgene_census/tests/test_directory.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,32 +8,32 @@
from cellxgene_census._release_directory import CELL_CENSUS_MIRRORS_DIRECTORY_URL, CELL_CENSUS_RELEASE_DIRECTORY_URL

DIRECTORY_JSON = {
"stable": "2022-10-01",
"latest": "2022-11-01",
"2022-11-01": {
"release_date": "2022-11-30",
"release_build": "2022-11-01",
"2022-10-01": {
"release_date": "2022-10-30",
"release_build": "2022-10-01",
"soma": {
"uri": "s3://cellxgene-data-public/cell-census/2022-11-01/soma/",
"uri": "s3://cellxgene-data-public/cell-census/2022-10-01/soma/",
"s3_region": "us-west-2",
},
"h5ads": {
"uri": "s3://cellxgene-data-public/cell-census/2022-11-01/h5ads/",
"uri": "s3://cellxgene-data-public/cell-census/2022-10-01/h5ads/",
"s3_region": "us-west-2",
},
},
"2022-10-01": {
"release_date": "2022-10-30",
"release_build": "2022-10-01",
"2022-11-01": {
"release_date": "2022-11-30",
"release_build": "2022-11-01",
"soma": {
"uri": "s3://cellxgene-data-public/cell-census/2022-10-01/soma/",
"uri": "s3://cellxgene-data-public/cell-census/2022-11-01/soma/",
"s3_region": "us-west-2",
},
"h5ads": {
"uri": "s3://cellxgene-data-public/cell-census/2022-10-01/h5ads/",
"uri": "s3://cellxgene-data-public/cell-census/2022-11-01/h5ads/",
"s3_region": "us-west-2",
},
},
"stable": "2022-10-01",
"latest": "2022-11-01",
# An explicitly dangling tag, to confirm we handle correct
# Underscore indicates expected failure to test below
"_dangling": "no-such-tag",
Expand Down Expand Up @@ -74,6 +74,15 @@ def test_get_census_version_directory(directory_mock: Any) -> None:
for tag in directory:
assert directory[tag] == cellxgene_census.get_census_version_description(tag)

# Verify that the directory is sorted according to this criteria:
# 1. Aliases first
# 2. Non aliases after, in reverse order
dir_list = list(directory)
assert dir_list[0] == "stable"
assert dir_list[1] == "latest"
assert dir_list[2] == "2022-11-01"
assert dir_list[3] == "2022-10-01"


def test_get_census_version_description_errors() -> None:
with pytest.raises(ValueError):
Expand Down

0 comments on commit 62e15e1

Please sign in to comment.