← Files Life Sciences DatabasesARCHIVED FILE
skills/eqtl-catalogue-skill/scripts/test_rest_request.py
3.4 KB · Sep 30, 2026 · 23:00 UTC
import importlib.util
import unittest
from pathlib import Path
from unittest import mock
import requests
MODULE_PATH = Path(__file__).with_name("rest_request.py")
SPEC = importlib.util.spec_from_file_location("eqtl_catalogue_rest_request", MODULE_PATH)
rest_request = importlib.util.module_from_spec(SPEC)
assert SPEC.loader is not None
SPEC.loader.exec_module(rest_request)
class _FakeResponse:
def __init__(self, status_code: int, body: str, content_type: str = "application/json") -> None:
self.status_code = status_code
self.text = body
self.headers = {"content-type": content_type}
def raise_for_status(self) -> None:
if self.status_code >= 400:
raise requests.HTTPError(f"{self.status_code} error", response=self)
def json(self):
import json
return json.loads(self.text)
class _FakeSession:
def __init__(self, response: _FakeResponse) -> None:
self.headers = {}
self._response = response
def request(self, method: str, url: str, **kwargs):
return self._response
def close(self) -> None:
return None
class RestRequestTests(unittest.TestCase):
def test_parse_input_backfills_eqtl_association_defaults(self) -> None:
payload = {
"base_url": "https://www.ebi.ac.uk/eqtl/api",
"path": "genes/ENSG00000141510/associations",
"params": {"variant_id": "rs7903146", "size": 10},
}
parsed = rest_request.parse_input(payload)
self.assertEqual(parsed["params"]["variant_id"], "rs7903146")
self.assertEqual(parsed["params"]["snp"], "rs7903146")
self.assertEqual(parsed["params"]["quant_method"], "ge")
self.assertEqual(parsed["params"]["p_lower"], 0)
self.assertEqual(parsed["params"]["p_upper"], 1)
self.assertEqual(parsed["params"]["study"], "")
self.assertEqual(parsed["params"]["tissue"], "")
self.assertEqual(parsed["params"]["gene_id"], "")
self.assertEqual(parsed["params"]["molecular_trait_id"], "")
self.assertEqual(parsed["params"]["qtl_group"], "")
def test_parse_input_does_not_backfill_other_services(self) -> None:
payload = {
"base_url": "https://www.ebi.ac.uk/gwas/rest/api/v2",
"path": "associations",
"params": {"mapped_gene": "BRCA1"},
}
parsed = rest_request.parse_input(payload)
self.assertEqual(parsed["params"], {"mapped_gene": "BRCA1"})
def test_execute_suppresses_untrusted_http_error_body(self) -> None:
payload = {
"base_url": "https://www.ebi.ac.uk/eqtl/api",
"path": "studies/BadStudy/associations?api_key=TOPSECRET",
"params": {"size": 1},
}
response = _FakeResponse(
400,
'{"detail":"invalid query private-patient with api_key TOPSECRET"}',
)
with mock.patch.object(
rest_request.requests, "Session", return_value=_FakeSession(response)
):
output = rest_request.execute(payload)
self.assertFalse(output["ok"])
self.assertEqual(output["error"]["code"], "http_error")
self.assertEqual(
"HTTP 400 for studies/BadStudy/associations",
output["error"]["message"],
)
self.assertNotIn("TOPSECRET", str(output))
self.assertNotIn("private-patient", str(output))
if __name__ == "__main__":
unittest.main()
SHA-256: f21d52d3ca403918b251b97e4113d1b5bca48bdb8f35483d519c0247b90713d3