1+ import logging
2+ import re
13from base64 import urlsafe_b64decode , urlsafe_b64encode
24from binascii import hexlify , unhexlify
35from http .client import responses as http_responses
4- import logging
5- import re
66
77import connexion
8-
98from bioutils .accessions import infer_namespaces
109
11-
1210_logger = logging .getLogger (__name__ )
1311
1412
1917 "application/json" ,
2018 "text/plain" ,
2119 "*/*" ,
22- ]
20+ ]
2321
2422
2523def hex_to_base64url (s ):
2624 return urlsafe_b64encode (unhexlify (s )).decode ("ascii" )
2725
26+
2827def base64url_to_hex (s ):
2928 return hexlify (urlsafe_b64decode (s )).decode ("ascii" )
3029
30+
3131def get_sequence_id (sr , query ):
3232 """determine sequence_ids after guessing form of query
3333
3434 The query may be:
3535 * A fully-qualified sequence alias (e.g., VMC:0123 or refseq:NM_01234.5)
3636 * A digest or digest prefix from VMC, TRUNC512, or MD5
3737 * A sequence accession (without namespace)
38-
38+
3939 Returns None if not found; seq_id if only one match; raises
40- RuntimeError for ambiguous matches.
40+ RuntimeError for ambiguous matches.
4141
4242 """
43-
43+
4444 seq_ids = get_sequence_ids (sr , query )
4545 if len (seq_ids ) == 0 :
4646 _logger .warning (f"No sequence found for { query } " )
4747 return None
4848 if len (seq_ids ) > 1 :
4949 raise RuntimeError (f"Multiple distinct sequences found for { query } " )
50- return seq_ids .pop () # exactly 1 id found
50+ return seq_ids .pop () # exactly 1 id found
5151
5252
5353def get_sequence_ids (sr , query ):
@@ -57,7 +57,7 @@ def get_sequence_ids(sr, query):
5757 * A fully-qualified sequence alias (e.g., VMC:0123 or refseq:NM_01234.5)
5858 * A digest or digest prefix from VMC, TRUNC512, or MD5
5959 * A sequence accession (without namespace)
60-
60+
6161 The first match will be returned.
6262 """
6363
@@ -74,10 +74,10 @@ def problem(status, message):
7474 return connexion .problem (status = status , title = http_responses [status ], detail = message )
7575
7676
77-
7877############################################################################
7978# INTERNAL
8079
80+
8181def _generate_nsa_options (query ):
8282 """
8383 >>> _generate_nsa_options("NM_000551.3")
@@ -103,7 +103,7 @@ def _generate_nsa_options(query):
103103 if namespaces :
104104 nsa_options = [(ns , query ) for ns in namespaces ]
105105 return nsa_options
106-
106+
107107 # if hex, try md5 and TRUNC512
108108 if re .match (r"^(?:[0-9A-Fa-f]{8,})$" , query ):
109109 nsa_options = [("MD5" , query + "%" )]
0 commit comments