Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions malariagen_data/adir1.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
GCS_REGION_URLS = {
"us-central1": "gs://vo_adir_release_master_us_central1",
}
XPEHH_GWSS_CACHE_NAME = "adir1_xpehh_gwss_v1"
IHS_GWSS_CACHE_NAME = "adir1_ihs_gwss_v1"
ROH_HMM_CACHE_NAME = "adir1_roh_hmm_v1"

TAXON_PALETTE = px.colors.qualitative.Plotly
TAXON_COLORS = {
Expand Down
1 change: 1 addition & 0 deletions malariagen_data/af1.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
}
XPEHH_GWSS_CACHE_NAME = "af1_xpehh_gwss_v1"
IHS_GWSS_CACHE_NAME = "af1_ihs_gwss_v1"
ROH_HMM_CACHE_NAME = "af1_roh_hmm_v1"

TAXON_PALETTE = px.colors.qualitative.Plotly
TAXON_COLORS = {
Expand Down
1 change: 1 addition & 0 deletions malariagen_data/ag3.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
}
XPEHH_GWSS_CACHE_NAME = "ag3_xpehh_gwss_v1"
IHS_GWSS_CACHE_NAME = "ag3_ihs_gwss_v1"
ROH_HMM_CACHE_NAME = "ag3_roh_hmm_v1"
VIRTUAL_CONTIGS = {
"2RL": ("2R", "2L"),
"3RL": ("3R", "3L"),
Expand Down
3 changes: 3 additions & 0 deletions malariagen_data/amin1.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
GCS_REGION_URLS = {
"us-central1": "gs://vo_amin_release_master_us_central1",
}
XPEHH_GWSS_CACHE_NAME = "amin1_xpehh_gwss_v1"
IHS_GWSS_CACHE_NAME = "amin1_ihs_gwss_v1"
ROH_HMM_CACHE_NAME = "amin1_roh_hmm_v1"

TAXON_PALETTE = px.colors.qualitative.Plotly
TAXON_COLORS = {
Expand Down
95 changes: 95 additions & 0 deletions tests/test_anopheles_cache_names.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import ast
from pathlib import Path


def _module_ast(path: str):
src = Path(path).read_text(encoding="utf-8")
return ast.parse(src)


def _module_string_constants(mod: ast.Module):
out = {}
for node in mod.body:
if (
isinstance(node, ast.Assign)
and len(node.targets) == 1
and isinstance(node.targets[0], ast.Name)
and isinstance(node.value, ast.Constant)
and isinstance(node.value.value, str)
):
out[node.targets[0].id] = node.value.value
return out


def _class_assignments(mod: ast.Module, class_name: str):
class_node = next(
node
for node in mod.body
if isinstance(node, ast.ClassDef) and node.name == class_name
)
out = {}
for node in class_node.body:
if (
isinstance(node, ast.Assign)
and len(node.targets) == 1
and isinstance(node.targets[0], ast.Name)
):
out[node.targets[0].id] = node.value
return out


def _resolve_value(value_node, constants):
if isinstance(value_node, ast.Constant) and isinstance(value_node.value, str):
return value_node.value
if isinstance(value_node, ast.Name):
return constants[value_node.id]
raise TypeError(f"Unsupported value node type: {type(value_node)}")


def _assert_cache_name_attrs(*, path: str, class_name: str, prefix: str):
required_attrs = (
"_xpehh_gwss_cache_name",
"_ihs_gwss_cache_name",
"_roh_hmm_cache_name",
)
mod = _module_ast(path)
constants = _module_string_constants(mod)
class_values = _class_assignments(mod, class_name)

for attr in required_attrs:
assert attr in class_values
value = _resolve_value(class_values[attr], constants)
assert value.startswith(f"{prefix}_")
assert value.endswith("_v1")


def test_ag3_cache_names():
_assert_cache_name_attrs(
path="malariagen_data/ag3.py",
class_name="Ag3",
prefix="ag3",
)


def test_af1_cache_names():
_assert_cache_name_attrs(
path="malariagen_data/af1.py",
class_name="Af1",
prefix="af1",
)


def test_amin1_cache_names():
_assert_cache_name_attrs(
path="malariagen_data/amin1.py",
class_name="Amin1",
prefix="amin1",
)


def test_adir1_cache_names():
_assert_cache_name_attrs(
path="malariagen_data/adir1.py",
class_name="Adir1",
prefix="adir1",
)