From c2a1d9ccbc906bb37e7d5bf137aae339bcbd069f Mon Sep 17 00:00:00 2001 From: korikuzma Date: Fri, 13 Jan 2023 10:50:06 -0500 Subject: [PATCH 01/10] feat: Add validation to _from_gnomad in translator - Update regex for input str - Validate that expected reference sequence matches actual reference sequence --- src/ga4gh/vrs/extras/translator.py | 25 +- tests/extras/cassettes/test_annotate_vcf.yaml | 4698 ++++++----------- tests/extras/cassettes/test_from_beacon.yaml | 32 +- tests/extras/cassettes/test_from_gnomad.yaml | 62 + tests/extras/cassettes/test_from_hgvs.yaml | 46 +- .../test_get_vrs_object_invalid_input.yaml | 36 +- ...s[NC_000013.11:g.32936732=-expected0].yaml | 62 +- tests/extras/cassettes/test_to_spdi.yaml | 188 +- tests/extras/test_translator.py | 21 +- tests/extras/test_vcf_annotation.py | 2 +- 10 files changed, 1947 insertions(+), 3225 deletions(-) create mode 100644 tests/extras/cassettes/test_from_gnomad.yaml diff --git a/src/ga4gh/vrs/extras/translator.py b/src/ga4gh/vrs/extras/translator.py index 5b9d3a1c..e24c92cc 100644 --- a/src/ga4gh/vrs/extras/translator.py +++ b/src/ga4gh/vrs/extras/translator.py @@ -37,7 +37,7 @@ class Translator: """ beacon_re = re.compile(r"(?P[^-]+)\s*:\s*(?P\d+)\s*(?P\w+)\s*>\s*(?P\w+)") - gnomad_re = re.compile(r"(?P[^-]+)-(?P\d+)-(?P\w+)-(?P\w+)") + gnomad_re = re.compile(r"(?P[^-]+)-(?P\d+)-(?P(?i)[ACGTN]+)-(?P(?i)[ACGTN]+|\*|\.)") hgvs_re = re.compile(r"[^:]+:[cgnpr]\.") spdi_re = re.compile(r"(?P[^:]+):(?P\d+):(?P\w*):(?P\w*)") @@ -163,7 +163,6 @@ def _from_gnomad(self, gnomad_expr, assembly_name=None): 'type': 'Allele'} """ - if not isinstance(gnomad_expr, str): return None m = self.gnomad_re.match(gnomad_expr) @@ -175,11 +174,14 @@ def _from_gnomad(self, gnomad_expr, assembly_name=None): assembly_name = self.default_assembly_name sequence_id = assembly_name + ":" + g["chr"] start = int(g["pos"]) - 1 - ref = g["ref"] - alt = g["alt"] + ref = g["ref"].upper() + alt = g["alt"].upper() end = start + len(ref) ins_seq = alt + if not self._is_valid_ref_seq(sequence_id, start, end, ref): + return None + interval = models.SequenceInterval(start=models.Number(value=start), end=models.Number(value=end)) location = models.SequenceLocation(sequence_id=sequence_id, interval=interval) @@ -451,6 +453,21 @@ def _to_spdi(self, vo, namespace="refseq"): return spdis + def _is_valid_ref_seq(self, sequence_id: str, start_pos: int, end_pos: int, ref: str) -> bool: + """Return wether or not the expected reference sequence matches the actual reference sequence + + :param str sequence_id: Sequence ID to use + :param int start_pos: Start pos (inter-residue) on the sequence_id + :param int end_pos: End pos (inter-residue) on the sequence_id + :param str ref: The expected reference sequence on the sequence_id given the + start_pos and end_pos + :return: `True` if the actual reference sequence matches the expected reference + sequence. `False` otherwise. + """ + actual_ref = self.data_proxy.get_sequence(sequence_id, start_pos, end_pos) + return actual_ref == ref + + def is_valid_allele(self, vo): return (vo.type == "Allele" and vo.location.type == "SequenceLocation" diff --git a/tests/extras/cassettes/test_annotate_vcf.yaml b/tests/extras/cassettes/test_annotate_vcf.yaml index 65f9fe27..a5938951 100644 --- a/tests/extras/cassettes/test_annotate_vcf.yaml +++ b/tests/extras/cassettes/test_annotate_vcf.yaml @@ -1,4 +1,34 @@ interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=82663&end=82664 + response: + body: + string: C + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:40 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK - request: body: null headers: @@ -35,7 +65,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -77,7 +107,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -107,7 +137,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=82663&end=82664 + response: + body: + string: C + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -149,7 +209,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -179,7 +239,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -209,7 +269,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -239,7 +299,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -269,7 +329,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -299,7 +359,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=284349&end=284351 + response: + body: + string: CA + headers: + Connection: + - close + Content-Length: + - '2' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -341,7 +431,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -371,7 +461,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=284349&end=284351 + response: + body: + string: CA + headers: + Connection: + - close + Content-Length: + - '2' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -413,7 +533,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -443,7 +563,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -473,7 +593,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -503,7 +623,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -533,7 +653,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -563,7 +683,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -593,7 +713,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -623,7 +743,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -653,7 +773,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -683,7 +803,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -713,7 +833,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -743,7 +863,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -773,7 +893,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -803,7 +923,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -833,7 +953,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -863,7 +983,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -893,7 +1013,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -923,7 +1043,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -953,7 +1073,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -983,7 +1103,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1013,7 +1133,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=289463&end=289464 + response: + body: + string: T + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1055,7 +1205,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1085,7 +1235,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=289463&end=289464 + response: + body: + string: T + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1127,7 +1307,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1157,7 +1337,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1187,7 +1367,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1217,7 +1397,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1247,7 +1427,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1277,7 +1457,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:25 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1307,7 +1487,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1337,7 +1517,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:40 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=28946399&end=28946400 + response: + body: + string: T + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1379,7 +1589,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1409,7 +1619,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:40 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=28946399&end=28946400 + response: + body: + string: T + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1451,7 +1691,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1481,7 +1721,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1511,7 +1751,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1541,7 +1781,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1571,7 +1811,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:40 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1601,7 +1841,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=490413&end=490416 + response: + body: + string: ACT + headers: + Connection: + - close + Content-Length: + - '3' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1643,7 +1913,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1673,7 +1943,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1691,12 +1961,42 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=490413&end=490416 response: body: - string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n - \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n - \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n + string: ACT + headers: + Connection: + - close + Content-Length: + - '3' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:41 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl + response: + body: + string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n + \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n + \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n @@ -1715,7 +2015,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1745,7 +2045,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1775,7 +2075,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1805,7 +2105,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1835,7 +2135,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1865,7 +2165,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=54220023&end=54220024 + response: + body: + string: G + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1907,7 +2237,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1937,7 +2267,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=54220023&end=54220024 + response: + body: + string: G + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -1979,7 +2339,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2009,7 +2369,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2039,7 +2399,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2069,7 +2429,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2099,7 +2459,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2129,7 +2489,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh37:chr19?start=82663&end=82664 + response: + body: + string: C + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2169,7 +2559,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2209,7 +2599,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2239,7 +2629,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh37:chr19?start=82663&end=82664 + response: + body: + string: C + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2279,7 +2699,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2309,7 +2729,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2339,7 +2759,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2369,7 +2789,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2399,7 +2819,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2429,7 +2849,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh37:chr19?start=284349&end=284351 + response: + body: + string: CA + headers: + Connection: + - close + Content-Length: + - '2' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2469,7 +2919,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2499,7 +2949,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh37:chr19?start=284349&end=284351 + response: + body: + string: CA + headers: + Connection: + - close + Content-Length: + - '2' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2539,7 +3019,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2569,7 +3049,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2599,7 +3079,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2629,7 +3109,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:41 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2659,7 +3139,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2689,7 +3169,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:26 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2719,7 +3199,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2749,7 +3229,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2779,7 +3259,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2809,7 +3289,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2839,7 +3319,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2869,7 +3349,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2899,7 +3379,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2929,7 +3409,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2959,7 +3439,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -2989,7 +3469,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3019,7 +3499,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3049,7 +3529,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3079,7 +3559,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3109,7 +3589,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3139,7 +3619,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh37:chr19?start=289463&end=289464 + response: + body: + string: T + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3179,7 +3689,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3209,7 +3719,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh37:chr19?start=289463&end=289464 + response: + body: + string: T + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3249,7 +3789,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3279,7 +3819,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3309,7 +3849,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3339,7 +3879,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3369,7 +3909,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:42 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3399,7 +3939,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3429,7 +3969,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3459,7 +3999,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3477,137 +4017,7 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX - response: - body: - string: "{\n \"added\": \"2016-08-24T05:11:23Z\",\n \"aliases\": [\n \"GRCh37:19\",\n - \ \"GRCh37:chr19\",\n \"GRCh37.p10:19\",\n \"GRCh37.p10:chr19\",\n - \ \"GRCh37.p11:19\",\n \"GRCh37.p11:chr19\",\n \"GRCh37.p12:19\",\n - \ \"GRCh37.p12:chr19\",\n \"GRCh37.p13:19\",\n \"GRCh37.p13:chr19\",\n - \ \"GRCh37.p2:19\",\n \"GRCh37.p2:chr19\",\n \"GRCh37.p5:19\",\n \"GRCh37.p5:chr19\",\n - \ \"GRCh37.p9:19\",\n \"GRCh37.p9:chr19\",\n \"MD5:1aacd71f30db8e561810913e0b72636d\",\n - \ \"NCBI:NC_000019.9\",\n \"refseq:NC_000019.9\",\n \"SEGUID:DbxQSFOgAziBmfglM/SHER/3UoI\",\n - \ \"SHA1:0dbc504853a003388199f82533f487111ff75282\",\n \"VMC:GS_ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n - \ \"sha512t24u:ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n \"ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n - \ \"hs37-1kg:19\",\n \"hs37d5:19\"\n ],\n \"alphabet\": \"ACGNT\",\n - \ \"length\": 59128983\n}\n" - headers: - Connection: - - close - Content-Length: - - '820' - Content-Type: - - application/json - Date: - - Thu, 08 Dec 2022 16:55:27 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=28946399&end=28946400 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:27 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=28946398&end=28946399 - response: - body: - string: G - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:27 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=28946400&end=28946401 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:27 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=28946400&end=28946401 + uri: http://localhost:5000/seqrepo/1/sequence/GRCh37:chr19?start=28946399&end=28946400 response: body: string: A @@ -3619,107 +4029,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:27 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=28946399&end=28946399 - response: - body: - string: '' - headers: - Connection: - - close - Content-Length: - - '0' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:27 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=28946400&end=28946400 - response: - body: - string: '' - headers: - Connection: - - close - Content-Length: - - '0' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:27 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX - response: - body: - string: "{\n \"added\": \"2016-08-24T05:11:23Z\",\n \"aliases\": [\n \"GRCh37:19\",\n - \ \"GRCh37:chr19\",\n \"GRCh37.p10:19\",\n \"GRCh37.p10:chr19\",\n - \ \"GRCh37.p11:19\",\n \"GRCh37.p11:chr19\",\n \"GRCh37.p12:19\",\n - \ \"GRCh37.p12:chr19\",\n \"GRCh37.p13:19\",\n \"GRCh37.p13:chr19\",\n - \ \"GRCh37.p2:19\",\n \"GRCh37.p2:chr19\",\n \"GRCh37.p5:19\",\n \"GRCh37.p5:chr19\",\n - \ \"GRCh37.p9:19\",\n \"GRCh37.p9:chr19\",\n \"MD5:1aacd71f30db8e561810913e0b72636d\",\n - \ \"NCBI:NC_000019.9\",\n \"refseq:NC_000019.9\",\n \"SEGUID:DbxQSFOgAziBmfglM/SHER/3UoI\",\n - \ \"SHA1:0dbc504853a003388199f82533f487111ff75282\",\n \"VMC:GS_ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n - \ \"sha512t24u:ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n \"ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n - \ \"hs37-1kg:19\",\n \"hs37d5:19\"\n ],\n \"alphabet\": \"ACGNT\",\n - \ \"length\": 59128983\n}\n" - headers: - Connection: - - close - Content-Length: - - '820' - Content-Type: - - application/json - Date: - - Thu, 08 Dec 2022 16:55:28 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3737,7 +4047,7 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=28946399&end=28946400 + uri: http://localhost:5000/seqrepo/1/sequence/GRCh37:chr19?start=28946399&end=28946400 response: body: string: A @@ -3749,37 +4059,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=28946398&end=28946399 - response: - body: - string: G - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -3797,2567 +4077,7 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=28946400&end=28946401 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=28946400&end=28946401 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=28946399&end=28946399 - response: - body: - string: '' - headers: - Connection: - - close - Content-Length: - - '0' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=28946400&end=28946400 - response: - body: - string: '' - headers: - Connection: - - close - Content-Length: - - '0' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX - response: - body: - string: "{\n \"added\": \"2016-08-24T05:11:23Z\",\n \"aliases\": [\n \"GRCh37:19\",\n - \ \"GRCh37:chr19\",\n \"GRCh37.p10:19\",\n \"GRCh37.p10:chr19\",\n - \ \"GRCh37.p11:19\",\n \"GRCh37.p11:chr19\",\n \"GRCh37.p12:19\",\n - \ \"GRCh37.p12:chr19\",\n \"GRCh37.p13:19\",\n \"GRCh37.p13:chr19\",\n - \ \"GRCh37.p2:19\",\n \"GRCh37.p2:chr19\",\n \"GRCh37.p5:19\",\n \"GRCh37.p5:chr19\",\n - \ \"GRCh37.p9:19\",\n \"GRCh37.p9:chr19\",\n \"MD5:1aacd71f30db8e561810913e0b72636d\",\n - \ \"NCBI:NC_000019.9\",\n \"refseq:NC_000019.9\",\n \"SEGUID:DbxQSFOgAziBmfglM/SHER/3UoI\",\n - \ \"SHA1:0dbc504853a003388199f82533f487111ff75282\",\n \"VMC:GS_ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n - \ \"sha512t24u:ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n \"ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n - \ \"hs37-1kg:19\",\n \"hs37d5:19\"\n ],\n \"alphabet\": \"ACGNT\",\n - \ \"length\": 59128983\n}\n" - headers: - Connection: - - close - Content-Length: - - '820' - Content-Type: - - application/json - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=490413&end=490416 - response: - body: - string: ACT - headers: - Connection: - - close - Content-Length: - - '3' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX - response: - body: - string: "{\n \"added\": \"2016-08-24T05:11:23Z\",\n \"aliases\": [\n \"GRCh37:19\",\n - \ \"GRCh37:chr19\",\n \"GRCh37.p10:19\",\n \"GRCh37.p10:chr19\",\n - \ \"GRCh37.p11:19\",\n \"GRCh37.p11:chr19\",\n \"GRCh37.p12:19\",\n - \ \"GRCh37.p12:chr19\",\n \"GRCh37.p13:19\",\n \"GRCh37.p13:chr19\",\n - \ \"GRCh37.p2:19\",\n \"GRCh37.p2:chr19\",\n \"GRCh37.p5:19\",\n \"GRCh37.p5:chr19\",\n - \ \"GRCh37.p9:19\",\n \"GRCh37.p9:chr19\",\n \"MD5:1aacd71f30db8e561810913e0b72636d\",\n - \ \"NCBI:NC_000019.9\",\n \"refseq:NC_000019.9\",\n \"SEGUID:DbxQSFOgAziBmfglM/SHER/3UoI\",\n - \ \"SHA1:0dbc504853a003388199f82533f487111ff75282\",\n \"VMC:GS_ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n - \ \"sha512t24u:ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n \"ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n - \ \"hs37-1kg:19\",\n \"hs37d5:19\"\n ],\n \"alphabet\": \"ACGNT\",\n - \ \"length\": 59128983\n}\n" - headers: - Connection: - - close - Content-Length: - - '820' - Content-Type: - - application/json - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=490413&end=490416 - response: - body: - string: ACT - headers: - Connection: - - close - Content-Length: - - '3' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=490413&end=490414 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=490416&end=490417 - response: - body: - string: G - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=490414&end=490414 - response: - body: - string: '' - headers: - Connection: - - close - Content-Length: - - '0' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=490416&end=490416 - response: - body: - string: '' - headers: - Connection: - - close - Content-Length: - - '0' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX - response: - body: - string: "{\n \"added\": \"2016-08-24T05:11:23Z\",\n \"aliases\": [\n \"GRCh37:19\",\n - \ \"GRCh37:chr19\",\n \"GRCh37.p10:19\",\n \"GRCh37.p10:chr19\",\n - \ \"GRCh37.p11:19\",\n \"GRCh37.p11:chr19\",\n \"GRCh37.p12:19\",\n - \ \"GRCh37.p12:chr19\",\n \"GRCh37.p13:19\",\n \"GRCh37.p13:chr19\",\n - \ \"GRCh37.p2:19\",\n \"GRCh37.p2:chr19\",\n \"GRCh37.p5:19\",\n \"GRCh37.p5:chr19\",\n - \ \"GRCh37.p9:19\",\n \"GRCh37.p9:chr19\",\n \"MD5:1aacd71f30db8e561810913e0b72636d\",\n - \ \"NCBI:NC_000019.9\",\n \"refseq:NC_000019.9\",\n \"SEGUID:DbxQSFOgAziBmfglM/SHER/3UoI\",\n - \ \"SHA1:0dbc504853a003388199f82533f487111ff75282\",\n \"VMC:GS_ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n - \ \"sha512t24u:ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n \"ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n - \ \"hs37-1kg:19\",\n \"hs37d5:19\"\n ],\n \"alphabet\": \"ACGNT\",\n - \ \"length\": 59128983\n}\n" - headers: - Connection: - - close - Content-Length: - - '820' - Content-Type: - - application/json - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=54220023&end=54220024 - response: - body: - string: T - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=54220022&end=54220023 - response: - body: - string: T - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=54220022&end=54220023 - response: - body: - string: T - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=54220024&end=54220025 - response: - body: - string: T - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=54220024&end=54220025 - response: - body: - string: T - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=54220023&end=54220023 - response: - body: - string: '' - headers: - Connection: - - close - Content-Length: - - '0' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=54220024&end=54220024 - response: - body: - string: '' - headers: - Connection: - - close - Content-Length: - - '0' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX - response: - body: - string: "{\n \"added\": \"2016-08-24T05:11:23Z\",\n \"aliases\": [\n \"GRCh37:19\",\n - \ \"GRCh37:chr19\",\n \"GRCh37.p10:19\",\n \"GRCh37.p10:chr19\",\n - \ \"GRCh37.p11:19\",\n \"GRCh37.p11:chr19\",\n \"GRCh37.p12:19\",\n - \ \"GRCh37.p12:chr19\",\n \"GRCh37.p13:19\",\n \"GRCh37.p13:chr19\",\n - \ \"GRCh37.p2:19\",\n \"GRCh37.p2:chr19\",\n \"GRCh37.p5:19\",\n \"GRCh37.p5:chr19\",\n - \ \"GRCh37.p9:19\",\n \"GRCh37.p9:chr19\",\n \"MD5:1aacd71f30db8e561810913e0b72636d\",\n - \ \"NCBI:NC_000019.9\",\n \"refseq:NC_000019.9\",\n \"SEGUID:DbxQSFOgAziBmfglM/SHER/3UoI\",\n - \ \"SHA1:0dbc504853a003388199f82533f487111ff75282\",\n \"VMC:GS_ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n - \ \"sha512t24u:ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n \"ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n - \ \"hs37-1kg:19\",\n \"hs37d5:19\"\n ],\n \"alphabet\": \"ACGNT\",\n - \ \"length\": 59128983\n}\n" - headers: - Connection: - - close - Content-Length: - - '820' - Content-Type: - - application/json - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=54220023&end=54220024 - response: - body: - string: T - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=54220022&end=54220023 - response: - body: - string: T - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=54220022&end=54220023 - response: - body: - string: T - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=54220024&end=54220025 - response: - body: - string: T - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=54220024&end=54220025 - response: - body: - string: T - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=54220023&end=54220023 - response: - body: - string: '' - headers: - Connection: - - close - Content-Length: - - '0' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=54220024&end=54220024 - response: - body: - string: '' - headers: - Connection: - - close - Content-Length: - - '0' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl - response: - body: - string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n - \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n - \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n - \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n - \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n - \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n - \ \"GRCh38.p5:19\",\n \"GRCh38.p5:chr19\",\n \"GRCh38.p6:19\",\n \"GRCh38.p6:chr19\",\n - \ \"GRCh38.p7:19\",\n \"GRCh38.p7:chr19\",\n \"GRCh38.p8:19\",\n \"GRCh38.p8:chr19\",\n - \ \"GRCh38.p9:19\",\n \"GRCh38.p9:chr19\",\n \"MD5:b0eba2c7bb5c953d1e06a508b5e487de\",\n - \ \"NCBI:NC_000019.10\",\n \"refseq:NC_000019.10\",\n \"SEGUID:AHxM5/L8jIX08UhBBkKXkiO5rhY\",\n - \ \"SHA1:007c4ce7f2fc8c85f4f148410642979223b9ae16\",\n \"VMC:GS_IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n - \ \"sha512t24u:IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n \"ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\"\n - \ ],\n \"alphabet\": \"ACGNT\",\n \"length\": 58617616\n}\n" - headers: - Connection: - - close - Content-Length: - - '1035' - Content-Type: - - application/json - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=82663&end=82664 - response: - body: - string: C - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl - response: - body: - string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n - \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n - \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n - \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n - \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n - \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n - \ \"GRCh38.p5:19\",\n \"GRCh38.p5:chr19\",\n \"GRCh38.p6:19\",\n \"GRCh38.p6:chr19\",\n - \ \"GRCh38.p7:19\",\n \"GRCh38.p7:chr19\",\n \"GRCh38.p8:19\",\n \"GRCh38.p8:chr19\",\n - \ \"GRCh38.p9:19\",\n \"GRCh38.p9:chr19\",\n \"MD5:b0eba2c7bb5c953d1e06a508b5e487de\",\n - \ \"NCBI:NC_000019.10\",\n \"refseq:NC_000019.10\",\n \"SEGUID:AHxM5/L8jIX08UhBBkKXkiO5rhY\",\n - \ \"SHA1:007c4ce7f2fc8c85f4f148410642979223b9ae16\",\n \"VMC:GS_IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n - \ \"sha512t24u:IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n \"ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\"\n - \ ],\n \"alphabet\": \"ACGNT\",\n \"length\": 58617616\n}\n" - headers: - Connection: - - close - Content-Length: - - '1035' - Content-Type: - - application/json - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=82663&end=82664 - response: - body: - string: C - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:28 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=82662&end=82663 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=82664&end=82665 - response: - body: - string: G - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=82663&end=82663 - response: - body: - string: '' - headers: - Connection: - - close - Content-Length: - - '0' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=82664&end=82664 - response: - body: - string: '' - headers: - Connection: - - close - Content-Length: - - '0' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl - response: - body: - string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n - \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n - \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n - \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n - \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n - \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n - \ \"GRCh38.p5:19\",\n \"GRCh38.p5:chr19\",\n \"GRCh38.p6:19\",\n \"GRCh38.p6:chr19\",\n - \ \"GRCh38.p7:19\",\n \"GRCh38.p7:chr19\",\n \"GRCh38.p8:19\",\n \"GRCh38.p8:chr19\",\n - \ \"GRCh38.p9:19\",\n \"GRCh38.p9:chr19\",\n \"MD5:b0eba2c7bb5c953d1e06a508b5e487de\",\n - \ \"NCBI:NC_000019.10\",\n \"refseq:NC_000019.10\",\n \"SEGUID:AHxM5/L8jIX08UhBBkKXkiO5rhY\",\n - \ \"SHA1:007c4ce7f2fc8c85f4f148410642979223b9ae16\",\n \"VMC:GS_IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n - \ \"sha512t24u:IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n \"ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\"\n - \ ],\n \"alphabet\": \"ACGNT\",\n \"length\": 58617616\n}\n" - headers: - Connection: - - close - Content-Length: - - '1035' - Content-Type: - - application/json - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284349&end=284351 - response: - body: - string: CA - headers: - Connection: - - close - Content-Length: - - '2' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl - response: - body: - string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n - \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n - \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n - \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n - \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n - \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n - \ \"GRCh38.p5:19\",\n \"GRCh38.p5:chr19\",\n \"GRCh38.p6:19\",\n \"GRCh38.p6:chr19\",\n - \ \"GRCh38.p7:19\",\n \"GRCh38.p7:chr19\",\n \"GRCh38.p8:19\",\n \"GRCh38.p8:chr19\",\n - \ \"GRCh38.p9:19\",\n \"GRCh38.p9:chr19\",\n \"MD5:b0eba2c7bb5c953d1e06a508b5e487de\",\n - \ \"NCBI:NC_000019.10\",\n \"refseq:NC_000019.10\",\n \"SEGUID:AHxM5/L8jIX08UhBBkKXkiO5rhY\",\n - \ \"SHA1:007c4ce7f2fc8c85f4f148410642979223b9ae16\",\n \"VMC:GS_IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n - \ \"sha512t24u:IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n \"ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\"\n - \ ],\n \"alphabet\": \"ACGNT\",\n \"length\": 58617616\n}\n" - headers: - Connection: - - close - Content-Length: - - '1035' - Content-Type: - - application/json - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284349&end=284351 - response: - body: - string: CA - headers: - Connection: - - close - Content-Length: - - '2' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284349&end=284350 - response: - body: - string: C - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284351&end=284352 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284352&end=284353 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284353&end=284354 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284354&end=284355 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284355&end=284356 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284356&end=284357 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284357&end=284358 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284358&end=284359 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284359&end=284360 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284360&end=284361 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284361&end=284362 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284362&end=284363 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284363&end=284364 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284364&end=284365 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284365&end=284366 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284366&end=284367 - response: - body: - string: T - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284350&end=284350 - response: - body: - string: '' - headers: - Connection: - - close - Content-Length: - - '0' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=284351&end=284366 - response: - body: - string: AAAAAAAAAAAAAAA - headers: - Connection: - - close - Content-Length: - - '15' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl - response: - body: - string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n - \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n - \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n - \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n - \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n - \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n - \ \"GRCh38.p5:19\",\n \"GRCh38.p5:chr19\",\n \"GRCh38.p6:19\",\n \"GRCh38.p6:chr19\",\n - \ \"GRCh38.p7:19\",\n \"GRCh38.p7:chr19\",\n \"GRCh38.p8:19\",\n \"GRCh38.p8:chr19\",\n - \ \"GRCh38.p9:19\",\n \"GRCh38.p9:chr19\",\n \"MD5:b0eba2c7bb5c953d1e06a508b5e487de\",\n - \ \"NCBI:NC_000019.10\",\n \"refseq:NC_000019.10\",\n \"SEGUID:AHxM5/L8jIX08UhBBkKXkiO5rhY\",\n - \ \"SHA1:007c4ce7f2fc8c85f4f148410642979223b9ae16\",\n \"VMC:GS_IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n - \ \"sha512t24u:IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n \"ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\"\n - \ ],\n \"alphabet\": \"ACGNT\",\n \"length\": 58617616\n}\n" - headers: - Connection: - - close - Content-Length: - - '1035' - Content-Type: - - application/json - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=289463&end=289464 - response: - body: - string: T - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl - response: - body: - string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n - \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n - \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n - \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n - \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n - \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n - \ \"GRCh38.p5:19\",\n \"GRCh38.p5:chr19\",\n \"GRCh38.p6:19\",\n \"GRCh38.p6:chr19\",\n - \ \"GRCh38.p7:19\",\n \"GRCh38.p7:chr19\",\n \"GRCh38.p8:19\",\n \"GRCh38.p8:chr19\",\n - \ \"GRCh38.p9:19\",\n \"GRCh38.p9:chr19\",\n \"MD5:b0eba2c7bb5c953d1e06a508b5e487de\",\n - \ \"NCBI:NC_000019.10\",\n \"refseq:NC_000019.10\",\n \"SEGUID:AHxM5/L8jIX08UhBBkKXkiO5rhY\",\n - \ \"SHA1:007c4ce7f2fc8c85f4f148410642979223b9ae16\",\n \"VMC:GS_IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n - \ \"sha512t24u:IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n \"ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\"\n - \ ],\n \"alphabet\": \"ACGNT\",\n \"length\": 58617616\n}\n" - headers: - Connection: - - close - Content-Length: - - '1035' - Content-Type: - - application/json - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=289463&end=289464 - response: - body: - string: T - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=289463&end=289464 - response: - body: - string: T - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=289464&end=289465 - response: - body: - string: C - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=289465&end=289466 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=289466&end=289467 - response: - body: - string: G - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=289464&end=289464 - response: - body: - string: '' - headers: - Connection: - - close - Content-Length: - - '0' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=289464&end=289466 - response: - body: - string: CA - headers: - Connection: - - close - Content-Length: - - '2' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl - response: - body: - string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n - \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n - \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n - \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n - \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n - \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n - \ \"GRCh38.p5:19\",\n \"GRCh38.p5:chr19\",\n \"GRCh38.p6:19\",\n \"GRCh38.p6:chr19\",\n - \ \"GRCh38.p7:19\",\n \"GRCh38.p7:chr19\",\n \"GRCh38.p8:19\",\n \"GRCh38.p8:chr19\",\n - \ \"GRCh38.p9:19\",\n \"GRCh38.p9:chr19\",\n \"MD5:b0eba2c7bb5c953d1e06a508b5e487de\",\n - \ \"NCBI:NC_000019.10\",\n \"refseq:NC_000019.10\",\n \"SEGUID:AHxM5/L8jIX08UhBBkKXkiO5rhY\",\n - \ \"SHA1:007c4ce7f2fc8c85f4f148410642979223b9ae16\",\n \"VMC:GS_IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n - \ \"sha512t24u:IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n \"ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\"\n - \ ],\n \"alphabet\": \"ACGNT\",\n \"length\": 58617616\n}\n" - headers: - Connection: - - close - Content-Length: - - '1035' - Content-Type: - - application/json - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=28946399&end=28946400 - response: - body: - string: T - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl - response: - body: - string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n - \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n - \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n - \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n - \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n - \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n - \ \"GRCh38.p5:19\",\n \"GRCh38.p5:chr19\",\n \"GRCh38.p6:19\",\n \"GRCh38.p6:chr19\",\n - \ \"GRCh38.p7:19\",\n \"GRCh38.p7:chr19\",\n \"GRCh38.p8:19\",\n \"GRCh38.p8:chr19\",\n - \ \"GRCh38.p9:19\",\n \"GRCh38.p9:chr19\",\n \"MD5:b0eba2c7bb5c953d1e06a508b5e487de\",\n - \ \"NCBI:NC_000019.10\",\n \"refseq:NC_000019.10\",\n \"SEGUID:AHxM5/L8jIX08UhBBkKXkiO5rhY\",\n - \ \"SHA1:007c4ce7f2fc8c85f4f148410642979223b9ae16\",\n \"VMC:GS_IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n - \ \"sha512t24u:IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n \"ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\"\n - \ ],\n \"alphabet\": \"ACGNT\",\n \"length\": 58617616\n}\n" - headers: - Connection: - - close - Content-Length: - - '1035' - Content-Type: - - application/json - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=28946399&end=28946400 - response: - body: - string: T - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=28946398&end=28946399 - response: - body: - string: A - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=28946400&end=28946401 - response: - body: - string: G - headers: - Connection: - - close - Content-Length: - - '1' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=28946399&end=28946399 - response: - body: - string: '' - headers: - Connection: - - close - Content-Length: - - '0' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=28946400&end=28946400 - response: - body: - string: '' - headers: - Connection: - - close - Content-Length: - - '0' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl - response: - body: - string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n - \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n - \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n - \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n - \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n - \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n - \ \"GRCh38.p5:19\",\n \"GRCh38.p5:chr19\",\n \"GRCh38.p6:19\",\n \"GRCh38.p6:chr19\",\n - \ \"GRCh38.p7:19\",\n \"GRCh38.p7:chr19\",\n \"GRCh38.p8:19\",\n \"GRCh38.p8:chr19\",\n - \ \"GRCh38.p9:19\",\n \"GRCh38.p9:chr19\",\n \"MD5:b0eba2c7bb5c953d1e06a508b5e487de\",\n - \ \"NCBI:NC_000019.10\",\n \"refseq:NC_000019.10\",\n \"SEGUID:AHxM5/L8jIX08UhBBkKXkiO5rhY\",\n - \ \"SHA1:007c4ce7f2fc8c85f4f148410642979223b9ae16\",\n \"VMC:GS_IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n - \ \"sha512t24u:IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n \"ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\"\n - \ ],\n \"alphabet\": \"ACGNT\",\n \"length\": 58617616\n}\n" - headers: - Connection: - - close - Content-Length: - - '1035' - Content-Type: - - application/json - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=490413&end=490416 - response: - body: - string: ACT - headers: - Connection: - - close - Content-Length: - - '3' - Content-Type: - - text/plain; charset=utf-8 - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl - response: - body: - string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n - \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n - \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n - \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n - \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n - \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n - \ \"GRCh38.p5:19\",\n \"GRCh38.p5:chr19\",\n \"GRCh38.p6:19\",\n \"GRCh38.p6:chr19\",\n - \ \"GRCh38.p7:19\",\n \"GRCh38.p7:chr19\",\n \"GRCh38.p8:19\",\n \"GRCh38.p8:chr19\",\n - \ \"GRCh38.p9:19\",\n \"GRCh38.p9:chr19\",\n \"MD5:b0eba2c7bb5c953d1e06a508b5e487de\",\n - \ \"NCBI:NC_000019.10\",\n \"refseq:NC_000019.10\",\n \"SEGUID:AHxM5/L8jIX08UhBBkKXkiO5rhY\",\n - \ \"SHA1:007c4ce7f2fc8c85f4f148410642979223b9ae16\",\n \"VMC:GS_IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n - \ \"sha512t24u:IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n \"ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\"\n - \ ],\n \"alphabet\": \"ACGNT\",\n \"length\": 58617616\n}\n" - headers: - Connection: - - close - Content-Length: - - '1035' - Content-Type: - - application/json - Date: - - Thu, 08 Dec 2022 16:55:29 GMT - Server: - - Werkzeug/2.2.2 Python/3.10.4 - status: - code: 200 - message: OK -- request: - body: null - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate - Connection: - - keep-alive - User-Agent: - - python-requests/2.28.1 - method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=490413&end=490416 + uri: http://localhost:5000/seqrepo/1/sequence/GRCh37:chr19?start=490413&end=490416 response: body: string: ACT @@ -6369,7 +4089,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:29 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6387,19 +4107,29 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=490413&end=490414 + uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX response: body: - string: A + string: "{\n \"added\": \"2016-08-24T05:11:23Z\",\n \"aliases\": [\n \"GRCh37:19\",\n + \ \"GRCh37:chr19\",\n \"GRCh37.p10:19\",\n \"GRCh37.p10:chr19\",\n + \ \"GRCh37.p11:19\",\n \"GRCh37.p11:chr19\",\n \"GRCh37.p12:19\",\n + \ \"GRCh37.p12:chr19\",\n \"GRCh37.p13:19\",\n \"GRCh37.p13:chr19\",\n + \ \"GRCh37.p2:19\",\n \"GRCh37.p2:chr19\",\n \"GRCh37.p5:19\",\n \"GRCh37.p5:chr19\",\n + \ \"GRCh37.p9:19\",\n \"GRCh37.p9:chr19\",\n \"MD5:1aacd71f30db8e561810913e0b72636d\",\n + \ \"NCBI:NC_000019.9\",\n \"refseq:NC_000019.9\",\n \"SEGUID:DbxQSFOgAziBmfglM/SHER/3UoI\",\n + \ \"SHA1:0dbc504853a003388199f82533f487111ff75282\",\n \"VMC:GS_ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n + \ \"sha512t24u:ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n \"ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n + \ \"hs37-1kg:19\",\n \"hs37d5:19\"\n ],\n \"alphabet\": \"ACGNT\",\n + \ \"length\": 59128983\n}\n" headers: Connection: - close Content-Length: - - '1' + - '820' Content-Type: - - text/plain; charset=utf-8 + - application/json Date: - - Thu, 08 Dec 2022 16:55:29 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6417,19 +4147,19 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=490416&end=490417 + uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=490413&end=490416 response: body: - string: G + string: ACT headers: Connection: - close Content-Length: - - '1' + - '3' Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:29 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6447,19 +4177,19 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=490414&end=490414 + uri: http://localhost:5000/seqrepo/1/sequence/GRCh37:chr19?start=490413&end=490416 response: body: - string: '' + string: ACT headers: Connection: - close Content-Length: - - '0' + - '3' Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:29 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6477,19 +4207,29 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=490416&end=490416 + uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX response: body: - string: '' + string: "{\n \"added\": \"2016-08-24T05:11:23Z\",\n \"aliases\": [\n \"GRCh37:19\",\n + \ \"GRCh37:chr19\",\n \"GRCh37.p10:19\",\n \"GRCh37.p10:chr19\",\n + \ \"GRCh37.p11:19\",\n \"GRCh37.p11:chr19\",\n \"GRCh37.p12:19\",\n + \ \"GRCh37.p12:chr19\",\n \"GRCh37.p13:19\",\n \"GRCh37.p13:chr19\",\n + \ \"GRCh37.p2:19\",\n \"GRCh37.p2:chr19\",\n \"GRCh37.p5:19\",\n \"GRCh37.p5:chr19\",\n + \ \"GRCh37.p9:19\",\n \"GRCh37.p9:chr19\",\n \"MD5:1aacd71f30db8e561810913e0b72636d\",\n + \ \"NCBI:NC_000019.9\",\n \"refseq:NC_000019.9\",\n \"SEGUID:DbxQSFOgAziBmfglM/SHER/3UoI\",\n + \ \"SHA1:0dbc504853a003388199f82533f487111ff75282\",\n \"VMC:GS_ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n + \ \"sha512t24u:ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n \"ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX\",\n + \ \"hs37-1kg:19\",\n \"hs37d5:19\"\n ],\n \"alphabet\": \"ACGNT\",\n + \ \"length\": 59128983\n}\n" headers: Connection: - close Content-Length: - - '0' + - '820' Content-Type: - - text/plain; charset=utf-8 + - application/json Date: - - Thu, 08 Dec 2022 16:55:29 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6507,31 +4247,19 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl + uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=490413&end=490416 response: body: - string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n - \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n - \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n - \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n - \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n - \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n - \ \"GRCh38.p5:19\",\n \"GRCh38.p5:chr19\",\n \"GRCh38.p6:19\",\n \"GRCh38.p6:chr19\",\n - \ \"GRCh38.p7:19\",\n \"GRCh38.p7:chr19\",\n \"GRCh38.p8:19\",\n \"GRCh38.p8:chr19\",\n - \ \"GRCh38.p9:19\",\n \"GRCh38.p9:chr19\",\n \"MD5:b0eba2c7bb5c953d1e06a508b5e487de\",\n - \ \"NCBI:NC_000019.10\",\n \"refseq:NC_000019.10\",\n \"SEGUID:AHxM5/L8jIX08UhBBkKXkiO5rhY\",\n - \ \"SHA1:007c4ce7f2fc8c85f4f148410642979223b9ae16\",\n \"VMC:GS_IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n - \ \"sha512t24u:IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n \"ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\"\n - \ ],\n \"alphabet\": \"ACGNT\",\n \"length\": 58617616\n}\n" + string: ACT headers: Connection: - close Content-Length: - - '1035' + - '3' Content-Type: - - application/json + - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:29 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6549,10 +4277,10 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=54220023&end=54220024 + uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=490413&end=490414 response: body: - string: G + string: A headers: Connection: - close @@ -6561,7 +4289,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:29 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6579,31 +4307,19 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl + uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=490416&end=490417 response: body: - string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n - \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n - \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n - \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n - \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n - \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n - \ \"GRCh38.p5:19\",\n \"GRCh38.p5:chr19\",\n \"GRCh38.p6:19\",\n \"GRCh38.p6:chr19\",\n - \ \"GRCh38.p7:19\",\n \"GRCh38.p7:chr19\",\n \"GRCh38.p8:19\",\n \"GRCh38.p8:chr19\",\n - \ \"GRCh38.p9:19\",\n \"GRCh38.p9:chr19\",\n \"MD5:b0eba2c7bb5c953d1e06a508b5e487de\",\n - \ \"NCBI:NC_000019.10\",\n \"refseq:NC_000019.10\",\n \"SEGUID:AHxM5/L8jIX08UhBBkKXkiO5rhY\",\n - \ \"SHA1:007c4ce7f2fc8c85f4f148410642979223b9ae16\",\n \"VMC:GS_IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n - \ \"sha512t24u:IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n \"ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\"\n - \ ],\n \"alphabet\": \"ACGNT\",\n \"length\": 58617616\n}\n" + string: G headers: Connection: - close Content-Length: - - '1035' + - '1' Content-Type: - - application/json + - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:29 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6621,19 +4337,19 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=54220023&end=54220024 + uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=490414&end=490414 response: body: - string: G + string: '' headers: Connection: - close Content-Length: - - '1' + - '0' Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:29 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6651,19 +4367,19 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=54220022&end=54220023 + uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.ItRDD47aMoioDCNW_occY5fWKZBKlxCX?start=490416&end=490416 response: body: - string: C + string: '' headers: Connection: - close Content-Length: - - '1' + - '0' Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6681,10 +4397,10 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=54220024&end=54220025 + uri: http://localhost:5000/seqrepo/1/sequence/GRCh37:chr19?start=54220023&end=54220024 response: body: - string: C + string: T headers: Connection: - close @@ -6693,7 +4409,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6711,19 +4427,19 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=54220023&end=54220023 + uri: http://localhost:5000/seqrepo/1/sequence/GRCh37:chr19?start=54220023&end=54220024 response: body: - string: '' + string: T headers: Connection: - close Content-Length: - - '0' + - '1' Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6741,19 +4457,19 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=54220024&end=54220024 + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=82663&end=82664 response: body: - string: '' + string: C headers: Connection: - close Content-Length: - - '0' + - '1' Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6795,7 +4511,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6825,7 +4541,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=82663&end=82664 + response: + body: + string: C + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6867,7 +4613,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6897,7 +4643,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6927,7 +4673,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6957,7 +4703,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -6987,7 +4733,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7017,7 +4763,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=284349&end=284351 + response: + body: + string: CA + headers: + Connection: + - close + Content-Length: + - '2' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7059,7 +4835,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7089,7 +4865,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=284349&end=284351 + response: + body: + string: CA + headers: + Connection: + - close + Content-Length: + - '2' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7131,7 +4937,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7161,7 +4967,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7191,7 +4997,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7221,7 +5027,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7251,7 +5057,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7281,7 +5087,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7311,7 +5117,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7341,7 +5147,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7371,7 +5177,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:43 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7401,7 +5207,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7431,7 +5237,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7461,7 +5267,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7491,7 +5297,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7521,7 +5327,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7551,7 +5357,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7581,7 +5387,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7611,7 +5417,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7641,7 +5447,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7671,7 +5477,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7701,7 +5507,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7731,7 +5537,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=289463&end=289464 + response: + body: + string: T + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7771,9 +5607,39 @@ interactions: Content-Length: - '1035' Content-Type: - - application/json + - application/json + Date: + - Fri, 13 Jan 2023 15:42:44 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=289463&end=289464 + response: + body: + string: T + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7791,7 +5657,7 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=289463&end=289464 + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=289463&end=289464 response: body: string: T @@ -7803,7 +5669,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7845,7 +5711,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7875,7 +5741,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7905,7 +5771,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7935,7 +5801,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7965,7 +5831,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -7995,7 +5861,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8025,7 +5891,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8055,7 +5921,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=28946399&end=28946400 + response: + body: + string: T + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8097,7 +5993,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8127,7 +6023,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=28946399&end=28946400 + response: + body: + string: T + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8169,7 +6095,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:30 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8199,7 +6125,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8229,7 +6155,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8259,7 +6185,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8289,7 +6215,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8319,7 +6245,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=490413&end=490416 + response: + body: + string: ACT + headers: + Connection: + - close + Content-Length: + - '3' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8361,7 +6317,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8391,7 +6347,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=490413&end=490416 + response: + body: + string: ACT + headers: + Connection: + - close + Content-Length: + - '3' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8433,7 +6419,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8463,7 +6449,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8493,7 +6479,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8523,7 +6509,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8553,7 +6539,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8583,7 +6569,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=54220023&end=54220024 + response: + body: + string: G + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8625,7 +6641,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8655,7 +6671,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=54220023&end=54220024 + response: + body: + string: G + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8697,7 +6743,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8727,7 +6773,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8757,7 +6803,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8787,7 +6833,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8817,7 +6863,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8847,7 +6893,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=82663&end=82664 + response: + body: + string: C + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8889,7 +6965,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8919,7 +6995,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:44 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=82663&end=82664 + response: + body: + string: C + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:44 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8961,7 +7067,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -8991,7 +7097,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9021,7 +7127,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9051,7 +7157,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9081,7 +7187,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9102,16 +7208,46 @@ interactions: uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=82664&end=82664 response: body: - string: '' + string: '' + headers: + Connection: + - close + Content-Length: + - '0' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:45 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=284349&end=284351 + response: + body: + string: CA headers: Connection: - close Content-Length: - - '0' + - '2' Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9153,7 +7289,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9183,7 +7319,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=284349&end=284351 + response: + body: + string: CA + headers: + Connection: + - close + Content-Length: + - '2' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9225,7 +7391,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9255,7 +7421,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9285,7 +7451,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9315,7 +7481,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9345,7 +7511,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9375,7 +7541,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9405,7 +7571,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9435,7 +7601,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9465,7 +7631,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9495,7 +7661,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9525,7 +7691,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9555,7 +7721,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9585,7 +7751,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9615,7 +7781,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9645,7 +7811,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9675,7 +7841,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9705,7 +7871,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9735,7 +7901,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9765,7 +7931,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9795,7 +7961,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9825,7 +7991,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=289463&end=289464 + response: + body: + string: T + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9867,7 +8063,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:31 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9897,7 +8093,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=289463&end=289464 + response: + body: + string: T + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9939,7 +8165,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9969,7 +8195,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -9999,7 +8225,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10029,7 +8255,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10059,7 +8285,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10089,7 +8315,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10119,7 +8345,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10149,7 +8375,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=28946399&end=28946400 + response: + body: + string: T + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10191,7 +8447,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10221,7 +8477,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=28946399&end=28946400 + response: + body: + string: T + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10263,7 +8549,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10293,7 +8579,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10323,7 +8609,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10353,7 +8639,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10383,7 +8669,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10413,7 +8699,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=490413&end=490416 + response: + body: + string: ACT + headers: + Connection: + - close + Content-Length: + - '3' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10455,7 +8771,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10485,7 +8801,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:45 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=490413&end=490416 + response: + body: + string: ACT + headers: + Connection: + - close + Content-Length: + - '3' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:46 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10527,7 +8873,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:46 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10557,7 +8903,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:46 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10587,7 +8933,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:46 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10617,7 +8963,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:46 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10647,7 +8993,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:46 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10677,7 +9023,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:46 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=54220023&end=54220024 + response: + body: + string: G + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:46 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10719,7 +9095,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:46 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10749,7 +9125,37 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:46 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:chr19?start=54220023&end=54220024 + response: + body: + string: G + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:42:46 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10791,7 +9197,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:46 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10821,7 +9227,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:46 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10851,7 +9257,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:46 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10881,7 +9287,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:46 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10911,7 +9317,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:46 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -10941,7 +9347,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Thu, 08 Dec 2022 16:55:32 GMT + - Fri, 13 Jan 2023 15:42:46 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: diff --git a/tests/extras/cassettes/test_from_beacon.yaml b/tests/extras/cassettes/test_from_beacon.yaml index 4258c105..62e90394 100644 --- a/tests/extras/cassettes/test_from_beacon.yaml +++ b/tests/extras/cassettes/test_from_beacon.yaml @@ -11,31 +11,31 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/metadata/GRCh38:13 + uri: http://localhost:5000/seqrepo/1/metadata/GRCh38:19 response: body: - string: "{\n \"added\": \"2016-08-27T23:50:14Z\",\n \"aliases\": [\n \"GRCh38:13\",\n - \ \"GRCh38:chr13\",\n \"GRCh38.p1:13\",\n \"GRCh38.p1:chr13\",\n \"GRCh38.p10:13\",\n - \ \"GRCh38.p10:chr13\",\n \"GRCh38.p11:13\",\n \"GRCh38.p11:chr13\",\n - \ \"GRCh38.p12:13\",\n \"GRCh38.p12:chr13\",\n \"GRCh38.p2:13\",\n - \ \"GRCh38.p2:chr13\",\n \"GRCh38.p3:13\",\n \"GRCh38.p3:chr13\",\n - \ \"GRCh38.p4:13\",\n \"GRCh38.p4:chr13\",\n \"GRCh38.p5:13\",\n \"GRCh38.p5:chr13\",\n - \ \"GRCh38.p6:13\",\n \"GRCh38.p6:chr13\",\n \"GRCh38.p7:13\",\n \"GRCh38.p7:chr13\",\n - \ \"GRCh38.p8:13\",\n \"GRCh38.p8:chr13\",\n \"GRCh38.p9:13\",\n \"GRCh38.p9:chr13\",\n - \ \"MD5:a5437debe2ef9c9ef8f3ea2874ae1d82\",\n \"NCBI:NC_000013.11\",\n - \ \"refseq:NC_000013.11\",\n \"SEGUID:2oDBty0yKV9wHo7gg+Bt+fPgi5o\",\n - \ \"SHA1:da80c1b72d32295f701e8ee083e06df9f3e08b9a\",\n \"VMC:GS__0wi-qoDrvram155UmcSC-zA5ZK4fpLT\",\n - \ \"sha512t24u:_0wi-qoDrvram155UmcSC-zA5ZK4fpLT\",\n \"ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT\"\n - \ ],\n \"alphabet\": \"ACGKNTY\",\n \"length\": 114364328\n}\n" + string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n + \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n + \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n + \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n + \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n + \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n + \ \"GRCh38.p5:19\",\n \"GRCh38.p5:chr19\",\n \"GRCh38.p6:19\",\n \"GRCh38.p6:chr19\",\n + \ \"GRCh38.p7:19\",\n \"GRCh38.p7:chr19\",\n \"GRCh38.p8:19\",\n \"GRCh38.p8:chr19\",\n + \ \"GRCh38.p9:19\",\n \"GRCh38.p9:chr19\",\n \"MD5:b0eba2c7bb5c953d1e06a508b5e487de\",\n + \ \"NCBI:NC_000019.10\",\n \"refseq:NC_000019.10\",\n \"SEGUID:AHxM5/L8jIX08UhBBkKXkiO5rhY\",\n + \ \"SHA1:007c4ce7f2fc8c85f4f148410642979223b9ae16\",\n \"VMC:GS_IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n + \ \"sha512t24u:IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n \"ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\"\n + \ ],\n \"alphabet\": \"ACGNT\",\n \"length\": 58617616\n}\n" headers: Connection: - close Content-Length: - - '1002' + - '1035' Content-Type: - application/json Date: - - Mon, 19 Sep 2022 13:14:12 GMT + - Fri, 13 Jan 2023 15:27:53 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: diff --git a/tests/extras/cassettes/test_from_gnomad.yaml b/tests/extras/cassettes/test_from_gnomad.yaml new file mode 100644 index 00000000..bfa91d3b --- /dev/null +++ b/tests/extras/cassettes/test_from_gnomad.yaml @@ -0,0 +1,62 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:19?start=44908821&end=44908822 + response: + body: + string: C + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:27:53 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:13?start=32936731&end=32936732 + response: + body: + string: C + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:27:53 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/extras/cassettes/test_from_hgvs.yaml b/tests/extras/cassettes/test_from_hgvs.yaml index 3e12b676..a3c14285 100644 --- a/tests/extras/cassettes/test_from_hgvs.yaml +++ b/tests/extras/cassettes/test_from_hgvs.yaml @@ -1,4 +1,46 @@ interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/metadata/refseq:NC_000019.10 + response: + body: + string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n + \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n + \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n + \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n + \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n + \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n + \ \"GRCh38.p5:19\",\n \"GRCh38.p5:chr19\",\n \"GRCh38.p6:19\",\n \"GRCh38.p6:chr19\",\n + \ \"GRCh38.p7:19\",\n \"GRCh38.p7:chr19\",\n \"GRCh38.p8:19\",\n \"GRCh38.p8:chr19\",\n + \ \"GRCh38.p9:19\",\n \"GRCh38.p9:chr19\",\n \"MD5:b0eba2c7bb5c953d1e06a508b5e487de\",\n + \ \"NCBI:NC_000019.10\",\n \"refseq:NC_000019.10\",\n \"SEGUID:AHxM5/L8jIX08UhBBkKXkiO5rhY\",\n + \ \"SHA1:007c4ce7f2fc8c85f4f148410642979223b9ae16\",\n \"VMC:GS_IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n + \ \"sha512t24u:IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n \"ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\"\n + \ ],\n \"alphabet\": \"ACGNT\",\n \"length\": 58617616\n}\n" + headers: + Connection: + - close + Content-Length: + - '1035' + Content-Type: + - application/json + Date: + - Fri, 13 Jan 2023 15:27:55 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK - request: body: null headers: @@ -35,7 +77,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 19 Sep 2022 13:14:13 GMT + - Fri, 13 Jan 2023 15:27:55 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -65,7 +107,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Mon, 19 Sep 2022 13:14:14 GMT + - Fri, 13 Jan 2023 15:27:55 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: diff --git a/tests/extras/cassettes/test_get_vrs_object_invalid_input.yaml b/tests/extras/cassettes/test_get_vrs_object_invalid_input.yaml index cbaeb285..eef5dd5f 100644 --- a/tests/extras/cassettes/test_get_vrs_object_invalid_input.yaml +++ b/tests/extras/cassettes/test_get_vrs_object_invalid_input.yaml @@ -11,7 +11,7 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/metadata/GRCh38:. + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:.?start=140753335&end=140753336 response: body: string: '' @@ -21,12 +21,42 @@ interactions: Content-Length: - '0' Content-Type: - - application/json + - text/plain; charset=utf-8 Date: - - Thu, 15 Dec 2022 14:13:24 GMT + - Fri, 13 Jan 2023 15:30:59 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: code: 404 message: NOT FOUND +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/GRCh38:7?start=140753335&end=140753336 + response: + body: + string: A + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:30:59 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK version: 1 diff --git a/tests/extras/cassettes/test_hgvs[NC_000013.11:g.32936732=-expected0].yaml b/tests/extras/cassettes/test_hgvs[NC_000013.11:g.32936732=-expected0].yaml index 22f99afb..d164c475 100644 --- a/tests/extras/cassettes/test_hgvs[NC_000013.11:g.32936732=-expected0].yaml +++ b/tests/extras/cassettes/test_hgvs[NC_000013.11:g.32936732=-expected0].yaml @@ -23,7 +23,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Mon, 19 Sep 2022 13:14:14 GMT + - Fri, 13 Jan 2023 15:28:48 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -65,7 +65,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 19 Sep 2022 13:14:14 GMT + - Fri, 13 Jan 2023 15:28:48 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -95,7 +95,49 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Mon, 19 Sep 2022 13:14:14 GMT + - Fri, 13 Jan 2023 15:28:48 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT + response: + body: + string: "{\n \"added\": \"2016-08-27T23:50:14Z\",\n \"aliases\": [\n \"GRCh38:13\",\n + \ \"GRCh38:chr13\",\n \"GRCh38.p1:13\",\n \"GRCh38.p1:chr13\",\n \"GRCh38.p10:13\",\n + \ \"GRCh38.p10:chr13\",\n \"GRCh38.p11:13\",\n \"GRCh38.p11:chr13\",\n + \ \"GRCh38.p12:13\",\n \"GRCh38.p12:chr13\",\n \"GRCh38.p2:13\",\n + \ \"GRCh38.p2:chr13\",\n \"GRCh38.p3:13\",\n \"GRCh38.p3:chr13\",\n + \ \"GRCh38.p4:13\",\n \"GRCh38.p4:chr13\",\n \"GRCh38.p5:13\",\n \"GRCh38.p5:chr13\",\n + \ \"GRCh38.p6:13\",\n \"GRCh38.p6:chr13\",\n \"GRCh38.p7:13\",\n \"GRCh38.p7:chr13\",\n + \ \"GRCh38.p8:13\",\n \"GRCh38.p8:chr13\",\n \"GRCh38.p9:13\",\n \"GRCh38.p9:chr13\",\n + \ \"MD5:a5437debe2ef9c9ef8f3ea2874ae1d82\",\n \"NCBI:NC_000013.11\",\n + \ \"refseq:NC_000013.11\",\n \"SEGUID:2oDBty0yKV9wHo7gg+Bt+fPgi5o\",\n + \ \"SHA1:da80c1b72d32295f701e8ee083e06df9f3e08b9a\",\n \"VMC:GS__0wi-qoDrvram155UmcSC-zA5ZK4fpLT\",\n + \ \"sha512t24u:_0wi-qoDrvram155UmcSC-zA5ZK4fpLT\",\n \"ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT\"\n + \ ],\n \"alphabet\": \"ACGKNTY\",\n \"length\": 114364328\n}\n" + headers: + Connection: + - close + Content-Length: + - '1002' + Content-Type: + - application/json + Date: + - Fri, 13 Jan 2023 15:28:48 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -125,7 +167,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Mon, 19 Sep 2022 13:14:14 GMT + - Fri, 13 Jan 2023 15:28:48 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -165,20 +207,20 @@ interactions: Content-Type: - text/plain Date: - - Mon, 19 Sep 2022 13:14:17 GMT + - Fri, 13 Jan 2023 15:28:51 GMT Keep-Alive: - timeout=4, max=40 NCBI-PHID: - - 322C565FBBD04345000027318D2324BD.1.1.m_5 + - 939B1CD00866D48500004C75540CE92C.1.1.m_5 NCBI-SID: - - 2E1608FAFC3E1BF6_6341SID + - E46CBC9A79C75AF2_D8E7SID Referrer-Policy: - origin-when-cross-origin Server: - Finatra Set-Cookie: - - ncbi_sid=2E1608FAFC3E1BF6_6341SID; domain=.nih.gov; path=/; expires=Tue, 19 - Sep 2023 13:14:18 GMT + - ncbi_sid=E46CBC9A79C75AF2_D8E7SID; domain=.nih.gov; path=/; expires=Sat, 13 + Jan 2024 15:28:51 GMT Strict-Transport-Security: - max-age=31536000; includeSubDomains; preload Transfer-Encoding: @@ -187,8 +229,6 @@ interactions: - '3' X-RateLimit-Remaining: - '2' - X-Test-Test: - - test42 X-UA-Compatible: - IE=Edge X-XSS-Protection: diff --git a/tests/extras/cassettes/test_to_spdi.yaml b/tests/extras/cassettes/test_to_spdi.yaml index c39535b9..da88d276 100644 --- a/tests/extras/cassettes/test_to_spdi.yaml +++ b/tests/extras/cassettes/test_to_spdi.yaml @@ -11,31 +11,31 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT + uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl response: body: - string: "{\n \"added\": \"2016-08-27T23:50:14Z\",\n \"aliases\": [\n \"GRCh38:13\",\n - \ \"GRCh38:chr13\",\n \"GRCh38.p1:13\",\n \"GRCh38.p1:chr13\",\n \"GRCh38.p10:13\",\n - \ \"GRCh38.p10:chr13\",\n \"GRCh38.p11:13\",\n \"GRCh38.p11:chr13\",\n - \ \"GRCh38.p12:13\",\n \"GRCh38.p12:chr13\",\n \"GRCh38.p2:13\",\n - \ \"GRCh38.p2:chr13\",\n \"GRCh38.p3:13\",\n \"GRCh38.p3:chr13\",\n - \ \"GRCh38.p4:13\",\n \"GRCh38.p4:chr13\",\n \"GRCh38.p5:13\",\n \"GRCh38.p5:chr13\",\n - \ \"GRCh38.p6:13\",\n \"GRCh38.p6:chr13\",\n \"GRCh38.p7:13\",\n \"GRCh38.p7:chr13\",\n - \ \"GRCh38.p8:13\",\n \"GRCh38.p8:chr13\",\n \"GRCh38.p9:13\",\n \"GRCh38.p9:chr13\",\n - \ \"MD5:a5437debe2ef9c9ef8f3ea2874ae1d82\",\n \"NCBI:NC_000013.11\",\n - \ \"refseq:NC_000013.11\",\n \"SEGUID:2oDBty0yKV9wHo7gg+Bt+fPgi5o\",\n - \ \"SHA1:da80c1b72d32295f701e8ee083e06df9f3e08b9a\",\n \"VMC:GS__0wi-qoDrvram155UmcSC-zA5ZK4fpLT\",\n - \ \"sha512t24u:_0wi-qoDrvram155UmcSC-zA5ZK4fpLT\",\n \"ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT\"\n - \ ],\n \"alphabet\": \"ACGKNTY\",\n \"length\": 114364328\n}\n" + string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n + \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n + \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n + \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n + \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n + \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n + \ \"GRCh38.p5:19\",\n \"GRCh38.p5:chr19\",\n \"GRCh38.p6:19\",\n \"GRCh38.p6:chr19\",\n + \ \"GRCh38.p7:19\",\n \"GRCh38.p7:chr19\",\n \"GRCh38.p8:19\",\n \"GRCh38.p8:chr19\",\n + \ \"GRCh38.p9:19\",\n \"GRCh38.p9:chr19\",\n \"MD5:b0eba2c7bb5c953d1e06a508b5e487de\",\n + \ \"NCBI:NC_000019.10\",\n \"refseq:NC_000019.10\",\n \"SEGUID:AHxM5/L8jIX08UhBBkKXkiO5rhY\",\n + \ \"SHA1:007c4ce7f2fc8c85f4f148410642979223b9ae16\",\n \"VMC:GS_IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n + \ \"sha512t24u:IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n \"ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\"\n + \ ],\n \"alphabet\": \"ACGNT\",\n \"length\": 58617616\n}\n" headers: Connection: - close Content-Length: - - '1002' + - '1035' Content-Type: - application/json Date: - - Mon, 19 Sep 2022 13:14:14 GMT + - Fri, 13 Jan 2023 15:28:15 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -53,7 +53,7 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=32936731&end=32936732 + uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=44908821&end=44908822 response: body: string: C @@ -65,7 +65,7 @@ interactions: Content-Type: - text/plain; charset=utf-8 Date: - - Mon, 19 Sep 2022 13:14:14 GMT + - Fri, 13 Jan 2023 15:28:15 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: @@ -83,31 +83,151 @@ interactions: User-Agent: - python-requests/2.28.1 method: GET - uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT + uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=44908820&end=44908821 response: body: - string: "{\n \"added\": \"2016-08-27T23:50:14Z\",\n \"aliases\": [\n \"GRCh38:13\",\n - \ \"GRCh38:chr13\",\n \"GRCh38.p1:13\",\n \"GRCh38.p1:chr13\",\n \"GRCh38.p10:13\",\n - \ \"GRCh38.p10:chr13\",\n \"GRCh38.p11:13\",\n \"GRCh38.p11:chr13\",\n - \ \"GRCh38.p12:13\",\n \"GRCh38.p12:chr13\",\n \"GRCh38.p2:13\",\n - \ \"GRCh38.p2:chr13\",\n \"GRCh38.p3:13\",\n \"GRCh38.p3:chr13\",\n - \ \"GRCh38.p4:13\",\n \"GRCh38.p4:chr13\",\n \"GRCh38.p5:13\",\n \"GRCh38.p5:chr13\",\n - \ \"GRCh38.p6:13\",\n \"GRCh38.p6:chr13\",\n \"GRCh38.p7:13\",\n \"GRCh38.p7:chr13\",\n - \ \"GRCh38.p8:13\",\n \"GRCh38.p8:chr13\",\n \"GRCh38.p9:13\",\n \"GRCh38.p9:chr13\",\n - \ \"MD5:a5437debe2ef9c9ef8f3ea2874ae1d82\",\n \"NCBI:NC_000013.11\",\n - \ \"refseq:NC_000013.11\",\n \"SEGUID:2oDBty0yKV9wHo7gg+Bt+fPgi5o\",\n - \ \"SHA1:da80c1b72d32295f701e8ee083e06df9f3e08b9a\",\n \"VMC:GS__0wi-qoDrvram155UmcSC-zA5ZK4fpLT\",\n - \ \"sha512t24u:_0wi-qoDrvram155UmcSC-zA5ZK4fpLT\",\n \"ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT\"\n - \ ],\n \"alphabet\": \"ACGKNTY\",\n \"length\": 114364328\n}\n" + string: G headers: Connection: - close Content-Length: - - '1002' + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:28:15 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=44908822&end=44908823 + response: + body: + string: G + headers: + Connection: + - close + Content-Length: + - '1' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:28:15 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=44908821&end=44908821 + response: + body: + string: '' + headers: + Connection: + - close + Content-Length: + - '0' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:28:15 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl?start=44908822&end=44908822 + response: + body: + string: '' + headers: + Connection: + - close + Content-Length: + - '0' + Content-Type: + - text/plain; charset=utf-8 + Date: + - Fri, 13 Jan 2023 15:28:15 GMT + Server: + - Werkzeug/2.2.2 Python/3.10.4 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.28.1 + method: GET + uri: http://localhost:5000/seqrepo/1/metadata/ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl + response: + body: + string: "{\n \"added\": \"2016-08-24T08:19:02Z\",\n \"aliases\": [\n \"Ensembl:19\",\n + \ \"ensembl:19\",\n \"GRCh38:19\",\n \"GRCh38:chr19\",\n \"GRCh38.p1:19\",\n + \ \"GRCh38.p1:chr19\",\n \"GRCh38.p10:19\",\n \"GRCh38.p10:chr19\",\n + \ \"GRCh38.p11:19\",\n \"GRCh38.p11:chr19\",\n \"GRCh38.p12:19\",\n + \ \"GRCh38.p12:chr19\",\n \"GRCh38.p2:19\",\n \"GRCh38.p2:chr19\",\n + \ \"GRCh38.p3:19\",\n \"GRCh38.p3:chr19\",\n \"GRCh38.p4:19\",\n \"GRCh38.p4:chr19\",\n + \ \"GRCh38.p5:19\",\n \"GRCh38.p5:chr19\",\n \"GRCh38.p6:19\",\n \"GRCh38.p6:chr19\",\n + \ \"GRCh38.p7:19\",\n \"GRCh38.p7:chr19\",\n \"GRCh38.p8:19\",\n \"GRCh38.p8:chr19\",\n + \ \"GRCh38.p9:19\",\n \"GRCh38.p9:chr19\",\n \"MD5:b0eba2c7bb5c953d1e06a508b5e487de\",\n + \ \"NCBI:NC_000019.10\",\n \"refseq:NC_000019.10\",\n \"SEGUID:AHxM5/L8jIX08UhBBkKXkiO5rhY\",\n + \ \"SHA1:007c4ce7f2fc8c85f4f148410642979223b9ae16\",\n \"VMC:GS_IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n + \ \"sha512t24u:IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\",\n \"ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl\"\n + \ ],\n \"alphabet\": \"ACGNT\",\n \"length\": 58617616\n}\n" + headers: + Connection: + - close + Content-Length: + - '1035' Content-Type: - application/json Date: - - Mon, 19 Sep 2022 13:14:14 GMT + - Fri, 13 Jan 2023 15:28:15 GMT Server: - Werkzeug/2.2.2 Python/3.10.4 status: diff --git a/tests/extras/test_translator.py b/tests/extras/test_translator.py index 8c603fbc..ef304443 100644 --- a/tests/extras/test_translator.py +++ b/tests/extras/test_translator.py @@ -3,24 +3,24 @@ from ga4gh.vrs import models snv_inputs = { - "hgvs": "NC_000013.11:g.32936732G>C", - "beacon": "13 : 32936732 G > C", - "spdi": "NC_000013.11:32936731:1:C", - "gnomad": "13-32936732-G-C" + "hgvs": "NC_000019.10:g.44908822C>T", + "beacon": "19 : 44908822 C > T", + "spdi": "NC_000019.10:44908821:1:T", + "gnomad": "19-44908822-C-T" } snv_output = { "location": { "interval": { - "end": {"value": 32936732, "type": "Number"}, - "start": {"value": 32936731, "type": "Number"}, + "end": {"value": 44908822, "type": "Number"}, + "start": {"value": 44908821, "type": "Number"}, "type": "SequenceInterval" }, - "sequence_id": "ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT", + "sequence_id": "ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl", "type": "SequenceLocation" }, "state": { - "sequence": "C", + "sequence": "T", "type": "LiteralSequenceExpression" }, "type": "Allele" @@ -105,6 +105,11 @@ def test_from_beacon(tlr): def test_from_gnomad(tlr): assert tlr._from_gnomad(snv_inputs["gnomad"]).as_dict() == snv_output + # Invalid input. Ref does not match regex + assert not tlr._from_gnomad("13-32936732-helloworld-C") + + # Ref != Actual ref + assert not tlr._from_gnomad("13-32936732-G-C") @pytest.mark.vcr def test_from_hgvs(tlr): diff --git a/tests/extras/test_vcf_annotation.py b/tests/extras/test_vcf_annotation.py index 63817abb..b729a813 100644 --- a/tests/extras/test_vcf_annotation.py +++ b/tests/extras/test_vcf_annotation.py @@ -75,4 +75,4 @@ def test_get_vrs_object_invalid_input(vcf_annotator, caplog): # No ALT vcf_annotator._get_vrs_object("7-140753336-A-.", {}, [], "GRCh38") - assert "None was returned when translating 7-140753336-A-. from gnomad" in caplog.text + assert "ValidationError when translating 7-140753336-A-. from gnomad" in caplog.text From 97199fd107a2ae58de5ba312fafefa5b86c086c7 Mon Sep 17 00:00:00 2001 From: korikuzma Date: Mon, 16 Jan 2023 09:37:17 -0500 Subject: [PATCH 02/10] cleanup: resolve pylint errors --- .pre-commit-config.yaml | 10 +- .pylintrc | 12 +++ notebooks/Extras.ipynb | 92 +++++++++---------- src/ga4gh/core/__init__.py | 2 +- src/ga4gh/core/_internal/identifiers.py | 9 +- src/ga4gh/core/_internal/jsonschema.py | 2 +- src/ga4gh/vrs/__init__.py | 2 +- src/ga4gh/vrs/dataproxy.py | 4 +- src/ga4gh/vrs/extras/localizer.py | 21 ++--- src/ga4gh/vrs/extras/translator.py | 37 ++++---- src/ga4gh/vrs/extras/utils.py | 6 +- .../extras/variation_normalizer_rest_dp.py | 11 ++- src/ga4gh/vrs/extras/vcf_annotation.py | 18 ++-- src/ga4gh/vrs/normalize.py | 28 +++--- tests/conftest.py | 2 +- 15 files changed, 135 insertions(+), 121 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index cfd26a16..692cd741 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,10 +1,16 @@ # See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks repos: - - repo: https://github.com/pycqa/pylint - rev: v2.15.9 + - repo: local hooks: - id: pylint + name: pylint + entry: pylint + language: system + types: [python] + require_serial: true + exclude: ^tests/ args: - src/ga4gh/core - src/ga4gh/vrs + - --fail-under=10 diff --git a/.pylintrc b/.pylintrc index 2de19cfc..8ae7a4a2 100644 --- a/.pylintrc +++ b/.pylintrc @@ -28,6 +28,18 @@ max-line-length=120 # Maximum number of lines in a module. max-module-lines=1000 +[MESSAGES CONTROL] + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once). You can also use "--disable=all" to +# disable everything first and then re-enable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable=fixme [STRING] diff --git a/notebooks/Extras.ipynb b/notebooks/Extras.ipynb index d39d7d86..16687b87 100644 --- a/notebooks/Extras.ipynb +++ b/notebooks/Extras.ipynb @@ -25,7 +25,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 1, "metadata": { "scrolled": true }, @@ -34,10 +34,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Removing allOf attribute from AbsoluteCopyNumber to avoid python-jsonschema-objects error.\n", - "Removing allOf attribute from SequenceInterval to avoid python-jsonschema-objects error.\n", - "Removing allOf attribute from RepeatedSequenceExpression to avoid python-jsonschema-objects error.\n", - "/Users/kxk102/Documents/ga4gh/vrs-python/venv/3.9/lib/python3.9/site-packages/python_jsonschema_objects/__init__.py:49: UserWarning: Schema version http://json-schema.org/draft-07/schema not recognized. Some keywords and features may not be supported.\n", + "/Users/kxk102/Documents/ga4gh/vrs-python/venv/3.10/lib/python3.10/site-packages/python_jsonschema_objects/__init__.py:49: UserWarning: Schema version http://json-schema.org/draft-07/schema not recognized. Some keywords and features may not be supported.\n", " warnings.warn(\n" ] } @@ -54,7 +51,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -73,7 +70,7 @@ " 'length': 4560}" ] }, - "execution_count": 7, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -84,7 +81,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -93,7 +90,7 @@ "'CCTCGCCTCCGTTACAACGGCCTACGGTGCTGGAGGATCCTTCTGCGCACG...'" ] }, - "execution_count": 8, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -118,14 +115,14 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from ga4gh.vrs.extras.translator import Translator\n", "tlr = Translator(data_proxy=dp,\n", " translate_sequence_identifiers=True, # default\n", - " normalize=True, # default\n", + " do_normalize=True, # default\n", " identify=True) # default" ] }, @@ -142,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 5, "metadata": { "scrolled": true }, @@ -160,7 +157,7 @@ " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'C'}}" ] }, - "execution_count": 10, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -172,7 +169,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -181,7 +178,7 @@ "'The postgres default port of 5432 is blocked outbound by binder and potentially other institutions. To circumvent users having to install UTA themselves we created a rest data proxy for variation normalizer for the to_hgvs endpoint.'" ] }, - "execution_count": 11, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -195,7 +192,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -204,7 +201,7 @@ "['NC_000013.11:g.32936732=']" ] }, - "execution_count": 12, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -224,7 +221,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 8, "metadata": { "scrolled": true }, @@ -242,7 +239,7 @@ " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'C'}}" ] }, - "execution_count": 13, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -255,7 +252,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -264,7 +261,7 @@ "['NC_000013.11:32936731:1:C']" ] }, - "execution_count": 14, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -275,7 +272,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -284,7 +281,7 @@ "['NC_000013.11:32936731:2:C']" ] }, - "execution_count": 15, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -296,7 +293,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -305,7 +302,7 @@ "['NC_000013.11:32936731:2:']" ] }, - "execution_count": 16, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -324,7 +321,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -340,7 +337,7 @@ " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'C'}}" ] }, - "execution_count": 17, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -360,25 +357,20 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 13, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "{'_id': 'ga4gh:VA.DkZLLMnwoH6zIncSRh2c05nzCNLdTqHl',\n", - " 'type': 'Allele',\n", - " 'location': {'type': 'SequenceLocation',\n", - " 'sequence_id': 'ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT',\n", - " 'interval': {'type': 'SequenceInterval',\n", - " 'start': {'type': 'Number', 'value': 32936731},\n", - " 'end': {'type': 'Number', 'value': 32936732}}},\n", - " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'C'}}" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" + "ename": "ValueError", + "evalue": "Unable to parse data as gnomad variation", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[13], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m a \u001b[39m=\u001b[39m tlr\u001b[39m.\u001b[39;49mtranslate_from(\u001b[39m\"\u001b[39;49m\u001b[39m13-32936732-G-C\u001b[39;49m\u001b[39m\"\u001b[39;49m, \u001b[39m\"\u001b[39;49m\u001b[39mgnomad\u001b[39;49m\u001b[39m\"\u001b[39;49m) \u001b[39m# gnomAD-style expression\u001b[39;00m\n\u001b[1;32m 2\u001b[0m a\u001b[39m.\u001b[39mas_dict()\n", + "File \u001b[0;32m~/Documents/ga4gh/vrs-python/src/ga4gh/vrs/extras/translator.py:72\u001b[0m, in \u001b[0;36mTranslator.translate_from\u001b[0;34m(self, var, fmt)\u001b[0m\n\u001b[1;32m 70\u001b[0m o \u001b[39m=\u001b[39m t(\u001b[39mself\u001b[39m, var)\n\u001b[1;32m 71\u001b[0m \u001b[39mif\u001b[39;00m o \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m---> 72\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mUnable to parse data as \u001b[39m\u001b[39m{\u001b[39;00mfmt\u001b[39m}\u001b[39;00m\u001b[39m variation\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m 73\u001b[0m \u001b[39mreturn\u001b[39;00m o\n\u001b[1;32m 75\u001b[0m \u001b[39mfor\u001b[39;00m _, t \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mfrom_translators\u001b[39m.\u001b[39mitems():\n", + "\u001b[0;31mValueError\u001b[0m: Unable to parse data as gnomad variation" + ] } ], "source": [ @@ -397,7 +389,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -409,7 +401,7 @@ "# Translator with default behaviors disabled\n", "tlr2 = Translator(data_proxy=dp,\n", " translate_sequence_identifiers=False,\n", - " normalize=False,\n", + " do_normalize=False,\n", " identify=False)" ] }, @@ -422,7 +414,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -466,7 +458,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -510,9 +502,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "vrs-python", "language": "python", - "name": "python3" + "name": "vrs-python" }, "language_info": { "codemirror_mode": { @@ -524,7 +516,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.13" + "version": "3.10.8" }, "toc": { "base_numbering": 1, diff --git a/src/ga4gh/core/__init__.py b/src/ga4gh/core/__init__.py index 0045157c..9dcfdba2 100644 --- a/src/ga4gh/core/__init__.py +++ b/src/ga4gh/core/__init__.py @@ -12,7 +12,7 @@ parse_ga4gh_identifier) from ._internal.jsonschema import (build_models, build_class_referable_attribute_map, is_pjs_class, is_pjs_instance, is_curie, is_identifiable, is_literal, pjs_copy) - +# pylint: disable=duplicate-code try: __version__ = get_distribution(__name__).version except DistributionNotFound: # pragma: nocover diff --git a/src/ga4gh/core/_internal/identifiers.py b/src/ga4gh/core/_internal/identifiers.py index 90f4c669..81ea9149 100644 --- a/src/ga4gh/core/_internal/identifiers.py +++ b/src/ga4gh/core/_internal/identifiers.py @@ -36,7 +36,8 @@ # Assume that ga4gh.yaml and vrs.yaml files are in the same directory for now schema_dir = os.environ.get("VRS_SCHEMA_DIR", pkg_resources.resource_filename(__name__, "data/schema")) -cfg = yaml.safe_load(open(schema_dir + "/ga4gh.yaml")) +with open(schema_dir + "/ga4gh.yaml", "r", encoding="utf-8") as f: + cfg = yaml.safe_load(f) type_prefix_map_default = cfg["identifiers"]["type_prefix_map"] namespace = cfg["identifiers"]["namespace"] curie_sep = cfg["identifiers"]["curie_sep"] @@ -144,7 +145,7 @@ def ga4gh_serialize(vro): """ - def dictify(vro, enref=True): + def dictify(vro, enref=True): # pylint: disable=too-many-return-statements,too-many-branches """recursively converts (any) object to dictionary prior to serialization @@ -157,7 +158,7 @@ def dictify(vro, enref=True): return None if is_literal(vro): - v = vro._value + v = vro._value # pylint: disable=protected-access if is_curie_type(vro): if is_ga4gh_identifier(v): # CURIEs are stripped to just the digest so that digests are independent of type prefixes @@ -184,7 +185,7 @@ def dictify(vro, enref=True): if is_curie_type(vro[0]): return sorted(dictify(o) for o in vro.data) - arr = list() + arr = [] for o in vro.typed_elems: d = dictify(o) if isinstance(d, dict): diff --git a/src/ga4gh/core/_internal/jsonschema.py b/src/ga4gh/core/_internal/jsonschema.py index ab7797ae..88df0381 100644 --- a/src/ga4gh/core/_internal/jsonschema.py +++ b/src/ga4gh/core/_internal/jsonschema.py @@ -27,7 +27,7 @@ def build_models(path, standardize_names=False): """load models from json schema at path""" - with open(path, "r") as yaml_file: + with open(path, "r", encoding="utf-8") as yaml_file: y = yaml.load(yaml_file, yaml.SafeLoader) builder = pjs.ObjectBuilder(pjs_filter(y)) models = builder.build_classes(standardize_names=standardize_names) diff --git a/src/ga4gh/vrs/__init__.py b/src/ga4gh/vrs/__init__.py index e3ed2ee9..c6b72f72 100644 --- a/src/ga4gh/vrs/__init__.py +++ b/src/ga4gh/vrs/__init__.py @@ -23,4 +23,4 @@ logging.basicConfig( filename="vrs-python.log", - format="[%(asctime)s] - %(name)s - %(levelname)s : %(message)s") \ No newline at end of file + format="[%(asctime)s] - %(name)s - %(levelname)s : %(message)s") diff --git a/src/ga4gh/vrs/dataproxy.py b/src/ga4gh/vrs/dataproxy.py index 48cdb56c..53db185b 100644 --- a/src/ga4gh/vrs/dataproxy.py +++ b/src/ga4gh/vrs/dataproxy.py @@ -152,7 +152,7 @@ def _get_sequence(self, identifier, start=None, end=None): url = self.base_url + f"sequence/{identifier}" _logger.info("Fetching %s", url) params = {"start": start, "end": end} - resp = requests.get(url, params=params) + resp = requests.get(url, params=params, timeout=5) if resp.status_code == 404: raise KeyError(identifier) resp.raise_for_status() @@ -161,7 +161,7 @@ def _get_sequence(self, identifier, start=None, end=None): def _get_metadata(self, identifier): url = self.base_url + f"metadata/{identifier}" _logger.info("Fetching %s", url) - resp = requests.get(url) + resp = requests.get(url, timeout=5) if resp.status_code == 404: raise KeyError(identifier) resp.raise_for_status() diff --git a/src/ga4gh/vrs/extras/localizer.py b/src/ga4gh/vrs/extras/localizer.py index d735fa32..4c2ec4fb 100644 --- a/src/ga4gh/vrs/extras/localizer.py +++ b/src/ga4gh/vrs/extras/localizer.py @@ -2,9 +2,6 @@ reference to external data """ - -import copy - from bioutils.accessions import coerce_namespace from bioutils.assemblies import make_name_ac_map from bioutils.cytobands import get_cytoband_maps @@ -45,12 +42,15 @@ def __init__(self): self._ana_maps = {k: make_name_ac_map(k) for k in assy_name_to_map_name} - def localize_allele(self, allele): - # copy input variant and replace location - # N.B. deepcopy leads to recursion errors + def localize_allele(self, allele, assembly_name = "GRCh38"): + """copy input variant and replace location + N.B. deepcopy leads to recursion errors + """ + # + # allele_sl = ga4gh.vrs.models.Variation(**allele.as_dict()) del allele_sl._id - allele_sl.location = self.localize(allele.location) + allele_sl.location = self.localize_named_feature(allele.location, assembly_name) return allele_sl @@ -59,13 +59,13 @@ def localize_named_feature(self, loc, assembly_name): """ - assert loc.type._value == "ChromosomeLocation", "Expected a ChromosomeLocation object" + assert loc.type._value == "ChromosomeLocation", "Expected a ChromosomeLocation object" # pylint: disable=protected-access def _get_coords(m, cb): """return (start,end) of band `cb` in map `m`""" if cb is None: return None - return chr_cb_map[cb][0:2] + return m[cb][0:2] try: map_name = assy_name_to_map_name[assembly_name] @@ -108,9 +108,6 @@ def _get_coords(m, cb): ) - - - if __name__ == "__main__": cbl = ga4gh.vrs.models.ChromosomeLocation(chr="11", start="q22.3", end="q23.1") lr = Localizer() diff --git a/src/ga4gh/vrs/extras/translator.py b/src/ga4gh/vrs/extras/translator.py index e24c92cc..1137c70a 100644 --- a/src/ga4gh/vrs/extras/translator.py +++ b/src/ga4gh/vrs/extras/translator.py @@ -42,17 +42,17 @@ class Translator: spdi_re = re.compile(r"(?P[^:]+):(?P\d+):(?P\w*):(?P\w*)") - def __init__(self, + def __init__(self, # pylint: disable=too-many-arguments data_proxy, default_assembly_name="GRCh38", translate_sequence_identifiers=True, - normalize=True, + do_normalize=True, identify=True): self.default_assembly_name = default_assembly_name self.data_proxy = data_proxy self.translate_sequence_identifiers = translate_sequence_identifiers self.identify = identify - self.normalize = normalize + self.normalize = do_normalize self.hgvs_tools = None @@ -72,7 +72,7 @@ def translate_from(self, var, fmt=None): raise ValueError(f"Unable to parse data as {fmt} variation") return o - for fmt, t in self.from_translators.items(): + for _, t in self.from_translators.items(): o = t(self, var) if o: return o @@ -216,7 +216,7 @@ def _from_hgvs(self, hgvs_expr): if not self.hgvs_re.match(hgvs_expr): return None - sv = self._hgvs_parser.parse_hgvs_variant(hgvs_expr) + sv = self._hgvs_parser.parse_hgvs_variant(hgvs_expr) # pylint: disable=no-member # prefix accession with namespace sequence_id = coerce_namespace(sv.ac) @@ -325,7 +325,7 @@ def _get_hgvs_tools(self): self.hgvs_tools = HgvsTools(uta_conn) return self.hgvs_tools - def _to_hgvs(self, vo, namespace="refseq"): + def _to_hgvs(self, vo, namespace="refseq"): # pylint: disable=too-many-locals """generates a *list* of HGVS expressions for VRS Allele. If `namespace` is not None, returns HGVS strings for the @@ -368,11 +368,11 @@ def ir_stype(a): stype = stypes[0] # build interval and edit depending on sequence type - if stype == "p": + if stype == "p": # pylint: disable=no-else-raise raise ValueError("Only nucleic acid variation is currently supported") # ival = hgvs.location.Interval(start=start, end=end) # edit = hgvs.edit.AARefAlt(ref=None, alt=vo.state.sequence) - else: # pylint: disable=no-else-raise + else: start, end = vo.location.interval.start.value, vo.location.interval.end.value # ib: 0 1 2 3 4 5 # h: 1 2 3 4 5 @@ -404,7 +404,7 @@ def ir_stype(a): if ns.startswith("GRC") and namespace is None: continue - if not (any(a.startswith(pfx) for pfx in ("NM", "NP", "NC", "NG"))): + if not any(a.startswith(pfx) for pfx in ("NM", "NP", "NC", "NG")): continue var.ac = a @@ -418,7 +418,7 @@ def ir_stype(a): hgvs_exprs += [str(var)] except hgvs.exceptions.HGVSDataNotAvailableError: - _logger.warning(f"No data found for accession {a}") + _logger.warning("No data found for accession %s", a) return list(set(hgvs_exprs)) @@ -469,6 +469,9 @@ def _is_valid_ref_seq(self, sequence_id: str, start_pos: int, end_pos: int, ref: def is_valid_allele(self, vo): + """Ensure that `vo` is a valid VRS Allele with SequenceLocation and + LiteralSequenceExpression + """ return (vo.type == "Allele" and vo.location.type == "SequenceLocation" and vo.state.type == "LiteralSequenceExpression") @@ -487,14 +490,14 @@ def _post_process_imported_allele(self, allele): """ if self.translate_sequence_identifiers: - seq_id = self.data_proxy.translate_sequence_identifier(allele.location.sequence_id._value, "ga4gh")[0] + seq_id = self.data_proxy.translate_sequence_identifier(allele.location.sequence_id._value, "ga4gh")[0] # pylint: disable=protected-access allele.location.sequence_id = seq_id if self.normalize: allele = normalize(allele, self.data_proxy) if self.identify: - allele._id = ga4gh_identify(allele) + allele._id = ga4gh_identify(allele) # pylint: disable=protected-access return allele @@ -558,16 +561,16 @@ def _seq_id_mapper(self, ir): "type": "SequenceInterval" } ] - formats = ["hgvs", "gnomad", "beacon", "spdi", "vrs", None] + from_formats = ["hgvs", "gnomad", "beacon", "spdi", "vrs", None] for e in expressions: print(f"* {e}") - for f in formats: + for f in from_formats: try: - o = tlr.translate_from(e, f) - r = o.type + vrs_obj = tlr.translate_from(e, f) + r = vrs_obj.type except ValueError: r = "-" - except Exception as ex: + except Exception as ex: # pylint: disable=broad-except r = ex.__class__.__name__ print(f" {f}: {r}") diff --git a/src/ga4gh/vrs/extras/utils.py b/src/ga4gh/vrs/extras/utils.py index 9c96caca..afcb306b 100644 --- a/src/ga4gh/vrs/extras/utils.py +++ b/src/ga4gh/vrs/extras/utils.py @@ -35,19 +35,19 @@ def _format_time(timespan, precision=3): value = int(leftover / length) if value > 0: leftover = leftover % length - time.append(u"%s%s" % (str(value), suffix)) + time.append(f"{value}{suffix}") if leftover < 1: break return " ".join(time) - units = [u"s", u"ms", u"us", u"ns"] # the save value + units = ["s", "ms", "us", "ns"] # the save value scaling = [1, 1e3, 1e6, 1e9] if timespan > 0.0: order = min(-int(math.floor(math.log10(timespan)) // 3), 3) else: order = 3 - return u"%.*g %s" % (precision, timespan * scaling[order], units[order]) + return f"{timespan * scaling[order]:.{precision}g} {units[order]}" def hex_to_base64url(s): diff --git a/src/ga4gh/vrs/extras/variation_normalizer_rest_dp.py b/src/ga4gh/vrs/extras/variation_normalizer_rest_dp.py index 63edba6e..801c32d4 100644 --- a/src/ga4gh/vrs/extras/variation_normalizer_rest_dp.py +++ b/src/ga4gh/vrs/extras/variation_normalizer_rest_dp.py @@ -1,6 +1,9 @@ +"""Module for Variation Normalizer REST Data Proxy. This is needed for the notebooks, +so that users do not have to manually install and setup UTA. +""" import requests -class VariationNormalizerRESTDataProxy: +class VariationNormalizerRESTDataProxy: # pylint: disable=too-few-public-methods """ Rest data proxy for Variation Normalizer API """ @@ -24,10 +27,10 @@ def to_hgvs(self, vo, namespace="refseq"): r = requests.post( url = f"{self.api}/vrs_allele_to_hgvs", json=data, - headers={ "Content-Type": "application/json; charset=utf-8" } + headers={ "Content-Type": "application/json; charset=utf-8" }, + timeout=5 ) - if r.status_code == 200: + if r.status_code == 200: # pylint: disable=no-else-return return r.json().get("variations", []) else: raise requests.HTTPError(f"Variation normalizer returned the status code: {r.status_code}.") - diff --git a/src/ga4gh/vrs/extras/vcf_annotation.py b/src/ga4gh/vrs/extras/vcf_annotation.py index 4a7e655c..06a0cc9a 100644 --- a/src/ga4gh/vrs/extras/vcf_annotation.py +++ b/src/ga4gh/vrs/extras/vcf_annotation.py @@ -27,7 +27,7 @@ class VCFAnnotatorException(Exception): """Custom exceptions for VCF Annotator tool""" - pass + pass # pylint: disable=unnecessary-pass class SeqRepoProxyType(str, Enum): @@ -90,7 +90,7 @@ class SeqRepoProxyType(str, Enum): help="The assembly that the `vcf_in` data uses.", type=str ) -def annotate_click( +def annotate_click( # pylint: disable=too-many-arguments vcf_in: str, vcf_out: Optional[str], vrs_pickle_out: Optional[str], seqrepo_dp_type: SeqRepoProxyType, seqrepo_root_dir: str, seqrepo_base_url: str, assembly: str @@ -112,7 +112,7 @@ def annotate_click( _logger.info(msg) click.echo(msg) -class VCFAnnotator: +class VCFAnnotator: # pylint: disable=too-few-public-methods """Provides utility for annotating VCF's with VRS Allele IDs. VCF's are read using pysam and stored as pysam objects. Alleles are translated into VRS Allele IDs using VRS-Python Translator. @@ -174,7 +174,7 @@ def annotate( with open(vrs_pickle_out, "wb") as wf: pickle.dump(vrs_data, wf) - def _get_vrs_object( + def _get_vrs_object( # pylint: disable=too-many-arguments self, vcf_coords: str, vrs_data: Dict, vrs_allele_ids: List[str], assembly: str, vrs_data_key: Optional[str] = None, output_pickle: bool = True, output_vcf: bool = False @@ -195,14 +195,14 @@ def _get_vrs_object( `False` otherwise. """ try: - vrs_obj = self.tlr._from_gnomad(vcf_coords, assembly_name=assembly) + vrs_obj = self.tlr._from_gnomad(vcf_coords, assembly_name=assembly) # pylint: disable=protected-access except ValidationError as e: _logger.error("ValidationError when translating %s from gnomad: %s", vcf_coords, str(e)) except KeyError as e: _logger.error("KeyError when translating %s from gnomad: %s", vcf_coords, str(e)) except AssertionError as e: _logger.error("AssertionError when translating %s from gnomad: %s", vcf_coords, str(e)) - except Exception as e: + except Exception as e: # pylint: disable=broad-except _logger.error("Unhandled Exception when translating %s from gnomad: %s", vcf_coords, str(e)) else: if vrs_obj: @@ -211,12 +211,12 @@ def _get_vrs_object( vrs_data[key] = str(vrs_obj.as_dict()) if output_vcf: - vrs_allele_ids.append(vrs_obj._id._value) + vrs_allele_ids.append(vrs_obj._id._value) # pylint: disable=protected-access else: _logger.debug("None was returned when translating %s from gnomad", vcf_coords) - def _record_digests( - self, record: pysam.VariantRecord, vrs_data: Dict, assembly: str, + def _record_digests( # pylint: disable=too-many-arguments + self, record: pysam.VariantRecord, vrs_data: Dict, assembly: str, # pylint: disable=no-member output_pickle: bool = True, output_vcf: bool = True ) -> List[str]: """Get VRS data for record's reference and alt alleles. diff --git a/src/ga4gh/vrs/normalize.py b/src/ga4gh/vrs/normalize.py index 51130079..78f55865 100644 --- a/src/ga4gh/vrs/normalize.py +++ b/src/ga4gh/vrs/normalize.py @@ -16,21 +16,21 @@ def _normalize_allele(allele, data_proxy): - sequence = SequenceProxy(data_proxy, allele.location.sequence_id._value) + sequence = SequenceProxy(data_proxy, allele.location.sequence_id._value) # pylint: disable=protected-access _interval_type = allele.location.interval.type if _interval_type == "SimpleInterval": - ival = (allele.location.interval.start._value, allele.location.interval.end._value) + ival = (allele.location.interval.start._value, allele.location.interval.end._value) # pylint: disable=protected-access elif _interval_type == "SequenceInterval": ival = (allele.location.interval.start.value, allele.location.interval.end.value) _allele_state = allele.state.type _states_with_sequence = ["SequenceState", "LiteralSequenceExpression"] if _allele_state in _states_with_sequence: - alleles = (None, allele.state.sequence._value) + alleles = (None, allele.state.sequence._value) # pylint: disable=protected-access elif _allele_state == "RepeatedSequenceExpression" and \ allele.state.seq_expr.type in _states_with_sequence: - alleles = (None, allele.state.seq_expr.sequence._value) + alleles = (None, allele.state.seq_expr.sequence._value) # pylint: disable=protected-access else: alleles = (None, "") @@ -60,12 +60,12 @@ def _normalize_allele(allele, data_proxy): return new_allele -def _normalize_haplotype(o, data_proxy=None): +def _normalize_haplotype(o, data_proxy=None): # pylint: disable=unused-argument o.members = sorted(o.members, key=ga4gh_digest) return o -def _normalize_variationset(o, data_proxy=None): +def _normalize_variationset(o, data_proxy=None): # pylint: disable=unused-argument o.members = sorted(o.members, key=ga4gh_digest) return o @@ -81,7 +81,7 @@ def normalize(vo, data_proxy=None): """normalize given vrs object, regardless of type""" assert is_pjs_instance(vo) - vo_type = vo.type._value + vo_type = vo.type._value # pylint: disable=protected-access if vo_type in handlers: handler = handlers[vo_type] @@ -123,13 +123,13 @@ def normalize(vo, data_proxy=None): }, "type": "Allele" } - allele = models.Allele(**allele_dict) + allele1 = models.Allele(**allele_dict) - allele2 = normalize(allele, dp) + allele2 = normalize(allele1, dp) - allele.state.sequence = "C" - allele3 = normalize(allele, dp) + allele1.state.sequence = "C" + allele3 = normalize(allele1, dp) - allele.location.interval.end.value = 44908823 - allele.state.sequence = "" - allele4 = normalize(allele, dp) + allele1.location.interval.end.value = 44908823 + allele1.state.sequence = "" + allele4 = normalize(allele1, dp) diff --git a/tests/conftest.py b/tests/conftest.py index 8dde7606..67c3028c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -25,7 +25,7 @@ def tlr(rest_dataproxy): default_assembly_name="GRCh38", # TODO: Set these to defaults and adjust relevant tests identify=False, - normalize=False, + do_normalize=False, translate_sequence_identifiers=True, ) From c1274987605889370b1703511c7bbf4bb3716aec Mon Sep 17 00:00:00 2001 From: korikuzma Date: Mon, 16 Jan 2023 10:09:33 -0500 Subject: [PATCH 03/10] fix: update examples + notebooks w valid variants --- notebooks/Extras.ipynb | 1022 ++++++++++++++-------------- notebooks/HGVS Translation.ipynb | 933 ++++++++++++------------- src/ga4gh/vrs/extras/translator.py | 14 +- 3 files changed, 988 insertions(+), 981 deletions(-) diff --git a/notebooks/Extras.ipynb b/notebooks/Extras.ipynb index d39d7d86..70afb3db 100644 --- a/notebooks/Extras.ipynb +++ b/notebooks/Extras.ipynb @@ -1,545 +1,543 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# ga4gh.vrs.extras\n", - "\n", - "This notebook demonstrates functionality in the vr-python package that builds on VRS but is not formally part of the specification. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Data Proxy\n", - "VRS implementations will need access to sequences and sequence identifiers. Sequences are used during normalization and during conversions with other formats. Sequence identifiers are necessary in order to translate identfiers from common forms to a digest-based identifier.\n", - "\n", - "VRS leaves the choice of those data sources to the implementations. In vr-python, `ga4gh.vrs.dataproxy` provides an abstract base class as a basis for data source adapters. One source is [SeqRepo](https://github.com/biocommons/biocommons.seqrepo/), which is used below. (An adapter based on the GA4GH refget specification exists, but is pending necessary changes to the refget interface to provide accession-based lookups.)\n", - "\n", - "SeqRepo: [github](https://github.com/biocommons/biocommons.seqrepo/) | [data snapshots](http://dl.biocommons.org/seqrepo/) | [seqrepo-rest-service @ github](https://github.com/biocommons/seqrepo-rest-service) | [seqrepo-rest-service docker images](https://cloud.docker.com/u/biocommons/repository/docker/biocommons/seqrepo-rest-service)\n", - "\n", - "RefGet: [spec](https://samtools.github.io/hts-specs/refget.html) | [perl server](https://github.com/andrewyatz/refget-server-perl)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "scrolled": true - }, - "outputs": [ + "cells": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Removing allOf attribute from AbsoluteCopyNumber to avoid python-jsonschema-objects error.\n", - "Removing allOf attribute from SequenceInterval to avoid python-jsonschema-objects error.\n", - "Removing allOf attribute from RepeatedSequenceExpression to avoid python-jsonschema-objects error.\n", - "/Users/kxk102/Documents/ga4gh/vrs-python/venv/3.9/lib/python3.9/site-packages/python_jsonschema_objects/__init__.py:49: UserWarning: Schema version http://json-schema.org/draft-07/schema not recognized. Some keywords and features may not be supported.\n", - " warnings.warn(\n" - ] - } - ], - "source": [ - "from ga4gh.core import sha512t24u, ga4gh_digest, ga4gh_identify, ga4gh_serialize\n", - "from ga4gh.vrs import __version__, models, normalize\n", - "from ga4gh.vrs.dataproxy import SeqRepoRESTDataProxy\n", - "from biocommons.seqrepo import SeqRepo\n", - "\n", - "seqrepo_rest_service_url = \"https://services.genomicmedlab.org/seqrepo\"\n", - "dp = SeqRepoRESTDataProxy(base_url=seqrepo_rest_service_url)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ga4gh.vrs.extras\n", + "\n", + "This notebook demonstrates functionality in the vr-python package that builds on VRS but is not formally part of the specification. " + ] + }, { - "data": { - "text/plain": [ - "{'added': '2016-08-24T05:03:11Z',\n", - " 'aliases': ['MD5:215137b1973c1a5afcf86be7d999574a',\n", - " 'NCBI:NM_000551.3',\n", - " 'refseq:NM_000551.3',\n", - " 'SEGUID:T12L0p2X5E8DbnL0+SwI4Wc1S6g',\n", - " 'SHA1:4f5d8bd29d97e44f036e72f4f92c08e167354ba8',\n", - " 'VMC:GS_v_QTc1p-MUYdgrRv4LMT6ByXIOsdw3C_',\n", - " 'sha512t24u:v_QTc1p-MUYdgrRv4LMT6ByXIOsdw3C_',\n", - " 'ga4gh:SQ.v_QTc1p-MUYdgrRv4LMT6ByXIOsdw3C_'],\n", - " 'alphabet': 'ACGT',\n", - " 'length': 4560}" + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data Proxy\n", + "VRS implementations will need access to sequences and sequence identifiers. Sequences are used during normalization and during conversions with other formats. Sequence identifiers are necessary in order to translate identfiers from common forms to a digest-based identifier.\n", + "\n", + "VRS leaves the choice of those data sources to the implementations. In vr-python, `ga4gh.vrs.dataproxy` provides an abstract base class as a basis for data source adapters. One source is [SeqRepo](https://github.com/biocommons/biocommons.seqrepo/), which is used below. (An adapter based on the GA4GH refget specification exists, but is pending necessary changes to the refget interface to provide accession-based lookups.)\n", + "\n", + "SeqRepo: [github](https://github.com/biocommons/biocommons.seqrepo/) | [data snapshots](http://dl.biocommons.org/seqrepo/) | [seqrepo-rest-service @ github](https://github.com/biocommons/seqrepo-rest-service) | [seqrepo-rest-service docker images](https://cloud.docker.com/u/biocommons/repository/docker/biocommons/seqrepo-rest-service)\n", + "\n", + "RefGet: [spec](https://samtools.github.io/hts-specs/refget.html) | [perl server](https://github.com/andrewyatz/refget-server-perl)" ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dp.get_metadata(\"refseq:NM_000551.3\")" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "'CCTCGCCTCCGTTACAACGGCCTACGGTGCTGGAGGATCCTTCTGCGCACG...'" + "cell_type": "code", + "execution_count": 1, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/kxk102/Documents/ga4gh/vrs-python/venv/3.10/lib/python3.10/site-packages/python_jsonschema_objects/__init__.py:49: UserWarning: Schema version http://json-schema.org/draft-07/schema not recognized. Some keywords and features may not be supported.\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "from ga4gh.core import sha512t24u, ga4gh_digest, ga4gh_identify, ga4gh_serialize\n", + "from ga4gh.vrs import __version__, models, normalize\n", + "from ga4gh.vrs.dataproxy import SeqRepoRESTDataProxy\n", + "from biocommons.seqrepo import SeqRepo\n", + "\n", + "seqrepo_rest_service_url = \"https://services.genomicmedlab.org/seqrepo\"\n", + "dp = SeqRepoRESTDataProxy(base_url=seqrepo_rest_service_url)" ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dp.get_sequence(\"ga4gh:SQ.v_QTc1p-MUYdgrRv4LMT6ByXIOsdw3C_\", start=0, end=51) + \"...\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Format translator\n", - "ga4gh.vrs.extras.translator.Translator translates various formats into VRS representations. \n", - "\n", - "
\n", - " 🚀 The examples below use the same variant in 4 formats: HGVS, beacon, spdi, and VCF/gnomAD. Notice that the resulting Allele objects and computed identifiers are identical.\n", - " \n", - "By default, `Translator` 1) translates sequence identifiers to ga4gh digest-based identifiers, 2) normalizes alleles, 3) adds a ga4gh identifier. These may be disabled as desired. (However, `ga4gh_identify` requires that all objects use identifiers, including sequence identifiers, in the `ga4gh` namespace.)\n", - "
" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "from ga4gh.vrs.extras.translator import Translator\n", - "tlr = Translator(data_proxy=dp,\n", - " translate_sequence_identifiers=True, # default\n", - " normalize=True, # default\n", - " identify=True) # default" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### From/To HGVS\n", - "\n", - "
\n", - " The HGVS variant below shows G>C. The reference is actually C, meaning that this variant is actually a ref agree assertion. This example intentionally shows VRS's ability to deal with invalid variants.\n", - "
" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "scrolled": true - }, - "outputs": [ + }, { - "data": { - "text/plain": [ - "{'_id': 'ga4gh:VA.DkZLLMnwoH6zIncSRh2c05nzCNLdTqHl',\n", - " 'type': 'Allele',\n", - " 'location': {'type': 'SequenceLocation',\n", - " 'sequence_id': 'ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT',\n", - " 'interval': {'type': 'SequenceInterval',\n", - " 'start': {'type': 'Number', 'value': 32936731},\n", - " 'end': {'type': 'Number', 'value': 32936732}}},\n", - " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'C'}}" + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'added': '2016-08-24T05:03:11Z',\n", + " 'aliases': ['MD5:215137b1973c1a5afcf86be7d999574a',\n", + " 'NCBI:NM_000551.3',\n", + " 'refseq:NM_000551.3',\n", + " 'SEGUID:T12L0p2X5E8DbnL0+SwI4Wc1S6g',\n", + " 'SHA1:4f5d8bd29d97e44f036e72f4f92c08e167354ba8',\n", + " 'VMC:GS_v_QTc1p-MUYdgrRv4LMT6ByXIOsdw3C_',\n", + " 'sha512t24u:v_QTc1p-MUYdgrRv4LMT6ByXIOsdw3C_',\n", + " 'ga4gh:SQ.v_QTc1p-MUYdgrRv4LMT6ByXIOsdw3C_'],\n", + " 'alphabet': 'ACGT',\n", + " 'length': 4560}" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dp.get_metadata(\"refseq:NM_000551.3\")" ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a = tlr.translate_from(\"NC_000013.11:g.32936732G>C\",\"hgvs\")\n", - "a.as_dict()" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "'The postgres default port of 5432 is blocked outbound by binder and potentially other institutions. To circumvent users having to install UTA themselves we created a rest data proxy for variation normalizer for the to_hgvs endpoint.'" + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'CCTCGCCTCCGTTACAACGGCCTACGGTGCTGGAGGATCCTTCTGCGCACG...'" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dp.get_sequence(\"ga4gh:SQ.v_QTc1p-MUYdgrRv4LMT6ByXIOsdw3C_\", start=0, end=51) + \"...\"" ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#tlr.translate_to(a, \"hgvs\")\n", - "\n", - "\"The postgres default port of 5432 is blocked outbound by binder and potentially other institutions. \"\\\n", - "\"To circumvent users having to install UTA themselves we created a rest data proxy for variation normalizer for the to_hgvs endpoint.\"" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "['NC_000013.11:g.32936732=']" + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Format translator\n", + "ga4gh.vrs.extras.translator.Translator translates various formats into VRS representations. \n", + "\n", + "
\n", + " 🚀 The examples below use the same variant in 4 formats: HGVS, beacon, spdi, and VCF/gnomAD. Notice that the resulting Allele objects and computed identifiers are identical.\n", + " \n", + "By default, `Translator` 1) translates sequence identifiers to ga4gh digest-based identifiers, 2) normalizes alleles, 3) adds a ga4gh identifier. These may be disabled as desired. (However, `ga4gh_identify` requires that all objects use identifiers, including sequence identifiers, in the `ga4gh` namespace.)\n", + "
" ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from ga4gh.vrs.extras.variation_normalizer_rest_dp import VariationNormalizerRESTDataProxy\n", - "vnorm = VariationNormalizerRESTDataProxy()\n", - "vnorm.to_hgvs(a)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### From/To SPDI" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "scrolled": true - }, - "outputs": [ + }, { - "data": { - "text/plain": [ - "{'_id': 'ga4gh:VA.DkZLLMnwoH6zIncSRh2c05nzCNLdTqHl',\n", - " 'type': 'Allele',\n", - " 'location': {'type': 'SequenceLocation',\n", - " 'sequence_id': 'ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT',\n", - " 'interval': {'type': 'SequenceInterval',\n", - " 'start': {'type': 'Number', 'value': 32936731},\n", - " 'end': {'type': 'Number', 'value': 32936732}}},\n", - " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'C'}}" + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from ga4gh.vrs.extras.translator import Translator\n", + "tlr = Translator(data_proxy=dp,\n", + " translate_sequence_identifiers=True, # default\n", + " normalize=True, # default\n", + " identify=True) # default" ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# SPDI uses 0-based coordinates\n", - "a = tlr.translate_from(\"NC_000013.11:32936731:1:C\",\"spdi\")\n", - "a.as_dict()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "['NC_000013.11:32936731:1:C']" + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### From/To HGVS\n", + "\n", + "
\n", + " The HGVS variant below shows C>T.\n", + "
" ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "tlr.translate_to(a, \"spdi\")" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "['NC_000013.11:32936731:2:C']" + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'_id': 'ga4gh:VA.CxiA_hvYbkD8Vqwjhx5AYuyul4mtlkpD',\n", + " 'type': 'Allele',\n", + " 'location': {'type': 'SequenceLocation',\n", + " 'sequence_id': 'ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl',\n", + " 'interval': {'type': 'SequenceInterval',\n", + " 'start': {'type': 'Number', 'value': 44908821},\n", + " 'end': {'type': 'Number', 'value': 44908822}}},\n", + " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'T'}}" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = tlr.translate_from(\"NC_000019.10:g.44908822C>T\",\"hgvs\")\n", + "a.as_dict()" ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a.location.interval.end.value += 1\n", - "tlr.translate_to(a, \"spdi\")" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "['NC_000013.11:32936731:2:']" + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'The postgres default port of 5432 is blocked outbound by binder and potentially other institutions. To circumvent users having to install UTA themselves we created a rest data proxy for variation normalizer for the to_hgvs endpoint.'" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#tlr.translate_to(a, \"hgvs\")\n", + "\n", + "\"The postgres default port of 5432 is blocked outbound by binder and potentially other institutions. \"\\\n", + "\"To circumvent users having to install UTA themselves we created a rest data proxy for variation normalizer for the to_hgvs endpoint.\"" ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a.state.sequence = \"\"\n", - "tlr.translate_to(a, \"spdi\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### from Beacon (VCF-like)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "{'_id': 'ga4gh:VA.DkZLLMnwoH6zIncSRh2c05nzCNLdTqHl',\n", - " 'type': 'Allele',\n", - " 'location': {'type': 'SequenceLocation',\n", - " 'sequence_id': 'ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT',\n", - " 'interval': {'type': 'SequenceInterval',\n", - " 'start': {'type': 'Number', 'value': 32936731},\n", - " 'end': {'type': 'Number', 'value': 32936732}}},\n", - " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'C'}}" + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['NC_000019.10:g.44908822C>T']" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from ga4gh.vrs.extras.variation_normalizer_rest_dp import VariationNormalizerRESTDataProxy\n", + "vnorm = VariationNormalizerRESTDataProxy()\n", + "vnorm.to_hgvs(a)" ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# from_beacon: Translate from beacon's form\n", - "a = tlr.translate_from(\"13 : 32936732 G > C\", \"beacon\")\n", - "a.as_dict()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### from gnomAD style VCF" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "{'_id': 'ga4gh:VA.DkZLLMnwoH6zIncSRh2c05nzCNLdTqHl',\n", - " 'type': 'Allele',\n", - " 'location': {'type': 'SequenceLocation',\n", - " 'sequence_id': 'ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT',\n", - " 'interval': {'type': 'SequenceInterval',\n", - " 'start': {'type': 'Number', 'value': 32936731},\n", - " 'end': {'type': 'Number', 'value': 32936732}}},\n", - " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'C'}}" + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### From/To SPDI" ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a = tlr.translate_from(\"13-32936732-G-C\", \"gnomad\") # gnomAD-style expression\n", - "a.as_dict()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Advanced Examples\n", - "\n", - "NM_000551.3 starts with `CCTCGCCTCC`. So, `NM_000551.3:n.5_6insC` inserts a C at the start of an existing run of two C residues." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "from IPython.display import HTML, display\n", - "import tabulate\n", - "\n", - "hgvs_expr = \"NM_000551.3:n.5_6insC\"\n", - "\n", - "# Translator with default behaviors disabled\n", - "tlr2 = Translator(data_proxy=dp,\n", - " translate_sequence_identifiers=False,\n", - " normalize=False,\n", - " identify=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### translate_sequence_identifiers" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
translate_sequence_identifiers=sequence_id
False refseq:NM_000551.3
True ga4gh:SQ.v_QTc1p-MUYdgrRv4LMT6ByXIOsdw3C_
" + "cell_type": "code", + "execution_count": 8, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'_id': 'ga4gh:VA.CxiA_hvYbkD8Vqwjhx5AYuyul4mtlkpD',\n", + " 'type': 'Allele',\n", + " 'location': {'type': 'SequenceLocation',\n", + " 'sequence_id': 'ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl',\n", + " 'interval': {'type': 'SequenceInterval',\n", + " 'start': {'type': 'Number', 'value': 44908821},\n", + " 'end': {'type': 'Number', 'value': 44908822}}},\n", + " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'T'}}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } ], - "text/plain": [ - "" + "source": [ + "# SPDI uses 0-based coordinates\n", + "a = tlr.translate_from(\"NC_000019.10:44908821:1:T\",\"spdi\")\n", + "a.as_dict()" ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "header = \"translate_sequence_identifiers= sequence_id\".split()\n", - "table = [header]\n", - "for tsi in (False, True):\n", - " tlr2.translate_sequence_identifiers = tsi\n", - " a = tlr2.translate_from(hgvs_expr, \"hgvs\")\n", - " row = [tlr2.translate_sequence_identifiers,\n", - " a.location.sequence_id._value]\n", - " table += [row]\n", - "display(HTML(tabulate.tabulate(table, tablefmt='html')))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### normalize\n", - "VRS normalization uses [fully-justified normalization](https://vr-spec.readthedocs.io/en/1.0/impl-guide/normalization.html). In this case, the left-aligned insertion (c.5_6insC) is renormalized as a replacement of the two C residues with three C residues at interbase coordinates [5,7]." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['NC_000019.10:44908821:1:T']" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tlr.translate_to(a, \"spdi\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['NC_000019.10:44908821:2:T']" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a.location.interval.end.value += 1\n", + "tlr.translate_to(a, \"spdi\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['NC_000019.10:44908821:2:']" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a.state.sequence = \"\"\n", + "tlr.translate_to(a, \"spdi\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### from Beacon (VCF-like)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'_id': 'ga4gh:VA.CxiA_hvYbkD8Vqwjhx5AYuyul4mtlkpD',\n", + " 'type': 'Allele',\n", + " 'location': {'type': 'SequenceLocation',\n", + " 'sequence_id': 'ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl',\n", + " 'interval': {'type': 'SequenceInterval',\n", + " 'start': {'type': 'Number', 'value': 44908821},\n", + " 'end': {'type': 'Number', 'value': 44908822}}},\n", + " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'T'}}" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# from_beacon: Translate from beacon's form\n", + "a = tlr.translate_from(\"19 : 44908822 C > T\", \"beacon\")\n", + "a.as_dict()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### from gnomAD style VCF" + ] + }, { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
normalize=sequence_id intervalalthgvs
False ga4gh:SQ.v_QTc1p-MUYdgrRv4LMT6ByXIOsdw3C_5,5 C NM_000551.3:n.7dup
True ga4gh:SQ.v_QTc1p-MUYdgrRv4LMT6ByXIOsdw3C_5,7 CCCNM_000551.3:n.7dup
" + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'_id': 'ga4gh:VA.CxiA_hvYbkD8Vqwjhx5AYuyul4mtlkpD',\n", + " 'type': 'Allele',\n", + " 'location': {'type': 'SequenceLocation',\n", + " 'sequence_id': 'ga4gh:SQ.IIB53T8CNeJJdUqzn9V_JnRtQadwWCbl',\n", + " 'interval': {'type': 'SequenceInterval',\n", + " 'start': {'type': 'Number', 'value': 44908821},\n", + " 'end': {'type': 'Number', 'value': 44908822}}},\n", + " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'T'}}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } ], - "text/plain": [ - "" + "source": [ + "a = tlr.translate_from(\"19-44908822-C-T\", \"gnomad\") # gnomAD-style expression\n", + "a.as_dict()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Advanced Examples\n", + "\n", + "NM_000551.3 starts with `CCTCGCCTCC`. So, `NM_000551.3:n.5_6insC` inserts a C at the start of an existing run of two C residues." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import HTML, display\n", + "import tabulate\n", + "\n", + "hgvs_expr = \"NM_000551.3:n.5_6insC\"\n", + "\n", + "# Translator with default behaviors disabled\n", + "tlr2 = Translator(data_proxy=dp,\n", + " translate_sequence_identifiers=False,\n", + " normalize=False,\n", + " identify=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### translate_sequence_identifiers" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
translate_sequence_identifiers=sequence_id
False refseq:NM_000551.3
True ga4gh:SQ.v_QTc1p-MUYdgrRv4LMT6ByXIOsdw3C_
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "header = \"translate_sequence_identifiers= sequence_id\".split()\n", + "table = [header]\n", + "for tsi in (False, True):\n", + " tlr2.translate_sequence_identifiers = tsi\n", + " a = tlr2.translate_from(hgvs_expr, \"hgvs\")\n", + " row = [tlr2.translate_sequence_identifiers,\n", + " a.location.sequence_id._value]\n", + " table += [row]\n", + "display(HTML(tabulate.tabulate(table, tablefmt='html')))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### normalize\n", + "VRS normalization uses [fully-justified normalization](https://vr-spec.readthedocs.io/en/1.0/impl-guide/normalization.html). In this case, the left-aligned insertion (c.5_6insC) is renormalized as a replacement of the two C residues with three C residues at interbase coordinates [5,7]." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
normalize=sequence_id intervalalthgvs
False ga4gh:SQ.v_QTc1p-MUYdgrRv4LMT6ByXIOsdw3C_5,5 C NM_000551.3:n.7dup
True ga4gh:SQ.v_QTc1p-MUYdgrRv4LMT6ByXIOsdw3C_5,7 CCCNM_000551.3:n.7dup
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tlr2.translate_sequence_identifiers = True\n", + "\n", + "header = \"normalize= sequence_id interval alt hgvs\".split()\n", + "table = [header]\n", + "for normalize in (False, True):\n", + " tlr2.normalize = normalize\n", + " a = tlr2.translate_from(hgvs_expr, \"hgvs\")\n", + " row = [tlr2.normalize,\n", + " a.location.sequence_id,\n", + " f\"{a.location.interval.start.value},{a.location.interval.end.value}\",\n", + " a.state.sequence,\n", + " #tlr2.translate_to(a, 'hgvs')[0]\n", + " vnorm.to_hgvs(a)[0]\n", + " ]\n", + " table += [row]\n", + "display(HTML(tabulate.tabulate(table, tablefmt='html')))" ] - }, - "metadata": {}, - "output_type": "display_data" } - ], - "source": [ - "tlr2.translate_sequence_identifiers = True\n", - "\n", - "header = \"normalize= sequence_id interval alt hgvs\".split()\n", - "table = [header]\n", - "for normalize in (False, True):\n", - " tlr2.normalize = normalize\n", - " a = tlr2.translate_from(hgvs_expr, \"hgvs\")\n", - " row = [tlr2.normalize,\n", - " a.location.sequence_id,\n", - " f\"{a.location.interval.start.value},{a.location.interval.end.value}\",\n", - " a.state.sequence,\n", - " #tlr2.translate_to(a, 'hgvs')[0]\n", - " vnorm.to_hgvs(a)[0]\n", - " ]\n", - " table += [row]\n", - "display(HTML(tabulate.tabulate(table, tablefmt='html')))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.13" + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.13" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 4 + "nbformat": 4, + "nbformat_minor": 4 } diff --git a/notebooks/HGVS Translation.ipynb b/notebooks/HGVS Translation.ipynb index 7d0052d5..bac094cd 100644 --- a/notebooks/HGVS Translation.ipynb +++ b/notebooks/HGVS Translation.ipynb @@ -1,485 +1,494 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This notebook demonstrates the mechanics of translating an HGVS expression to a VR representation for educational purposes. Users who wish to translate HGVS or other expressions routinely should use ga4gh.vrs.extras.translator." - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [], - "source": [ - "from ga4gh.core import ga4gh_identify\n", - "from ga4gh.vrs import models\n", - "from ga4gh.vrs.dataproxy import SeqRepoRESTDataProxy\n", - "from ga4gh.vrs.extras.translator import Translator\n", - "from biocommons.seqrepo import SeqRepo\n", - "from IPython.display import HTML, display" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Translate an expression manually\n", - "\n", - "First, we'll translate NC_000013.11:g.32936732G>C to VR manually to see the evolution of the process. " - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [], - "source": [ - "# We'll translate this expression to VR:\n", - "hgvs_expr = \"\"" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "scrolled": true - }, - "outputs": [ + "cells": [ { - "data": { - "text/plain": [ - "{'type': 'Allele',\n", - " 'location': {'type': 'SequenceLocation',\n", - " 'sequence_id': 'refseq:NC_000013.11',\n", - " 'interval': {'type': 'SequenceInterval',\n", - " 'start': {'type': 'Number', 'value': 32936731},\n", - " 'end': {'type': 'Number', 'value': 32936732}}},\n", - " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'C'}}" + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook demonstrates the mechanics of translating an HGVS expression to a VR representation for educational purposes. Users who wish to translate HGVS or other expressions routinely should use ga4gh.vrs.extras.translator." ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allele = models.Allele(\n", - " location = models.SequenceLocation(\n", - " sequence_id = \"refseq:NC_000013.11\",\n", - " interval = models.SequenceInterval(\n", - " start = models.Number(value=32936731, type=\"Number\"),\n", - " end = models.Number(value=32936732, type=\"Number\"),\n", - " type=\"SequenceInterval\"\n", - " ),\n", - " type=\"SequenceLocation\"\n", - " ),\n", - " state = models.SequenceExpression(\n", - " sequence = \"C\",\n", - " type=\"LiteralSequenceExpression\"\n", - " ),\n", - " type=\"Allele\"\n", - ")\n", - "\n", - "allele.as_dict()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - " 👍 The above message is a valid VR message. VR requires that\n", - " sequence identifiers use CURIE syntax with a namespace from identifiers.org and\n", - " that locations are specified with interbase coordinates. Using sequence digests\n", - " is NOT required.\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Replace the RefSeq sequence with a GA4GH sequence id\n", - "\n", - "In order to use the computed identifier mechanism in VR, the sequence_id MUST use\n", - "GA4GH computed sequence identifiers. \n", - "\n", - "Implementations choose how to provide sequence and sequence accession services" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "'ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT'" + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/kxk102/Documents/ga4gh/vrs-python/venv/3.10/lib/python3.10/site-packages/python_jsonschema_objects/__init__.py:49: UserWarning: Schema version http://json-schema.org/draft-07/schema not recognized. Some keywords and features may not be supported.\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "from ga4gh.core import ga4gh_identify\n", + "from ga4gh.vrs import models\n", + "from ga4gh.vrs.dataproxy import SeqRepoRESTDataProxy\n", + "from ga4gh.vrs.extras.translator import Translator\n", + "from biocommons.seqrepo import SeqRepo\n", + "from IPython.display import HTML, display" ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "seqrepo_rest_service_url = \"https://services.genomicmedlab.org/seqrepo\"\n", - "dp = SeqRepoRESTDataProxy(base_url=seqrepo_rest_service_url)\n", - "\n", - "# In general, one identifier may be related to many others in another namespace\n", - "# Therefore, translate_sequence_identifier() returns a list.\n", - "# Because there will be only 1 ga4gh sequence digest, we choose the first\n", - "# and then replace the sequence id in allele.location.\n", - "\n", - "refseq_ir = str(allele.location.sequence_id)\n", - "ga4gh_ir = dp.translate_sequence_identifier(refseq_ir, \"ga4gh\")[0]\n", - "ga4gh_ir" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "{'type': 'Allele',\n", - " 'location': {'type': 'SequenceLocation',\n", - " 'sequence_id': 'ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT',\n", - " 'interval': {'type': 'SequenceInterval',\n", - " 'start': {'type': 'Number', 'value': 32936731},\n", - " 'end': {'type': 'Number', 'value': 32936732}}},\n", - " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'C'}}" + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Translate an expression manually\n", + "\n", + "First, we'll translate NC_000019.10:g.44908822C>T to VR manually to see the evolution of the process. " ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Now, simply replace the identifier with the GA4GH identifier\n", - "allele.location.sequence_id = ga4gh_ir\n", - "allele.as_dict()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Computed Identifiers (optional)\n", - "\n", - "ga4gh_identify() serializes the object and computes the identifier\n", - "(See ga4gh_serialize and ga4gh_digest for details)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "{'_id': 'ga4gh:VA.DkZLLMnwoH6zIncSRh2c05nzCNLdTqHl',\n", - " 'type': 'Allele',\n", - " 'location': {'type': 'SequenceLocation',\n", - " 'sequence_id': 'ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT',\n", - " 'interval': {'type': 'SequenceInterval',\n", - " 'start': {'type': 'Number', 'value': 32936731},\n", - " 'end': {'type': 'Number', 'value': 32936732}}},\n", - " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'C'}}" + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# We'll translate this expression to VR:\n", + "hgvs_expr = \"\"" ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "allele._id = ga4gh_identify(allele)\n", - "allele.as_dict()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Using ga4gh.vrs.extras.translator\n", - "\n", - "The VR Translator imports HGVS, SPDI, Beacon, and VCF formats, and appropriate handles more complex cases than shown above.\n", - "\n", - "By default, the translator translates HGVS reference sequences to GA4GH sequence digest identifiers and adds identifiers to the resulting Allele objects." - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [], - "source": [ - "tlr = Translator(data_proxy=dp)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### HGVS → VR" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "scrolled": true - }, - "outputs": [ + }, { - "data": { - "text/plain": [ - "{'_id': 'ga4gh:VA.hMfrqZuECxo2yyGLltnim_q71QDkK-HR',\n", - " 'type': 'Allele',\n", - " 'location': {'type': 'SequenceLocation',\n", - " 'sequence_id': 'ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT',\n", - " 'interval': {'type': 'SequenceInterval',\n", - " 'start': {'type': 'Number', 'value': 32936731},\n", - " 'end': {'type': 'Number', 'value': 32936732}}},\n", - " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'G'}}" + "cell_type": "code", + "execution_count": 3, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'type': 'Allele',\n", + " 'location': {'type': 'SequenceLocation',\n", + " 'sequence_id': 'refseq:NC_000013.11',\n", + " 'interval': {'type': 'SequenceInterval',\n", + " 'start': {'type': 'Number', 'value': 32936731},\n", + " 'end': {'type': 'Number', 'value': 32936732}}},\n", + " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'C'}}" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "allele = models.Allele(\n", + " location = models.SequenceLocation(\n", + " sequence_id = \"refseq:NC_000013.11\",\n", + " interval = models.SequenceInterval(\n", + " start = models.Number(value=32936731, type=\"Number\"),\n", + " end = models.Number(value=32936732, type=\"Number\"),\n", + " type=\"SequenceInterval\"\n", + " ),\n", + " type=\"SequenceLocation\"\n", + " ),\n", + " state = models.SequenceExpression(\n", + " sequence = \"C\",\n", + " type=\"LiteralSequenceExpression\"\n", + " ),\n", + " type=\"Allele\"\n", + ")\n", + "\n", + "allele.as_dict()" ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hgvs_expr1 = \"NC_000013.11:g.32936732C>G\"\n", - "allele1 = tlr.translate_from(hgvs_expr1,'hgvs')\n", - "allele1.as_dict()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### VR → HGVS\n", - "\n", - "Because a GA4GH sequence identifier may have many aliases, each VR Allele\n", - "may be expressed as multiple HGVS expressions. For this reason, `translate_to(allele, \"hgvs\")` returns\n", - "a *list* of HGVS expressions, optionally limited to aliases from a specified namespace." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The postgres default port of 5432 is blocked outbound by binder and potentially other institutions. To circumvent users having to install UTA themselves we created a rest data proxy for variation normalizer for the to_hgvs endpoint." - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [], - "source": [ - "from ga4gh.vrs.extras.variation_normalizer_rest_dp import VariationNormalizerRESTDataProxy\n", - "vnorm = VariationNormalizerRESTDataProxy()" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "['NC_000013.11:g.32936732=']" + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " 👍 The above message is a valid VR message. VR requires that\n", + " sequence identifiers use CURIE syntax with a namespace from identifiers.org and\n", + " that locations are specified with interbase coordinates. Using sequence digests\n", + " is NOT required.\n", + "
" ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# tlr.translate_to(allele, \"hgvs\")\n", - "vnorm.to_hgvs(allele)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/plain": [ - "['NC_000013.11:g.32936732=']" + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Replace the RefSeq sequence with a GA4GH sequence id\n", + "\n", + "In order to use the computed identifier mechanism in VR, the sequence_id MUST use\n", + "GA4GH computed sequence identifiers. \n", + "\n", + "Implementations choose how to provide sequence and sequence accession services" ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Most commonly, we'll want expressions from a well-known authority like RefSeq\n", - "# Again, there might in general be multiple `refseq` expressions\n", - "# tlr._to_hgvs(allele, \"refseq\")\n", - "vnorm.to_hgvs(allele, \"refseq\")" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": { - "scrolled": true - }, - "outputs": [ + }, { - "data": { - "text/plain": [ - "[]" + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT'" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "seqrepo_rest_service_url = \"https://services.genomicmedlab.org/seqrepo\"\n", + "dp = SeqRepoRESTDataProxy(base_url=seqrepo_rest_service_url)\n", + "\n", + "# In general, one identifier may be related to many others in another namespace\n", + "# Therefore, translate_sequence_identifier() returns a list.\n", + "# Because there will be only 1 ga4gh sequence digest, we choose the first\n", + "# and then replace the sequence id in allele.location.\n", + "\n", + "refseq_ir = str(allele.location.sequence_id)\n", + "ga4gh_ir = dp.translate_sequence_identifier(refseq_ir, \"ga4gh\")[0]\n", + "ga4gh_ir" ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# GRC namespaces is handled as a special case: Because aliases are shared \n", - "# between GRCh releases, they're shown only on request\n", - "# tlr._to_hgvs(allele, \"GRCh38\")\n", - "vnorm.to_hgvs(allele, \"GRCh38\")" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "import yaml\n", - "def filter_dict(d):\n", - " try:\n", - " return {k: filter_dict(d[k])\n", - " for k in d\n", - " if not k.startswith(\"_\")}\n", - " except:\n", - " return d\n", - "def as_str(s):\n", - " return s if isinstance(s, str) else s.decode()\n", - "def dj(o):\n", - " \"\"\"print VR object as pretty formated json\"\"\"\n", - " print(json.dumps(filter_dict(o.as_dict()), indent=2, sort_keys=True))\n", - "def dy(fns, o):\n", - " \"\"\"execute function f in fns on o, returning a yaml block representing the test\"\"\"\n", - " r = {\n", - " \"in\": o.as_dict(),\n", - " \"out\": {f.__name__: as_str(f(o)) for f in fns}\n", - " }\n", - " print(yaml.dump(filter_dict({o.type._value: {\"-\": r}})).replace(\"'-':\",\"-\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [ + }, { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
checkhgvs_orig sequence_id sequence_id_normalized hgvs_normalized
NC_000013.11:g.32936732_32936733del ga4gh:VA.kYyJV-7Lb4fZf-YqHu10cYtx9gIXjdcyga4gh:VA.7ahP-UdJqNPSEE-uNrU0ZGmds4l_-KpVNC_000013.11:g.32936732_32936733del
NC_000013.11:g.32936732_32936737del ga4gh:VA.9W6Jz2q2qjbGApLum_VDqlkXemmvcwXiga4gh:VA.TaMm-xIwFH1p7O4Wp9gWOLMIR65LgUmfNC_000013.11:g.32936732_32936737del
NC_000013.11:g.32936732_32936733insC ga4gh:VA.8wBFNOtRXN_nLXl7RuegLBFsVjIXx-F3ga4gh:VA.qzQBN8ZdKnE1tpD_7_VTalAVwipUriZ3NC_000013.11:g.32936733dup
NC_000013.11:g.32936732_32936733delinsCga4gh:VA.I5brmWPyNXAs40tBrm1j3Kq8XRMwiejdga4gh:VA._eer8nWJENP2nbbWPBb732GnqCMHu0eGNC_000013.11:g.32936733del
NC_000013.11:g.32936732_32936735delinsCga4gh:VA.Uprg7LRIsxG0E115oq0dx2YVC2eN7uBOga4gh:VA.Ecj7hDMT7mRzGjlIYzfPTlhblgAu8b8pNC_000013.11:g.32936733_32936735del
NC_000013.11:g.32936732C>G ga4gh:VA.hMfrqZuECxo2yyGLltnim_q71QDkK-HRga4gh:VA.hMfrqZuECxo2yyGLltnim_q71QDkK-HRNC_000013.11:g.32936732C>G
NM_015102.3:n.2802C>T ga4gh:VA.tqiPzREp-I9ZCQghRbhuN5M9Vl-EiwQAga4gh:VA.tqiPzREp-I9ZCQghRbhuN5M9Vl-EiwQANM_015102.3:n.2802C>T
NC_000013.10:g.32331094_32331095dup ga4gh:VA.jLiYl2hu82a2xPBGqxUS31eD_ZQ0QSHwga4gh:VA.OSLHYPUEUo2qI9nyX2LvI0cwc-BCkZauNC_000013.10:g.32331094_32331095dup
NC_000013.10:g.32331092_32331093insTA ga4gh:VA.PiDvexGcIBmp99C4SP7JWzhqz1Fp_TBRga4gh:VA.OSLHYPUEUo2qI9nyX2LvI0cwc-BCkZauNC_000013.10:g.32331094_32331095dup
" + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'type': 'Allele',\n", + " 'location': {'type': 'SequenceLocation',\n", + " 'sequence_id': 'ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT',\n", + " 'interval': {'type': 'SequenceInterval',\n", + " 'start': {'type': 'Number', 'value': 32936731},\n", + " 'end': {'type': 'Number', 'value': 32936732}}},\n", + " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'C'}}" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } ], - "text/plain": [ - "" + "source": [ + "# Now, simply replace the identifier with the GA4GH identifier\n", + "allele.location.sequence_id = ga4gh_ir\n", + "allele.as_dict()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Computed Identifiers (optional)\n", + "\n", + "ga4gh_identify() serializes the object and computes the identifier\n", + "(See ga4gh_serialize and ga4gh_digest for details)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'_id': 'ga4gh:VA.DkZLLMnwoH6zIncSRh2c05nzCNLdTqHl',\n", + " 'type': 'Allele',\n", + " 'location': {'type': 'SequenceLocation',\n", + " 'sequence_id': 'ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT',\n", + " 'interval': {'type': 'SequenceInterval',\n", + " 'start': {'type': 'Number', 'value': 32936731},\n", + " 'end': {'type': 'Number', 'value': 32936732}}},\n", + " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'C'}}" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "allele._id = ga4gh_identify(allele)\n", + "allele.as_dict()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Using ga4gh.vrs.extras.translator\n", + "\n", + "The VR Translator imports HGVS, SPDI, Beacon, and VCF formats, and appropriate handles more complex cases than shown above.\n", + "\n", + "By default, the translator translates HGVS reference sequences to GA4GH sequence digest identifiers and adds identifiers to the resulting Allele objects." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "tlr = Translator(data_proxy=dp)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### HGVS → VR" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'_id': 'ga4gh:VA.hMfrqZuECxo2yyGLltnim_q71QDkK-HR',\n", + " 'type': 'Allele',\n", + " 'location': {'type': 'SequenceLocation',\n", + " 'sequence_id': 'ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT',\n", + " 'interval': {'type': 'SequenceInterval',\n", + " 'start': {'type': 'Number', 'value': 32936731},\n", + " 'end': {'type': 'Number', 'value': 32936732}}},\n", + " 'state': {'type': 'LiteralSequenceExpression', 'sequence': 'G'}}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hgvs_expr1 = \"NC_000013.11:g.32936732C>G\"\n", + "allele1 = tlr.translate_from(hgvs_expr1,'hgvs')\n", + "allele1.as_dict()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### VR → HGVS\n", + "\n", + "Because a GA4GH sequence identifier may have many aliases, each VR Allele\n", + "may be expressed as multiple HGVS expressions. For this reason, `translate_to(allele, \"hgvs\")` returns\n", + "a *list* of HGVS expressions, optionally limited to aliases from a specified namespace." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The postgres default port of 5432 is blocked outbound by binder and potentially other institutions. To circumvent users having to install UTA themselves we created a rest data proxy for variation normalizer for the to_hgvs endpoint." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from ga4gh.vrs.extras.variation_normalizer_rest_dp import VariationNormalizerRESTDataProxy\n", + "vnorm = VariationNormalizerRESTDataProxy()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['NC_000013.11:g.32936732=']" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# tlr.translate_to(allele, \"hgvs\")\n", + "vnorm.to_hgvs(allele)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['NC_000013.11:g.32936732=']" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Most commonly, we'll want expressions from a well-known authority like RefSeq\n", + "# Again, there might in general be multiple `refseq` expressions\n", + "# tlr._to_hgvs(allele, \"refseq\")\n", + "vnorm.to_hgvs(allele, \"refseq\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# GRC namespaces is handled as a special case: Because aliases are shared \n", + "# between GRCh releases, they're shown only on request\n", + "# tlr._to_hgvs(allele, \"GRCh38\")\n", + "vnorm.to_hgvs(allele, \"GRCh38\")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "import yaml\n", + "def filter_dict(d):\n", + " try:\n", + " return {k: filter_dict(d[k])\n", + " for k in d\n", + " if not k.startswith(\"_\")}\n", + " except:\n", + " return d\n", + "def as_str(s):\n", + " return s if isinstance(s, str) else s.decode()\n", + "def dj(o):\n", + " \"\"\"print VR object as pretty formated json\"\"\"\n", + " print(json.dumps(filter_dict(o.as_dict()), indent=2, sort_keys=True))\n", + "def dy(fns, o):\n", + " \"\"\"execute function f in fns on o, returning a yaml block representing the test\"\"\"\n", + " r = {\n", + " \"in\": o.as_dict(),\n", + " \"out\": {f.__name__: as_str(f(o)) for f in fns}\n", + " }\n", + " print(yaml.dump(filter_dict({o.type._value: {\"-\": r}})).replace(\"'-':\",\"-\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
checkhgvs_orig sequence_id sequence_id_normalized hgvs_normalized
NC_000013.11:g.32936732_32936733del ga4gh:VA.kYyJV-7Lb4fZf-YqHu10cYtx9gIXjdcyga4gh:VA.7ahP-UdJqNPSEE-uNrU0ZGmds4l_-KpVNC_000013.11:g.32936732_32936733del
NC_000013.11:g.32936732_32936737del ga4gh:VA.9W6Jz2q2qjbGApLum_VDqlkXemmvcwXiga4gh:VA.TaMm-xIwFH1p7O4Wp9gWOLMIR65LgUmfNC_000013.11:g.32936732_32936737del
NC_000013.11:g.32936732_32936733insC ga4gh:VA.8wBFNOtRXN_nLXl7RuegLBFsVjIXx-F3ga4gh:VA.qzQBN8ZdKnE1tpD_7_VTalAVwipUriZ3NC_000013.11:g.32936733dup
NC_000013.11:g.32936732_32936733delinsCga4gh:VA.I5brmWPyNXAs40tBrm1j3Kq8XRMwiejdga4gh:VA._eer8nWJENP2nbbWPBb732GnqCMHu0eGNC_000013.11:g.32936733del
NC_000013.11:g.32936732_32936735delinsCga4gh:VA.Uprg7LRIsxG0E115oq0dx2YVC2eN7uBOga4gh:VA.Ecj7hDMT7mRzGjlIYzfPTlhblgAu8b8pNC_000013.11:g.32936733_32936735del
NC_000013.11:g.32936732C>G ga4gh:VA.hMfrqZuECxo2yyGLltnim_q71QDkK-HRga4gh:VA.hMfrqZuECxo2yyGLltnim_q71QDkK-HRNC_000013.11:g.32936732C>G
NM_015102.3:n.2802C>T ga4gh:VA.tqiPzREp-I9ZCQghRbhuN5M9Vl-EiwQAga4gh:VA.tqiPzREp-I9ZCQghRbhuN5M9Vl-EiwQANM_015102.3:n.2802C>T
NC_000013.10:g.32331094_32331095dup ga4gh:VA.jLiYl2hu82a2xPBGqxUS31eD_ZQ0QSHwga4gh:VA.OSLHYPUEUo2qI9nyX2LvI0cwc-BCkZauNC_000013.10:g.32331094_32331095dup
NC_000013.10:g.32331092_32331093insTA ga4gh:VA.PiDvexGcIBmp99C4SP7JWzhqz1Fp_TBRga4gh:VA.OSLHYPUEUo2qI9nyX2LvI0cwc-BCkZauNC_000013.10:g.32331094_32331095dup
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import tabulate\n", + "from ga4gh.vrs.normalize import normalize\n", + "from ga4gh.vrs.extras.variation_normalizer_rest_dp import VariationNormalizerRESTDataProxy\n", + "vnorm = VariationNormalizerRESTDataProxy()\n", + "\n", + "#The postgres default port of 5432 is blocked outbound by binder and potentially other institutions. \n", + "#To circumvent users having to install UTA themsleves we created a rest data proxy for variation normalizer for the to_hgvs endpoint.\n", + "\n", + "# todo: this example should get changed to use normalized hgvs_g as input.\n", + "tlr.normalize = False\n", + "\n", + "# Round-trip test: HGVS → VR Allele → HGVS[]\n", + "header = \"check hgvs_orig sequence_id sequence_id_normalized hgvs_normalized\".split()\n", + "table = [header]\n", + "for hgvs_expr in (\n", + " \"NC_000013.11:g.32936732_32936733del\",\n", + " \"NC_000013.11:g.32936732_32936737del\",\n", + " \"NC_000013.11:g.32936732_32936733insC\",\n", + " \"NC_000013.11:g.32936732_32936733delinsC\",\n", + " \"NC_000013.11:g.32936732_32936735delinsC\",\n", + " \"NC_000013.11:g.32936732C>G\",\n", + " \"NM_015102.3:n.2802C>T\",\n", + " \"NC_000013.10:g.32331094_32331095dup\",\n", + " \"NC_000013.10:g.32331092_32331093insTA\"\n", + "):\n", + " a = tlr.translate_from(hgvs_expr, \"hgvs\")\n", + " #he = tlr.translate_to(a, \"hgvs\")\n", + " he = vnorm.to_hgvs(a)\n", + " chk = \"✔\" if hgvs_expr in he else \"✘\"\n", + " #print(f\"{chk} {hgvs_expr}\\n → {ga4gh_identify(a)}\\n → {he}\")\n", + " a_norm = normalize(a, dp)\n", + " row = [chk, hgvs_expr, ga4gh_identify(a), ga4gh_identify(a_norm), he[0] ]\n", + " table += [row]\n", + "display(HTML(tabulate.tabulate(table, tablefmt='html')))" ] - }, - "metadata": {}, - "output_type": "display_data" } - ], - "source": [ - "import tabulate\n", - "from ga4gh.vrs.normalize import normalize\n", - "from ga4gh.vrs.extras.variation_normalizer_rest_dp import VariationNormalizerRESTDataProxy\n", - "vnorm = VariationNormalizerRESTDataProxy()\n", - "\n", - "#The postgres default port of 5432 is blocked outbound by binder and potentially other institutions. \n", - "#To circumvent users having to install UTA themsleves we created a rest data proxy for variation normalizer for the to_hgvs endpoint.\n", - "\n", - "# todo: this example should get changed to use normalized hgvs_g as input.\n", - "tlr.normalize = False\n", - "\n", - "# Round-trip test: HGVS → VR Allele → HGVS[]\n", - "header = \"check hgvs_orig sequence_id sequence_id_normalized hgvs_normalized\".split()\n", - "table = [header]\n", - "for hgvs_expr in (\n", - " \"NC_000013.11:g.32936732_32936733del\",\n", - " \"NC_000013.11:g.32936732_32936737del\",\n", - " \"NC_000013.11:g.32936732_32936733insC\",\n", - " \"NC_000013.11:g.32936732_32936733delinsC\",\n", - " \"NC_000013.11:g.32936732_32936735delinsC\",\n", - " \"NC_000013.11:g.32936732C>G\",\n", - " \"NM_015102.3:n.2802C>T\",\n", - " \"NC_000013.10:g.32331094_32331095dup\",\n", - " \"NC_000013.10:g.32331092_32331093insTA\"\n", - "):\n", - " a = tlr.translate_from(hgvs_expr, \"hgvs\")\n", - " #he = tlr.translate_to(a, \"hgvs\")\n", - " he = vnorm.to_hgvs(a)\n", - " chk = \"✔\" if hgvs_expr in he else \"✘\"\n", - " #print(f\"{chk} {hgvs_expr}\\n → {ga4gh_identify(a)}\\n → {he}\")\n", - " a_norm = normalize(a, dp)\n", - " row = [chk, hgvs_expr, ga4gh_identify(a), ga4gh_identify(a_norm), he[0] ]\n", - " table += [row]\n", - "display(HTML(tabulate.tabulate(table, tablefmt='html')))" - ] - } - ], - "metadata": { - "interpreter": { - "hash": "e3010397f827d762dd71da5e8c08c9d1e15db6c6cbe60e8a92c1e943686ce175" - }, - "kernelspec": { - "display_name": "vrs-python", - "language": "python", - "name": "vrs-python" + ], + "metadata": { + "interpreter": { + "hash": "e3010397f827d762dd71da5e8c08c9d1e15db6c6cbe60e8a92c1e943686ce175" + }, + "kernelspec": { + "display_name": "vrs-python", + "language": "python", + "name": "vrs-python" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.12" - } - }, - "nbformat": 4, - "nbformat_minor": 2 + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/src/ga4gh/vrs/extras/translator.py b/src/ga4gh/vrs/extras/translator.py index e24c92cc..dbdc2b84 100644 --- a/src/ga4gh/vrs/extras/translator.py +++ b/src/ga4gh/vrs/extras/translator.py @@ -109,15 +109,15 @@ def ensure_allele_is_latest_model(self, allele): def _from_beacon(self, beacon_expr, assembly_name=None): """Parse beacon expression into VRS Allele - #>>> a = tlr.from_beacon("13 : 32936732 G > C") + #>>> a = tlr.from_beacon("19 : 44908822 C > T") #>>> a.as_dict() {'location': {'interval': { - 'end': {'value': 32936732, 'type': Number}, - 'start': {'value': 32936731, 'type': Number}, + 'end': {'value': 44908822, 'type': Number}, + 'start': {'value': 44908821, 'type': Number}, 'type': 'SequenceInterval'}, - 'sequence_id': 'GRCh38:13 ', + 'sequence_id': 'GRCh38:19', 'type': 'SequenceLocation'}, - 'state': {'sequence': 'C', 'type': 'LiteralSequenceExpression'}, + 'state': {'sequence': 'T', 'type': 'LiteralSequenceExpression'}, 'type': 'Allele'} """ @@ -535,8 +535,8 @@ def _seq_id_mapper(self, ir): expressions = [ "bogus", "1-55516888-G-GA", - "13 : 32936732 G > C", - "NC_000013.11:g.32936732G>C", + "19 : 44908822 C > T", + "NC_000019.10:g.44908822C>T", "NM_000551.3:21:1:T", { "location": { "interval": { From 0870fb5d34ad0b04c877647956936dbe5cbde37b Mon Sep 17 00:00:00 2001 From: korikuzma Date: Tue, 17 Jan 2023 17:29:40 -0500 Subject: [PATCH 04/10] revert HGVS Translation to previous commit --- notebooks/HGVS Translation.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notebooks/HGVS Translation.ipynb b/notebooks/HGVS Translation.ipynb index d5700a18..bac094cd 100644 --- a/notebooks/HGVS Translation.ipynb +++ b/notebooks/HGVS Translation.ipynb @@ -486,7 +486,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.8" + "version": "3.9.12" } }, "nbformat": 4, From b9b5a2e552e72e1ba2e8fe1892772fc583233583 Mon Sep 17 00:00:00 2001 From: korikuzma Date: Fri, 27 Jan 2023 08:34:38 -0500 Subject: [PATCH 05/10] cleanup: remove pass in exceptions, disable protected-access in pylint --- .pylintrc | 2 +- src/ga4gh/core/_internal/identifiers.py | 2 +- src/ga4gh/vrs/extras/localizer.py | 19 ++++++------------- src/ga4gh/vrs/extras/translator.py | 6 ++---- src/ga4gh/vrs/extras/vcf_annotation.py | 6 ++---- src/ga4gh/vrs/normalize.py | 10 +++++----- 6 files changed, 17 insertions(+), 28 deletions(-) diff --git a/.pylintrc b/.pylintrc index 8ae7a4a2..b1170071 100644 --- a/.pylintrc +++ b/.pylintrc @@ -39,7 +39,7 @@ max-module-lines=1000 # --enable=similarities". If you want to run only the classes checker, but have # no Warning level messages displayed, use "--disable=all --enable=classes # --disable=W". -disable=fixme +disable=fixme,protected-access [STRING] diff --git a/src/ga4gh/core/_internal/identifiers.py b/src/ga4gh/core/_internal/identifiers.py index 81ea9149..bd2f122f 100644 --- a/src/ga4gh/core/_internal/identifiers.py +++ b/src/ga4gh/core/_internal/identifiers.py @@ -158,7 +158,7 @@ def dictify(vro, enref=True): # pylint: disable=too-many-return-statements,too- return None if is_literal(vro): - v = vro._value # pylint: disable=protected-access + v = vro._value if is_curie_type(vro): if is_ga4gh_identifier(v): # CURIEs are stripped to just the digest so that digests are independent of type prefixes diff --git a/src/ga4gh/vrs/extras/localizer.py b/src/ga4gh/vrs/extras/localizer.py index 4c2ec4fb..86f1f2a8 100644 --- a/src/ga4gh/vrs/extras/localizer.py +++ b/src/ga4gh/vrs/extras/localizer.py @@ -1,6 +1,5 @@ -"""convert named locations into SequenceLocations ("localize") by -reference to external data - +"""convert named locations into SequenceLocations ("localize") by reference to external +data """ from bioutils.accessions import coerce_namespace from bioutils.assemblies import make_name_ac_map @@ -43,11 +42,8 @@ def __init__(self): def localize_allele(self, allele, assembly_name = "GRCh38"): - """copy input variant and replace location - N.B. deepcopy leads to recursion errors - """ - # - # + """copy input variant and replace location N.B. deepcopy leads to recursion + errors""" allele_sl = ga4gh.vrs.models.Variation(**allele.as_dict()) del allele_sl._id allele_sl.location = self.localize_named_feature(allele.location, assembly_name) @@ -55,11 +51,8 @@ def localize_allele(self, allele, assembly_name = "GRCh38"): def localize_named_feature(self, loc, assembly_name): - """converts named features to sequence locations - - """ - - assert loc.type._value == "ChromosomeLocation", "Expected a ChromosomeLocation object" # pylint: disable=protected-access + """converts named features to sequence locations""" + assert loc.type._value == "ChromosomeLocation", "Expected a ChromosomeLocation object" def _get_coords(m, cb): """return (start,end) of band `cb` in map `m`""" diff --git a/src/ga4gh/vrs/extras/translator.py b/src/ga4gh/vrs/extras/translator.py index 885d81bd..eba135cb 100644 --- a/src/ga4gh/vrs/extras/translator.py +++ b/src/ga4gh/vrs/extras/translator.py @@ -28,8 +28,6 @@ class ValidationError(Exception): """Class for validation errors during translation""" - pass # pylint: disable=unnecessary-pass - class Translator: """Translates various variation formats to and from GA4GH VRS models @@ -514,14 +512,14 @@ def _post_process_imported_allele(self, allele): """ if self.translate_sequence_identifiers: - seq_id = self.data_proxy.translate_sequence_identifier(allele.location.sequence_id._value, "ga4gh")[0] # pylint: disable=protected-access + seq_id = self.data_proxy.translate_sequence_identifier(allele.location.sequence_id._value, "ga4gh")[0] allele.location.sequence_id = seq_id if self.normalize: allele = normalize(allele, self.data_proxy) if self.identify: - allele._id = ga4gh_identify(allele) # pylint: disable=protected-access + allele._id = ga4gh_identify(allele) return allele diff --git a/src/ga4gh/vrs/extras/vcf_annotation.py b/src/ga4gh/vrs/extras/vcf_annotation.py index cfe50cfa..3cb78b53 100644 --- a/src/ga4gh/vrs/extras/vcf_annotation.py +++ b/src/ga4gh/vrs/extras/vcf_annotation.py @@ -27,8 +27,6 @@ class VCFAnnotatorException(Exception): """Custom exceptions for VCF Annotator tool""" - pass # pylint: disable=unnecessary-pass - class SeqRepoProxyType(str, Enum): """Define constraints for SeqRepo Data Proxy types""" @@ -195,7 +193,7 @@ def _get_vrs_object( # pylint: disable=too-many-arguments `False` otherwise. """ try: - vrs_obj = self.tlr._from_gnomad(vcf_coords, assembly_name=assembly) # pylint: disable=protected-access + vrs_obj = self.tlr._from_gnomad(vcf_coords, assembly_name=assembly) except (ValidationError, TranslatorValidationError) as e: _logger.error("ValidationError when translating %s from gnomad: %s", vcf_coords, str(e)) except KeyError as e: @@ -211,7 +209,7 @@ def _get_vrs_object( # pylint: disable=too-many-arguments vrs_data[key] = str(vrs_obj.as_dict()) if output_vcf: - vrs_allele_ids.append(vrs_obj._id._value) # pylint: disable=protected-access + vrs_allele_ids.append(vrs_obj._id._value) else: _logger.debug("None was returned when translating %s from gnomad", vcf_coords) diff --git a/src/ga4gh/vrs/normalize.py b/src/ga4gh/vrs/normalize.py index 78f55865..99e83a65 100644 --- a/src/ga4gh/vrs/normalize.py +++ b/src/ga4gh/vrs/normalize.py @@ -16,21 +16,21 @@ def _normalize_allele(allele, data_proxy): - sequence = SequenceProxy(data_proxy, allele.location.sequence_id._value) # pylint: disable=protected-access + sequence = SequenceProxy(data_proxy, allele.location.sequence_id._value) _interval_type = allele.location.interval.type if _interval_type == "SimpleInterval": - ival = (allele.location.interval.start._value, allele.location.interval.end._value) # pylint: disable=protected-access + ival = (allele.location.interval.start._value, allele.location.interval.end._value) elif _interval_type == "SequenceInterval": ival = (allele.location.interval.start.value, allele.location.interval.end.value) _allele_state = allele.state.type _states_with_sequence = ["SequenceState", "LiteralSequenceExpression"] if _allele_state in _states_with_sequence: - alleles = (None, allele.state.sequence._value) # pylint: disable=protected-access + alleles = (None, allele.state.sequence._value) elif _allele_state == "RepeatedSequenceExpression" and \ allele.state.seq_expr.type in _states_with_sequence: - alleles = (None, allele.state.seq_expr.sequence._value) # pylint: disable=protected-access + alleles = (None, allele.state.seq_expr.sequence._value) else: alleles = (None, "") @@ -81,7 +81,7 @@ def normalize(vo, data_proxy=None): """normalize given vrs object, regardless of type""" assert is_pjs_instance(vo) - vo_type = vo.type._value # pylint: disable=protected-access + vo_type = vo.type._value if vo_type in handlers: handler = handlers[vo_type] From 40e37227124dbd78c9eabccd0f23fbe22943ea91 Mon Sep 17 00:00:00 2001 From: korikuzma Date: Mon, 6 Feb 2023 13:39:31 -0500 Subject: [PATCH 06/10] refactor: rename import normalize to do_normalize --- notebooks/Extras.ipynb | 4 ++-- src/ga4gh/vrs/extras/translator.py | 8 ++++---- tests/conftest.py | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/notebooks/Extras.ipynb b/notebooks/Extras.ipynb index a36dd213..633e2791 100644 --- a/notebooks/Extras.ipynb +++ b/notebooks/Extras.ipynb @@ -122,7 +122,7 @@ "from ga4gh.vrs.extras.translator import Translator\n", "tlr = Translator(data_proxy=dp,\n", " translate_sequence_identifiers=True, # default\n", - " do_normalize=True, # default\n", + " normalize=True, # default\n", " identify=True) # default" ] }, @@ -407,7 +407,7 @@ "# Translator with default behaviors disabled\n", "tlr2 = Translator(data_proxy=dp,\n", " translate_sequence_identifiers=False,\n", - " do_normalize=False,\n", + " normalize=False,\n", " identify=False)" ] }, diff --git a/src/ga4gh/vrs/extras/translator.py b/src/ga4gh/vrs/extras/translator.py index eba135cb..020aa1da 100644 --- a/src/ga4gh/vrs/extras/translator.py +++ b/src/ga4gh/vrs/extras/translator.py @@ -18,7 +18,7 @@ import hgvs.dataproviders.uta from ga4gh.core import ga4gh_identify -from ga4gh.vrs import models, normalize +from ga4gh.vrs import models, normalize as do_normalize from ga4gh.vrs.extras.decorators import lazy_property # this should be relocated from ga4gh.vrs.utils.hgvs_tools import HgvsTools @@ -50,13 +50,13 @@ def __init__(self, # pylint: disable=too-many-arguments data_proxy, default_assembly_name="GRCh38", translate_sequence_identifiers=True, - do_normalize=True, + normalize=True, identify=True): self.default_assembly_name = default_assembly_name self.data_proxy = data_proxy self.translate_sequence_identifiers = translate_sequence_identifiers self.identify = identify - self.normalize = do_normalize + self.normalize = normalize self.hgvs_tools = None @@ -516,7 +516,7 @@ def _post_process_imported_allele(self, allele): allele.location.sequence_id = seq_id if self.normalize: - allele = normalize(allele, self.data_proxy) + allele = do_normalize(allele, self.data_proxy) if self.identify: allele._id = ga4gh_identify(allele) diff --git a/tests/conftest.py b/tests/conftest.py index 67c3028c..8dde7606 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -25,7 +25,7 @@ def tlr(rest_dataproxy): default_assembly_name="GRCh38", # TODO: Set these to defaults and adjust relevant tests identify=False, - do_normalize=False, + normalize=False, translate_sequence_identifiers=True, ) From e550e1da13d22e4e5cb48ae827a35daadbb1a55c Mon Sep 17 00:00:00 2001 From: korikuzma Date: Mon, 6 Feb 2023 13:44:02 -0500 Subject: [PATCH 07/10] refactor: revert notebooks --- notebooks/Extras.ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/notebooks/Extras.ipynb b/notebooks/Extras.ipynb index 633e2791..70afb3db 100644 --- a/notebooks/Extras.ipynb +++ b/notebooks/Extras.ipynb @@ -508,9 +508,9 @@ ], "metadata": { "kernelspec": { - "display_name": "vrs-python", + "display_name": "Python 3 (ipykernel)", "language": "python", - "name": "vrs-python" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -522,7 +522,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.8" + "version": "3.9.13" }, "toc": { "base_numbering": 1, From e019addc9578e46669498919fa36fad4d009a68c Mon Sep 17 00:00:00 2001 From: korikuzma Date: Wed, 15 Feb 2023 09:54:49 -0500 Subject: [PATCH 08/10] fix: docstring + update example in localizer --- src/ga4gh/vrs/extras/localizer.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/ga4gh/vrs/extras/localizer.py b/src/ga4gh/vrs/extras/localizer.py index 86f1f2a8..822d1868 100644 --- a/src/ga4gh/vrs/extras/localizer.py +++ b/src/ga4gh/vrs/extras/localizer.py @@ -42,8 +42,9 @@ def __init__(self): def localize_allele(self, allele, assembly_name = "GRCh38"): - """copy input variant and replace location N.B. deepcopy leads to recursion - errors""" + """Converts VRS Allele's named features to sequence location""" + # copy input variant and replace location + # N.B. deepcopy leads to recursion_errors allele_sl = ga4gh.vrs.models.Variation(**allele.as_dict()) del allele_sl._id allele_sl.location = self.localize_named_feature(allele.location, assembly_name) @@ -102,5 +103,25 @@ def _get_coords(m, cb): if __name__ == "__main__": - cbl = ga4gh.vrs.models.ChromosomeLocation(chr="11", start="q22.3", end="q23.1") lr = Localizer() + + allele_dict = { + "location": { + "chr":"19", + "interval": { + "end": "q13.32", + "start": "q13.32", + "type": "CytobandInterval" + }, + "species_id":"taxonomy:9606", + "type":"ChromosomeLocation" + }, + "state": { + "sequence": "T", + "type": "LiteralSequenceExpression" + }, + "type": "Allele" + } + allele_vo = ga4gh.vrs.models.Allele(**allele_dict) + allele_with_seq_loc = lr.localize_allele(allele_vo) + print("Allele with SequenceLocation:", allele_with_seq_loc.as_dict()) From 3b4d229b3e5c07b223cb4d5230fabab04d810f0f Mon Sep 17 00:00:00 2001 From: korikuzma Date: Wed, 15 Feb 2023 09:57:57 -0500 Subject: [PATCH 09/10] refactor: update typo in localizer error msg --- src/ga4gh/vrs/extras/localizer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ga4gh/vrs/extras/localizer.py b/src/ga4gh/vrs/extras/localizer.py index 822d1868..225b61d9 100644 --- a/src/ga4gh/vrs/extras/localizer.py +++ b/src/ga4gh/vrs/extras/localizer.py @@ -92,7 +92,7 @@ def _get_coords(m, cb): try: ac = self._ana_maps[assembly_name][loc.chr] except KeyError as e: - raise ValueError(f"No accssion for {loc.chr} in assembly {assembly_name}") from e + raise ValueError(f"No accession for {loc.chr} in assembly {assembly_name}") from e return ga4gh.vrs.models.SequenceLocation( sequence_id=coerce_namespace(ac), From 7221aaafb37bd89719299c0b85167f6670a61590 Mon Sep 17 00:00:00 2001 From: korikuzma Date: Mon, 20 Feb 2023 08:44:00 -0500 Subject: [PATCH 10/10] remove unnecessary underscore --- src/ga4gh/vrs/extras/localizer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ga4gh/vrs/extras/localizer.py b/src/ga4gh/vrs/extras/localizer.py index 225b61d9..e594aa6b 100644 --- a/src/ga4gh/vrs/extras/localizer.py +++ b/src/ga4gh/vrs/extras/localizer.py @@ -44,7 +44,7 @@ def __init__(self): def localize_allele(self, allele, assembly_name = "GRCh38"): """Converts VRS Allele's named features to sequence location""" # copy input variant and replace location - # N.B. deepcopy leads to recursion_errors + # N.B. deepcopy leads to recursion errors allele_sl = ga4gh.vrs.models.Variation(**allele.as_dict()) del allele_sl._id allele_sl.location = self.localize_named_feature(allele.location, assembly_name)