Skip to content

Commit 62f7599

Browse files
committed
All recognized serology are valid. Applied black.
1 parent 9d1792d commit 62f7599

File tree

9 files changed

+343
-145
lines changed

9 files changed

+343
-145
lines changed

pyard/ard.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@
2828
from collections import Counter
2929
from typing import Iterable, List, Union
3030

31-
from . import broad_splits, smart_sort
31+
import pyard.serology
3232
from . import data_repository as dr
3333
from . import db
34+
from . import smart_sort
35+
from .serology import SerologyMapping
3436
from .constants import (
3537
HLA_regex,
3638
VALID_REDUCTION_TYPES,
@@ -112,17 +114,17 @@ def __init__(
112114
self.db_connection, self.code_mappings.who_group
113115
)
114116

115-
# Load Serology mappings
117+
# Load Serology mappings (Broad/Splits, Associated, Recognized)
116118
broad_splits_mapping, associated_mapping = dr.generate_broad_splits_mapping(
117119
self.db_connection, imgt_version
118120
)
119-
self.serology_mapping = broad_splits.SerologyMapping(
121+
self.serology_mapping = SerologyMapping(
120122
broad_splits_mapping, associated_mapping
121123
)
122-
123124
dr.generate_serology_mapping(
124125
self.db_connection, imgt_version, self.serology_mapping, self._redux_allele
125126
)
127+
self.valid_serology_set = dr.build_valid_serology_set(self.db_connection)
126128

127129
# Load V2 to V3 mappings
128130
dr.generate_v2_to_v3_mapping(self.db_connection, imgt_version)
@@ -411,7 +413,11 @@ def redux(self, glstring: str, redux_type: VALID_REDUCTION_TYPES) -> str:
411413
# Handle Serology
412414
if self._config["reduce_serology"] and self.is_serology(glstring):
413415
alleles = self._get_alleles_from_serology(glstring)
414-
return self.redux("/".join(alleles), redux_type)
416+
# If there's corresponding alleles, return / delimited alleles
417+
if alleles:
418+
return self.redux("/".join(alleles), redux_type)
419+
# If there's no DNA Mapping for a serology, e.g. DPw6, return empty
420+
return ""
415421

416422
if ":" in glstring:
417423
loc_allele = glstring.split(":")
@@ -498,7 +504,7 @@ def is_serology(self, allele: str) -> bool:
498504
if "*" in allele or ":" in allele:
499505
return False
500506

501-
return db.is_valid_serology(self.db_connection, allele)
507+
return allele in self.valid_serology_set
502508

503509
@functools.lru_cache(maxsize=DEFAULT_CACHE_SIZE)
504510
def is_mac(self, allele: str) -> bool:
@@ -651,7 +657,7 @@ def _get_alleles(self, code, locus_antigen) -> Iterable[str]:
651657

652658
def _get_alleles_from_serology(self, serology) -> Iterable[str]:
653659
alleles = db.serology_to_alleles(self.db_connection, serology)
654-
return filter(self._is_allele_in_db, alleles)
660+
return set(filter(self._is_allele_in_db, alleles))
655661

656662
@staticmethod
657663
def _combine_with_colon(digits_field):

pyard/broad_splits.py

Lines changed: 0 additions & 81 deletions
This file was deleted.

pyard/data_repository.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import pyard.load
2828
from pyard.smart_sort import smart_sort_comparator
2929
from . import db
30-
from .broad_splits import broad_splits_dna_mapping
30+
from .serology import broad_splits_dna_mapping, get_all_valid_serology_names
3131
from .load import (
3232
load_g_group,
3333
load_p_group,
@@ -483,3 +483,12 @@ def generate_cwd_mapping(db_connection: sqlite3.Connection):
483483
if not db.table_exists(db_connection, "cwd2"):
484484
cwd2_map = pyard.load.load_cwd2()
485485
db.save_cwd2(db_connection, cwd2_map)
486+
487+
488+
def build_valid_serology_set(db_connection: sqlite3.Connection):
489+
valid_serology_names = get_all_valid_serology_names()
490+
# Save to db if `valid_serology` table is not present
491+
if not db.table_exists(db_connection, "valid_serology"):
492+
db.save_set(db_connection, "valid_serology", valid_serology_names, "serology")
493+
494+
return set(valid_serology_names)

pyard/db.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ def save_set(
272272
273273
:param connection: db connection of type sqlite.Connection
274274
:param table_name: name of the table to create
275-
:param rows: set which will become the the column in the table
275+
:param rows: set which will become the column in the table
276276
:param column: name of the column in the table
277277
:return: success status
278278
"""

0 commit comments

Comments
 (0)