Skip to content

Commit 6ba0c1f

Browse files
Merge branch 'main' of https://github.com/scverse/ecosystem-packages into add/dvp-io
2 parents 518e647 + 8438fe3 commit 6ba0c1f

8 files changed

Lines changed: 92 additions & 30 deletions

File tree

.pre-commit-config.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ repos:
2323
- id: prettier
2424
# package metadata
2525
- repo: https://github.com/python-jsonschema/check-jsonschema
26-
rev: 0.37.0
26+
rev: 0.37.1
2727
hooks:
2828
- id: check-jsonschema
2929
files: "scripts/src/ecosystem_scripts/schema.json"
3030
args: ["--check-metaschema"]
3131
- repo: https://github.com/python-jsonschema/check-jsonschema
32-
rev: 0.37.0
32+
rev: 0.37.1
3333
hooks:
3434
- id: check-jsonschema
3535
files: "packages/.*/meta.yaml"
@@ -45,15 +45,15 @@ repos:
4545
exclude: "^packages/.*/(meta.yaml|logo\\..*)$"
4646
# scripts
4747
- repo: https://github.com/astral-sh/ruff-pre-commit
48-
rev: v0.15.6
48+
rev: v0.15.9
4949
hooks:
5050
- id: ruff-check
5151
args: [--fix, --exit-non-zero-on-fix]
5252
files: ^scripts/.*$
5353
- id: ruff-format
5454
files: ^scripts/.*$
5555
- repo: https://github.com/tox-dev/pyproject-fmt
56-
rev: v2.18.1
56+
rev: v2.21.0
5757
hooks:
5858
- id: pyproject-fmt
5959
- repo: https://github.com/camptocamp/jsonschema-gentypes
@@ -65,7 +65,7 @@ repos:
6565
- --python=scripts/src/ecosystem_scripts/schema.pyi
6666
files: ^scripts/.*/schema.json$
6767
- repo: https://github.com/pre-commit/mirrors-mypy
68-
rev: v1.19.1
68+
rev: v1.20.0
6969
hooks:
7070
- id: mypy
7171
args: [--config-file=scripts/pyproject.toml, scripts]

packages/DOTools_py/meta.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
name: DOTools_py
2+
description: Convenient and user-friendly package to streamline common workflows in single-cell RNA sequencing data analysis with improved visualisation
3+
project_home: https://github.com/davidrm-bio/DOTools_py
4+
documentation_home: https://dotools-py.readthedocs.io/
5+
tutorials_home: https://dotools-py.readthedocs.io/
6+
install:
7+
pypi: DOtools-py
8+
tags:
9+
- scRNA-seq
10+
- python
11+
- visualisation
12+
- analysis
13+
license: MIT
14+
version: v0.0.2
15+
contact:
16+
- davidrm-bio
17+
test_command: pip install "." && pytest
18+
category: ecosystem

packages/PyDESeq2/meta.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: PyDESeq2
22
description: |
33
PyDESeq2 is a python package for bulk RNA-seq differential expression analysis. It is a re-implementation
44
from scratch of the main features of the R package DESeq2 (Love et al. 2014).
5-
project_home: https://github.com/owkin/PyDESeq2
5+
project_home: https://github.com/scverse/PyDESeq2
66
documentation_home: https://pydeseq2.readthedocs.io/
77
tutorials_home: https://pydeseq2.readthedocs.io/page/auto_examples/
88
install:

packages/clone2vec/meta.yaml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
name: clone2vec
2+
description: |
3+
clone2vec is a Python package for analysis of lineage tracing coupled with single-cell RNA-Seq.
4+
project_home: https://github.com/kharchenkolab/clone2vec
5+
documentation_home: https://clone2vec.readthedocs.io/
6+
tutorials_home: https://clone2vec.readthedocs.io/
7+
install:
8+
pypi: clone2vec
9+
tags:
10+
- label-transfer
11+
license: MIT
12+
publications:
13+
- 10.1101/2024.11.15.623687
14+
version: v0.1.0
15+
contact:
16+
- serjisa
17+
test_command: |
18+
pip install . && pytest
19+
category: ecosystem

packages/scLiTr/meta.yaml

Lines changed: 0 additions & 20 deletions
This file was deleted.

packages/scyan/meta.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ description: |
33
Biology-driven deep generative model for cell-type annotation in cytometry.
44
Scyan is an interpretable model that also corrects batch-effect and
55
can be used for debarcoding or population discovery.
6-
project_home: https://github.com/MICS-Lab/scyan
7-
documentation_home: https://mics-lab.github.io/scyan/
8-
tutorials_home: https://mics-lab.github.io/scyan/tutorials/usage/
6+
project_home: https://github.com/prism-oncology/scyan
7+
documentation_home: https://prism-oncology.github.io/scyan/
8+
tutorials_home: https://prism-oncology.github.io/scyan/tutorials/usage/
99
publications:
1010
- 10.1093/bib/bbad260
1111
install:

scripts/src/ecosystem_scripts/validate_registry.py

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,45 @@ def validate_package(self, package_name: str, context: str) -> None | Validation
269269
return None
270270

271271

272+
class BioconductorValidator:
273+
"""Validate Bioconductor package names using the Bioconductor API."""
274+
275+
def __init__(self, client: httpx.Client) -> None:
276+
self.client = client
277+
self.validated_packages: set[str] = set()
278+
279+
def validate_package(self, package_name: str, context: str) -> None | ValidationError:
280+
"""Validate that a Bioconductor package exists.
281+
282+
Parameters
283+
----------
284+
package_name
285+
The Bioconductor package name to validate
286+
context
287+
Context information for error messages (e.g., file being validated)
288+
"""
289+
if package_name in self.validated_packages:
290+
return None
291+
292+
# Bioconductor packages can be checked via their web API
293+
try:
294+
response = self.client.head(f"https://bioconductor.org/packages/{package_name}/")
295+
except Exception as e:
296+
msg = f"{context}: Failed to validate Bioconductor package '{package_name}': {e}"
297+
return ValidationError(msg)
298+
299+
if response.status_code == httpx.codes.NOT_FOUND:
300+
msg = f"{context}: Bioconductor package '{package_name}' does not exist"
301+
return ValidationError(msg)
302+
if response.status_code != httpx.codes.OK:
303+
msg = f"{context}: Failed to validate Bioconductor package '{package_name}' (error {response.status_code})"
304+
return ValidationError(msg)
305+
306+
self.validated_packages.add(package_name)
307+
log.info(f"Validated Bioconductor package: {package_name}")
308+
return None
309+
310+
272311
def check_image(img_path: Path) -> None | ValidationError:
273312
"""Validates that the image exists and that it is either a SVG or fits into the 512x512 bounding box."""
274313
if not img_path.exists():
@@ -290,7 +329,7 @@ def check_image(img_path: Path) -> None | ValidationError:
290329
return None
291330

292331

293-
def validate_packages(
332+
def validate_packages( # noqa: C901
294333
schema_file: Traversable, registry_dir: Path, github_token: str | None = None
295334
) -> tuple[Mapping[str, Sequence[Exception]], Sequence[ScverseEcosystemPackages]]:
296335
"""Find all package `meta.yaml` files in the registry dir and yield package records."""
@@ -310,6 +349,7 @@ def validate_packages(
310349
pypi_validator = PyPIValidator(retry_client)
311350
conda_validator = CondaValidator(retry_client)
312351
cran_validator = CRANValidator(retry_client)
352+
bioconductor_validator = BioconductorValidator(retry_client)
313353

314354
errors: defaultdict[str, ErrorList] = defaultdict(ErrorList)
315355
package_metadata: list[ScverseEcosystemPackages] = []
@@ -344,6 +384,8 @@ def validate_packages(
344384
pkg_errors.append(conda_validator.validate_package(conda_name, pkg_id))
345385
if cran_name := install_info.get("cran"):
346386
pkg_errors.append(cran_validator.validate_package(cran_name, pkg_id))
387+
if bioconductor_name := install_info.get("bioconductor"):
388+
pkg_errors.append(bioconductor_validator.validate_package(bioconductor_name, pkg_id))
347389

348390
# Check logo (if available) and make path relative to root of registry
349391
if "logo" in tmp_meta:

template-repos.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
- url: https://github.com/Lotfollahi-lab/mintflow
2020
- url: https://github.com/MannLabs/alphapepttools
2121
- url: https://github.com/MannLabs/dvp-io
22+
- url: https://github.com/Marcufong/CellFlow-UOT
2223
- url: https://github.com/NKI-CCB/sobolev_alignment
2324
- url: https://github.com/PMBio/scDoRI
2425
- url: https://github.com/Teichlab/multi-view-atlas
@@ -80,6 +81,7 @@
8081
- url: https://github.com/karadavis-lab/nbl
8182
- url: https://github.com/lhqing/scmallet
8283
- url: https://github.com/lucas-diedrich/bpca
84+
- url: https://github.com/lucas-diedrich/mulink
8385
- url: https://github.com/lucas-diedrich/sccoral
8486
- url: https://github.com/lueckenlab/patpy
8587
- url: https://github.com/lzj1769/LR2net
@@ -135,6 +137,7 @@
135137
- url: https://github.com/theislab/cellink
136138
- url: https://github.com/theislab/ehrapy
137139
- url: https://github.com/theislab/ehrdata
140+
- url: https://github.com/theislab/embpy
138141
- url: https://github.com/theislab/geome
139142
- url: https://github.com/theislab/mapqc
140143
- url: https://github.com/theislab/multigrate

0 commit comments

Comments
 (0)