Skip to content

Commit a063e4b

Browse files
committed
Consolidate HLA- prefix handling
Clean up imports
1 parent c5a1ada commit a063e4b

File tree

14 files changed

+50
-56
lines changed

14 files changed

+50
-56
lines changed

pyard/ard.py

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

31-
import pyard.serology
3231
from . import data_repository as dr
3332
from . import db
3433
from . import smart_sort
35-
from .serology import SerologyMapping
3634
from .constants import (
3735
HLA_regex,
3836
VALID_REDUCTION_TYPES,
@@ -47,6 +45,7 @@
4745
is_2_field_allele,
4846
validate_reduction_type,
4947
)
48+
from .serology import SerologyMapping
5049

5150
default_config = {
5251
"reduce_serology": True,

pyard/ard_refactored.py

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -159,16 +159,6 @@ def _redux_allele(
159159
self, allele: str, redux_type: VALID_REDUCTION_TYPE, re_ping=True
160160
) -> str:
161161
"""Core allele reduction with ping logic"""
162-
# Handle HLA- prefix
163-
if HLA_regex.search(allele):
164-
hla, allele_name = allele.split("-")
165-
redux_allele = self._redux_allele(allele_name, redux_type)
166-
if redux_allele:
167-
if "/" in redux_allele:
168-
return "/".join([f"HLA-{ra}" for ra in redux_allele.split("/")])
169-
return f"HLA-{redux_allele}"
170-
return redux_allele
171-
172162
if not self._config["strict"]:
173163
allele = self._get_non_strict_allele(allele)
174164

@@ -217,31 +207,32 @@ def redux(self, glstring: str, redux_type: VALID_REDUCTION_TYPE = "lgx") -> str:
217207
if processed_gl != glstring or self.is_glstring(processed_gl):
218208
return processed_gl
219209

210+
# Remove HLA- prefix for processing the allele
211+
is_hla_prefix = HLA_regex.search(glstring)
212+
if is_hla_prefix:
213+
allele = glstring.split("-")[1]
214+
else:
215+
allele = glstring
220216
# Handle ignored allele suffixes
221217
if self._config["ignore_allele_with_suffixes"]:
222-
_, fields = glstring.split("*")
218+
_, fields = allele.split("*")
223219
if fields in self._config["ignore_allele_with_suffixes"]:
224-
return glstring
220+
return allele
225221

226222
# Handle V2 to V3 mapping
227-
if self.v2_handler.is_v2(glstring):
228-
glstring = self.v2_handler.map_v2_to_v3(glstring)
229-
return self.redux(glstring, redux_type)
223+
if self.v2_handler.is_v2(allele):
224+
allele = self.v2_handler.map_v2_to_v3(allele)
225+
return self.redux(allele, redux_type)
230226

231227
# Handle Serology
232228
if self._config["reduce_serology"] and self.serology_handler.is_serology(
233-
glstring
229+
allele
234230
):
235-
alleles = self.serology_handler.get_alleles_from_serology(glstring)
231+
alleles = self.serology_handler.get_alleles_from_serology(allele)
236232
if alleles:
237233
return self.redux("/".join(alleles), redux_type)
238234
return ""
239235

240-
is_hla_prefix = HLA_regex.search(glstring)
241-
if is_hla_prefix:
242-
allele = glstring.split("-")[1]
243-
else:
244-
allele = glstring
245236
# Validate format
246237
if ":" in allele:
247238
loc_allele = allele.split(":")
@@ -259,7 +250,7 @@ def redux(self, glstring: str, redux_type: VALID_REDUCTION_TYPE = "lgx") -> str:
259250
if "*" in allele:
260251
locus, _ = allele.split("*")
261252
if locus not in G_GROUP_LOCI:
262-
return glstring
253+
return allele
263254
raise InvalidTypingError(
264255
f"{glstring} is not a valid V2 or Serology typing."
265256
)
@@ -289,11 +280,17 @@ def redux(self, glstring: str, redux_type: VALID_REDUCTION_TYPE = "lgx") -> str:
289280

290281
# Handle short nulls
291282
if self._config["reduce_shortnull"] and self.shortnull_handler.is_shortnull(
292-
glstring
283+
allele
293284
):
294-
return self.redux("/".join(self.shortnulls[glstring]), redux_type)
285+
return self.redux("/".join(self.shortnulls[allele]), redux_type)
295286

296-
return self._redux_allele(glstring, redux_type)
287+
redux_allele = self._redux_allele(allele, redux_type)
288+
# Add back 'HLA-' prefix when redux is done if needed
289+
if is_hla_prefix:
290+
if "/" in redux_allele:
291+
return "/".join([f"HLA-{ra}" for ra in redux_allele.split("/")])
292+
redux_allele = f"HLA-{redux_allele}"
293+
return redux_allele
297294

298295
@staticmethod
299296
def is_glstring(gl_string: str) -> bool:

pyard/data_repository.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,18 @@
2323
import copy
2424
import functools
2525
import sqlite3
26-
import itertools
2726

2827
import pyard.loader
2928
import pyard.loader.cwd
3029
import pyard.loader.mac_codes
3130
import pyard.loader.serology
32-
from pyard.smart_sort import smart_sort_comparator
3331
from . import db
3432
from .constants import expression_chars
3533
from .loader.allele_list import load_allele_list
34+
from .loader.g_group import load_g_group
35+
from .loader.p_group import load_p_group
3636
from .loader.serology import load_serology_mappings, load_serology_broad_split_mapping
3737
from .loader.version import load_latest_version
38-
39-
from .loader.p_group import load_p_group
40-
from .loader.g_group import load_g_group
41-
42-
from .simple_table import Table
43-
4438
from .mappings import (
4539
ars_mapping_tables,
4640
ARSMapping,
@@ -56,6 +50,7 @@
5650
get_1field_allele,
5751
)
5852
from .serology import broad_splits_dna_mapping, SerologyMapping
53+
from .simple_table import Table
5954
from .smart_sort import smart_sort_comparator
6055

6156

pyard/handlers/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
from .gl_string_processor import GLStringProcessor
55
from .mac_handler import MACHandler
66
from .serology_handler import SerologyHandler
7+
from .shortnull_handler import ShortNullHandler
78
from .v2_handler import V2Handler
89
from .xx_handler import XXHandler
9-
from .shortnull_handler import ShortNullHandler
1010

1111
__all__ = [
1212
"AlleleReducer",

pyard/handlers/mac_handler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
from collections import Counter
66
from typing import Iterable, TYPE_CHECKING
77

8+
from .. import db
89
from ..constants import HLA_regex, DEFAULT_CACHE_SIZE
910
from ..exceptions import InvalidMACError
10-
from .. import db
1111

1212
if TYPE_CHECKING:
1313
from ..ard import ARD

pyard/handlers/serology_handler.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# -*- coding: utf-8 -*-
22

33
from typing import Iterable, TYPE_CHECKING
4+
45
from .. import db
56

67
if TYPE_CHECKING:

pyard/handlers/v2_handler.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import re
44
from typing import TYPE_CHECKING
5+
56
from .. import db
67

78
if TYPE_CHECKING:

pyard/loader/allele_list.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
from urllib.request import urlopen
2-
from urllib.error import URLError
31
import csv
42
import sys
5-
from ..simple_table import Table
3+
from urllib.error import URLError
4+
from urllib.request import urlopen
5+
66
from ..loader import IMGT_HLA_URL
7+
from ..simple_table import Table
78

89

910
def load_allele_list(imgt_version):

pyard/loader/cwd.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import os
21
import csv
2+
import os
33

44

55
def load_cwd2():

pyard/loader/mac_codes.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
import io
12
import sys
3+
import zipfile
24
from urllib.error import URLError
35
from urllib.request import urlopen
4-
import zipfile
5-
import io
6+
67
from ..simple_table import Table
78

89

0 commit comments

Comments
 (0)