Summary
The live integration test tests/test_cellxgene.py::TestCellxgene::test_cellxgene_adata currently fails on CI (all of py3.12 / py3.13 / py3.14). This is an upstream live-data / dependency drift, not caused by any code change in gget — it surfaces on unrelated PRs (e.g. #233, whose own changes are entirely in gget ucsc + docs).
Symptom
FAILED tests/test_cellxgene.py::TestCellxgene::test_cellxgene_adata
AssertionError: {... 'layers': [None]} != {...}
- {'layers': [None], ...}
tests/test_cellxgene.py:53: AssertionError
The actual result now contains an extra 'layers': [None] entry that the expected fixture does not.
Root cause
test_cellxgene_adata calls cellxgene(...), converts the returned AnnData to a dict via repr_dict(), and compares it to expected_result in tests/fixtures/test_cellxgene.json.
repr_dict() includes an attribute only when list(getattr(adata, attr).keys()) is non-empty. cellxgene_census.get_anndata(...) now returns an AnnData whose .layers contains a single entry keyed None, so list(adata.layers.keys()) is [None] and repr_dict adds "layers": [None]. The stored expected_result predates this, so the exact-dict comparison fails.
Timeline (confirms it is drift, not a regression)
- The last CI run on
dev (2026-06-28, "Bump dev version") was green, so this test passed then.
- It fails on runs from 2026-07-08 onward → the change is in the upstream cellxgene-census data/library, independent of any gget commit.
Suggested fix
Prefer aligning the test with the new stable reality rather than loosening the assertion:
- Update
expected_result in tests/fixtures/test_cellxgene.json to include the new "layers": [None], or
- If the
None-keyed layer is considered noise, have repr_dict() drop a layer whose only key is None (and document why), so the comparison stays on the meaningful structure (obs / var / counts).
Reproduce
# with cellxgene-census installed
pytest tests/test_cellxgene.py::TestCellxgene::test_cellxgene_adata
Summary
The live integration test
tests/test_cellxgene.py::TestCellxgene::test_cellxgene_adatacurrently fails on CI (all of py3.12 / py3.13 / py3.14). This is an upstream live-data / dependency drift, not caused by any code change in gget — it surfaces on unrelated PRs (e.g. #233, whose own changes are entirely ingget ucsc+ docs).Symptom
The actual result now contains an extra
'layers': [None]entry that the expected fixture does not.Root cause
test_cellxgene_adatacallscellxgene(...), converts the returned AnnData to a dict viarepr_dict(), and compares it toexpected_resultintests/fixtures/test_cellxgene.json.repr_dict()includes an attribute only whenlist(getattr(adata, attr).keys())is non-empty.cellxgene_census.get_anndata(...)now returns an AnnData whose.layerscontains a single entry keyedNone, solist(adata.layers.keys())is[None]andrepr_dictadds"layers": [None]. The storedexpected_resultpredates this, so the exact-dict comparison fails.Timeline (confirms it is drift, not a regression)
dev(2026-06-28, "Bump dev version") was green, so this test passed then.Suggested fix
Prefer aligning the test with the new stable reality rather than loosening the assertion:
expected_resultintests/fixtures/test_cellxgene.jsonto include the new"layers": [None], orNone-keyed layer is considered noise, haverepr_dict()drop a layer whose only key isNone(and document why), so the comparison stays on the meaningful structure (obs/var/ counts).Reproduce
# with cellxgene-census installed pytest tests/test_cellxgene.py::TestCellxgene::test_cellxgene_adata