Update app.py
Browse files
app.py
CHANGED
|
@@ -531,10 +531,10 @@ def a3_run(hgvs: str):
|
|
| 531 |
today = datetime.date.today().isoformat()
|
| 532 |
hgvs = hgvs.strip()
|
| 533 |
if not hgvs:
|
| 534 |
-
return "Please enter an HGVS notation (e.g. NM_007294.4:c.5266dupC)"
|
|
|
|
|
|
|
| 535 |
|
| 536 |
-
result_parts = []
|
| 537 |
-
|
| 538 |
# ClinVar
|
| 539 |
clinvar_cached = cache_get("clinvar", hgvs)
|
| 540 |
if clinvar_cached is None:
|
|
@@ -546,13 +546,13 @@ def a3_run(hgvs: str):
|
|
| 546 |
timeout=10
|
| 547 |
)
|
| 548 |
r.raise_for_status()
|
| 549 |
-
ids = r.json()
|
| 550 |
-
clinvar_cached = ids
|
| 551 |
-
cache_set("clinvar", hgvs,
|
| 552 |
except Exception:
|
| 553 |
-
clinvar_cached =
|
| 554 |
|
| 555 |
-
if clinvar_cached
|
| 556 |
try:
|
| 557 |
time.sleep(0.34)
|
| 558 |
r2 = requests.get(
|
|
@@ -588,25 +588,14 @@ def a3_run(hgvs: str):
|
|
| 588 |
"> ⚠️ Not in database. Do not interpret."
|
| 589 |
)
|
| 590 |
|
| 591 |
-
#
|
| 592 |
-
# Перевіряємо, чи вхідний рядок схожий на variant_id (наприклад, "17-43124023-G-A")
|
| 593 |
-
if re.match(r"^\d+-\d+-[ACGT]+-[ACGT]+$", hgvs):
|
| 594 |
-
# Якщо це variant_id, використовуємо його безпосередньо
|
| 595 |
-
variant_id = hgvs
|
| 596 |
-
else:
|
| 597 |
-
# Інакше намагаємося конвертувати HGVS у variant_id (спрощено)
|
| 598 |
-
# Наприклад, "NM_007294.4:c.5266dupC" → потрібно знайти координати
|
| 599 |
-
# Для демонстрації використаємо фіксований приклад
|
| 600 |
-
variant_id = None
|
| 601 |
-
# Тут можна додати логіку конвертації, але для простоти залишимо так
|
| 602 |
-
|
| 603 |
gnomad_cached = cache_get("gnomad", hgvs)
|
| 604 |
if gnomad_cached is None:
|
| 605 |
try:
|
| 606 |
-
#
|
| 607 |
-
|
| 608 |
-
query VariantSearch($
|
| 609 |
-
|
| 610 |
variant_id
|
| 611 |
rsids
|
| 612 |
exome { af }
|
|
@@ -614,26 +603,9 @@ def a3_run(hgvs: str):
|
|
| 614 |
}
|
| 615 |
}
|
| 616 |
"""
|
| 617 |
-
# Якщо variant_id не вдалося визначити, пробуємо пошук за HGVS через пошук
|
| 618 |
-
if variant_id is None:
|
| 619 |
-
# Використовуємо variantSearch з HGVS як пошуковий запит
|
| 620 |
-
gql = """
|
| 621 |
-
query VariantSearch($query: String!, $dataset: DatasetId!) {
|
| 622 |
-
variantSearch(query: $query, dataset: $dataset) {
|
| 623 |
-
variant_id
|
| 624 |
-
rsids
|
| 625 |
-
exome { af }
|
| 626 |
-
genome { af }
|
| 627 |
-
}
|
| 628 |
-
}
|
| 629 |
-
"""
|
| 630 |
-
variables = {"query": hgvs, "dataset": "gnomad_r4"}
|
| 631 |
-
else:
|
| 632 |
-
variables = {"variantId": variant_id, "dataset": "gnomad_r4"}
|
| 633 |
-
|
| 634 |
r3 = requests.post(
|
| 635 |
GNOMAD_GQL,
|
| 636 |
-
json={"query":
|
| 637 |
timeout=15
|
| 638 |
)
|
| 639 |
r3.raise_for_status()
|
|
@@ -643,12 +615,7 @@ def a3_run(hgvs: str):
|
|
| 643 |
gnomad_cached = None
|
| 644 |
|
| 645 |
if gnomad_cached and "data" in gnomad_cached:
|
| 646 |
-
|
| 647 |
-
if "variantSearch" in gnomad_cached["data"]:
|
| 648 |
-
variants = gnomad_cached["data"]["variantSearch"]
|
| 649 |
-
else:
|
| 650 |
-
variants = [gnomad_cached["data"]["variant"]] if gnomad_cached["data"]["variant"] else []
|
| 651 |
-
|
| 652 |
if variants:
|
| 653 |
gn_rows = []
|
| 654 |
for v in variants[:3]:
|
|
|
|
| 531 |
today = datetime.date.today().isoformat()
|
| 532 |
hgvs = hgvs.strip()
|
| 533 |
if not hgvs:
|
| 534 |
+
return "❌ **Error:** Please enter an HGVS notation (e.g. NM_007294.4:c.5266dupC)"
|
| 535 |
+
|
| 536 |
+
result_parts = [f"## 🔍 Real Variant Lookup: `{hgvs}`"]
|
| 537 |
|
|
|
|
|
|
|
| 538 |
# ClinVar
|
| 539 |
clinvar_cached = cache_get("clinvar", hgvs)
|
| 540 |
if clinvar_cached is None:
|
|
|
|
| 546 |
timeout=10
|
| 547 |
)
|
| 548 |
r.raise_for_status()
|
| 549 |
+
ids = r.json().get("esearchresult", {}).get("idlist", [])
|
| 550 |
+
clinvar_cached = ids if ids else []
|
| 551 |
+
cache_set("clinvar", hgvs, clinvar_cached)
|
| 552 |
except Exception:
|
| 553 |
+
clinvar_cached = []
|
| 554 |
|
| 555 |
+
if clinvar_cached:
|
| 556 |
try:
|
| 557 |
time.sleep(0.34)
|
| 558 |
r2 = requests.get(
|
|
|
|
| 588 |
"> ⚠️ Not in database. Do not interpret."
|
| 589 |
)
|
| 590 |
|
| 591 |
+
# gnomAD
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 592 |
gnomad_cached = cache_get("gnomad", hgvs)
|
| 593 |
if gnomad_cached is None:
|
| 594 |
try:
|
| 595 |
+
# Спочатку спробуємо variantSearch (шукає за HGVS)
|
| 596 |
+
gql_search = """
|
| 597 |
+
query VariantSearch($query: String!, $dataset: DatasetId!) {
|
| 598 |
+
variantSearch(query: $query, dataset: $dataset) {
|
| 599 |
variant_id
|
| 600 |
rsids
|
| 601 |
exome { af }
|
|
|
|
| 603 |
}
|
| 604 |
}
|
| 605 |
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 606 |
r3 = requests.post(
|
| 607 |
GNOMAD_GQL,
|
| 608 |
+
json={"query": gql_search, "variables": {"query": hgvs, "dataset": "gnomad_r4"}},
|
| 609 |
timeout=15
|
| 610 |
)
|
| 611 |
r3.raise_for_status()
|
|
|
|
| 615 |
gnomad_cached = None
|
| 616 |
|
| 617 |
if gnomad_cached and "data" in gnomad_cached:
|
| 618 |
+
variants = gnomad_cached["data"].get("variantSearch", [])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 619 |
if variants:
|
| 620 |
gn_rows = []
|
| 621 |
for v in variants[:3]:
|