Skip to content

Commit 26aa654

Browse files
committed
reformatted with black and isort
1 parent c9d43c6 commit 26aa654

10 files changed

Lines changed: 40 additions & 51 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
if __name__ == "__main__":
22
from .cli import main
3+
34
main()

src/seqrepo_rest_service/cli.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,13 @@
99
import pathlib
1010
import time
1111

12-
from biocommons.seqrepo import SeqRepo
1312
import coloredlogs
1413
import connexion
14+
from biocommons.seqrepo import SeqRepo
1515
from flask import Flask, redirect
1616

1717
from . import __version__
1818

19-
20-
2119
WAIT_POLL_PERIOD = 15 # seconds between polling for SEQREPO PATH
2220

2321

src/seqrepo_rest_service/refget/routes/metadata.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
from connexion import NoContent, request
44

55
from ...threadglobals import get_seqrepo
6-
from ...utils import get_sequence_id, base64url_to_hex, problem, valid_content_types
7-
6+
from ...utils import (base64url_to_hex, get_sequence_id, problem,
7+
valid_content_types)
88

99
_logger = logging.getLogger(__name__)
1010

@@ -14,7 +14,7 @@ def get(id):
1414
if accept_header and accept_header not in valid_content_types:
1515
_logger.warn(f"{accept_header} not valid")
1616
return problem(406, "Invalid Accept header")
17-
17+
1818
sr = get_seqrepo()
1919
seq_id = get_sequence_id(sr, id)
2020
if not seq_id:
@@ -30,10 +30,7 @@ def get(id):
3030
"md5": md5_id,
3131
"trunc512": base64url_to_hex(seq_id),
3232
"length": seqinfo["len"],
33-
"aliases": [
34-
{"naming_authority": a["namespace"], "alias": a["alias"]}
35-
for a in aliases
36-
]
37-
}
33+
"aliases": [{"naming_authority": a["namespace"], "alias": a["alias"]} for a in aliases],
34+
}
3835

3936
return {"metadata": md}, 200

src/seqrepo_rest_service/refget/routes/sequence.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from ...threadglobals import get_seqrepo
77
from ...utils import get_sequence_id, problem, valid_content_types
88

9-
109
_logger = logging.getLogger(__name__)
1110

1211
range_re = re.compile("^bytes=(\d+)-(\d+)$")
@@ -16,7 +15,7 @@ def get(id, start=None, end=None):
1615
accept_header = request.headers.get("Accept", None)
1716
if accept_header and accept_header not in valid_content_types:
1817
return problem(406, "Invalid Accept header")
19-
18+
2019
range_header = request.headers.get("Range", None)
2120
if range_header:
2221
_logger.debug(f"Received header `Range: {range_header}`")
@@ -29,13 +28,13 @@ def get(id, start=None, end=None):
2928
_logger.debug(f"Parsed `{range_header}` as ({start}, {end})")
3029
if start > end:
3130
return problem(416, f"Range queries may specify start > end")
32-
31+
3332
sr = get_seqrepo()
3433
seq_id = get_sequence_id(sr, id)
3534
if not seq_id:
3635
return NoContent, 404
3736
seqinfo = sr.sequences.fetch_seqinfo(seq_id)
38-
37+
3938
if start is not None and end is not None:
4039
if start >= seqinfo["len"]:
4140
return problem(416, "Invalid coordinates: start > sequence length")
@@ -45,11 +44,12 @@ def get(id, start=None, end=None):
4544
if start > end:
4645
return problem(501, "Invalid coordinates: start > end")
4746
if not (0 <= start <= end <= seqinfo["len"]) and not range_header:
48-
return problem(416, "Invalid coordinates: must obey 0 <= start <= end <= sequence_length")
47+
return problem(
48+
416, "Invalid coordinates: must obey 0 <= start <= end <= sequence_length"
49+
)
4950

5051
try:
5152
status = 206 if ((start or end) and range_header) else 200
5253
return sr.sequences.fetch(seq_id, start, end), status
5354
except KeyError:
5455
return NoContent, 404
55-
Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,25 @@
1-
from ... import __version__
2-
3-
from ...threadglobals import get_seqrepo
4-
5-
import biocommons.seqrepo
1+
import biocommons.seqrepo
62
import bioutils
73

4+
from ... import __version__
5+
from ...threadglobals import get_seqrepo
86

97

108
def get():
119
sr = get_seqrepo()
12-
10+
1311
return {
1412
"service": {
1513
"algorithms": ["md5", "trunc512"],
16-
"circular_supported" : False,
14+
"circular_supported": False,
1715
"subsequence_limit": None,
1816
"supported_api_versions": ["1.0"],
1917
},
2018
"x-config": {
2119
"seqrepo-rest-service": {
2220
"version": __version__,
2321
"url": "https://github.com/biocommons/seqrepo-rest-service/",
24-
},
22+
},
2523
"seqrepo": {
2624
"version": biocommons.seqrepo.__version__,
2725
"root": sr._root_dir,
@@ -31,5 +29,5 @@ def get():
3129
"version": bioutils.__version__,
3230
"url": "https://github.com/biocommons/bioutils/",
3331
},
34-
}
32+
},
3533
}

src/seqrepo_rest_service/seqrepo/routes/metadata.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from ...threadglobals import get_seqrepo
66
from ...utils import get_sequence_ids, problem
77

8-
98
_logger = logging.getLogger(__name__)
109

1110

@@ -27,6 +26,6 @@ def get(alias):
2726
"aliases": [f"{a['namespace']}:{a['alias']}" for a in aliases],
2827
"alphabet": seqinfo["alpha"],
2928
"length": seqinfo["len"],
30-
}
29+
}
3130

3231
return md, 200
Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
from ...threadglobals import get_seqrepo
2-
3-
import biocommons.seqrepo
1+
import biocommons.seqrepo
42
import bioutils
5-
63
from pkg_resources import get_distribution
74

5+
from ...threadglobals import get_seqrepo
6+
87

98
def get():
109
sr = get_seqrepo()
11-
10+
1211
return {
1312
"version": get_distribution("seqrepo-rest-service").version,
1413
"url": "https://github.com/biocommons/seqrepo-rest-service/",
@@ -22,5 +21,5 @@ def get():
2221
"version": bioutils.__version__,
2322
"url": "https://github.com/biocommons/bioutils/",
2423
},
25-
}
24+
},
2625
}

src/seqrepo_rest_service/seqrepo/routes/sequence.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from ...threadglobals import get_seqrepo
77
from ...utils import get_sequence_ids, problem
88

9-
109
_logger = logging.getLogger(__name__)
1110

1211

src/seqrepo_rest_service/threadglobals.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,11 @@
1414
def get_seqrepo():
1515
seqrepo_dir = current_app.config["seqrepo_dir"]
1616
_logger.info(f"Opening {seqrepo_dir=}")
17-
return _get_or_create(
18-
"seqrepo",
19-
lambda: SeqRepo(root_dir=seqrepo_dir))
17+
return _get_or_create("seqrepo", lambda: SeqRepo(root_dir=seqrepo_dir))
2018

2119

2220
def _get_or_create(k, f):
23-
k = '_' + k
21+
k = "_" + k
2422
o = getattr(g, k, None)
2523
if o is None:
2624
o = f()

src/seqrepo_rest_service/utils.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1+
import logging
2+
import re
13
from base64 import urlsafe_b64decode, urlsafe_b64encode
24
from binascii import hexlify, unhexlify
35
from http.client import responses as http_responses
4-
import logging
5-
import re
66

77
import connexion
8-
98
from bioutils.accessions import infer_namespaces
109

11-
1210
_logger = logging.getLogger(__name__)
1311

1412

@@ -19,35 +17,37 @@
1917
"application/json",
2018
"text/plain",
2119
"*/*",
22-
]
20+
]
2321

2422

2523
def hex_to_base64url(s):
2624
return urlsafe_b64encode(unhexlify(s)).decode("ascii")
2725

26+
2827
def base64url_to_hex(s):
2928
return hexlify(urlsafe_b64decode(s)).decode("ascii")
3029

30+
3131
def 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

5353
def 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+
8181
def _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

Comments
 (0)