Some simple tools for working with parsed Sensospot data.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1.4 KiB

import pathlib
import tempfile
import typing
import nox
class RepoCache:
"""class for caching checkouts of downstream repos
By caching the checkouts for downstream test runs,
the nox invokation is faster and there is less load
on the git server and network.
"""
_checkouts: typing.ClassVar = {}
@classmethod
def clone(cls, session: nox.Session, repo: str) -> str:
"""clones a git repo only once
Arguments:
session: the nox session in use
repo: a git repo url
Returns:
path to a temporary directory containing the
cloned git repo
"""
tmpdir = cls._checkouts.get(repo, None)
if tmpdir is None:
tmpdir = tempfile.TemporaryDirectory()
session.run("git", "clone", repo, tmpdir.name, external=True)
cls._checkouts[repo] = tmpdir
return tmpdir.name
@nox.session(python=["3.9", "3.10", "3.11"])
def tests(session):
session.install(".[test]")
session.run("pytest", *session.posargs)
@nox.session(python=["3.10", "3.11"])
@nox.parametrize(
"repo",
[
"https://git.sgbio.de/Safeguard/mbp_hyb_calls",
],
)
def downstream(session, repo):
tmpdir = RepoCache.clone(session, repo)
session.install(".")
session.install(f"{tmpdir}[test]")
test_path = pathlib.Path(tmpdir) / "tests"
session.run("pytest", test_path)