Skip to content

Commit d792361

Browse files
committed
Bump python version
1 parent 9d981f0 commit d792361

6 files changed

Lines changed: 18 additions & 21 deletions

File tree

.github/workflows/make-tutorials-json.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
cache-dependency-glob: pyproject.toml
3232
- name: Execute validation script and create output directory
3333
run: |
34-
uv run validate --outdir=build
34+
uvx hatch run registry:validate
3535
3636
- name: Upload GitHub Pages artifact
3737
uses: actions/upload-pages-artifact@v3

docs/extensions/typed_returns.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from sphinx.ext.napoleon import NumpyDocstring
1010

1111

12-
def _process_return(lines: Iterable[str]) -> Generator[str, None, None]:
12+
def _process_return(lines: Iterable[str]) -> Generator[str]:
1313
for line in lines:
1414
if m := re.fullmatch(r"(?P<param>\w+)\s+:\s+(?P<type>[\w.]+)", line):
1515
yield f"-{m['param']} (:class:`~{m['type']}`)"

pyproject.toml

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,12 @@ version = "0.0.1"
88
description = "Tutorials for single-cell analysis with scverse packages"
99
readme = "README.md"
1010
license = "BSD-3-Clause"
11-
maintainers = [
12-
{ name = "scverse team", email = "core-team@scverse.org" },
13-
]
14-
authors = [
15-
{ name = "scverse team" },
16-
]
17-
requires-python = ">=3.10"
11+
maintainers = [ { name = "scverse team", email = "core-team@scverse.org" } ]
12+
authors = [ { name = "scverse team" } ]
13+
requires-python = ">=3.13"
1814
classifiers = [
1915
"Private :: Do Not Upload", # Prevent uploading to PyPI
2016
"Programming Language :: Python :: 3 :: Only",
21-
"Programming Language :: Python :: 3.10",
22-
"Programming Language :: Python :: 3.11",
23-
"Programming Language :: Python :: 3.12",
2417
"Programming Language :: Python :: 3.13",
2518
"Programming Language :: Python :: 3.14",
2619
]
@@ -39,12 +32,7 @@ optional-dependencies.docs = [
3932
"sphinxcontrib-bibtex>=1",
4033
"sphinxext-opengraph",
4134
]
42-
optional-dependencies.registry = [
43-
"httpx",
44-
"jsonschema",
45-
"pillow",
46-
"pyyaml",
47-
]
35+
optional-dependencies.registry = [ "httpx", "jsonschema", "pillow", "pyyaml" ]
4836
urls.Documentation = "https://scverse.org/scverse-tutorials"
4937
urls.Home-page = "https://github.com/scverse/scverse-tutorials"
5038
urls.Source = "https://github.com/scverse/scverse-tutorials"

tutorial-registry/tutorials/decoupler-pseudobulk-de/meta.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Pseudo-bulk differential expression and functional analysis
22
description: |
33
This notebook showcases decoupler for pathway and TF enrichment on ~5k
44
Blood myeloid cells from healthy and COVID-19 infected patients.
5-
link: https://decoupler-py.readthedocs.io/en/latest/notebooks/pseudobulk.html
5+
link: https://decoupler.readthedocs.io/en/latest/notebooks/scell/rna_psbk.html
66
image: icon.png
77
primary_category: scRNA-seq
88
order: 30

tutorial-registry/tutorials/plotting-in-scanpy/meta.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Plotting in scanpy
22
description: |
33
This tutorial explores the visualization possibilities of scanpy, including
44
embeddings and the visualization of marker genes and differentially expressed genes.
5-
link: https://scanpy-tutorials.readthedocs.io/en/latest/plotting/core.html
5+
link: https://scanpy.readthedocs.io/en/stable/tutorials/plotting/core.html
66
image: icon.png
77
primary_category: Tips & Tricks
88
order: 10

tutorial-registry/validate.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import argparse
77
import json
8+
import logging
89
import shutil
910
import sys
1011
from pathlib import Path
@@ -16,13 +17,19 @@
1617
import yaml
1718
from PIL import Image
1819

20+
logger = logging.getLogger(__name__)
21+
1922
if TYPE_CHECKING:
2023
from collections.abc import Generator, Iterable, Mapping
2124

2225
HERE = Path(__file__).absolute().parent
2326

2427

2528
def _check_url_exists(url: str) -> None:
29+
logger.info(f"Testing URL: {url}")
30+
import time
31+
32+
time.sleep(0.5)
2633
response = httpx.head(url, follow_redirects=True)
2734
if response.status_code != 200:
2835
raise ValueError(f"URL {url} is not reachable (error {response.status_code}). ")
@@ -47,7 +54,7 @@ def _check_image(img_path: Path) -> None:
4754
)
4855

4956

50-
def validate_tutorials(schema_file: Path, tutorials_dir: Path) -> Generator[dict, None, None]:
57+
def validate_tutorials(schema_file: Path, tutorials_dir: Path) -> Generator[dict]:
5158
"""Find all tutorial `meta.yaml` files in the tutorials dir and yield tutorial records."""
5259
schema = json.loads(schema_file.read_bytes())
5360
known_links = set()
@@ -143,6 +150,8 @@ def main(schema_file: Path, meta_dir: Path, categories_file: Path, *, outdir: Pa
143150

144151

145152
if __name__ == "__main__":
153+
logging.basicConfig(level=logging.INFO, format="%(message)s")
154+
146155
parser = argparse.ArgumentParser(
147156
prog="validate.py",
148157
description="Validate tutorials' meta.yaml and generate an output directory with json/images to be uploaded on github pages.",

0 commit comments

Comments
 (0)