Repository: ga4gh/vrs-python

Issue:
Add more tests for _from_gnomad

Discussion:

Patch:
diff --git a/src/ga4gh/core/_internal/enderef.py b/src/ga4gh/core/_internal/enderef.py
index aaa7717..16198a3 100644
--- a/src/ga4gh/core/_internal/enderef.py
+++ b/src/ga4gh/core/_internal/enderef.py
@@ -8,9 +8,18 @@ typically be generated from the schema by
 build_class_referable_attribute_map() in .models.py.
 
 """
+import logging
 
 from .identifiers import ga4gh_identify, is_ga4gh_identifier
-from .pydantic import is_pydantic_instance, is_list, is_curie_type, is_identifiable, pydantic_copy
+from .pydantic import (
+    is_pydantic_instance,
+    is_list,
+    is_curie_type,
+    is_identifiable,
+    get_pydantic_root,
+    pydantic_copy)
+
+_logger = logging.getLogger(__name__)
 
 
 def ga4gh_enref(o, cra_map, object_store=None):
@@ -35,9 +44,9 @@ def ga4gh_enref(o, cra_map, object_store=None):
         """depth-first recursive, in-place enref of object; returns id of object"""
         ref_att_names = cra_map.get(o.type, [])
         for ran in ref_att_names:
-            v = o[ran]
+            v = getattr(o, ran)
             if is_list(v):
-                o[ran] = [_enref(o2) for o2 in v]
+                setattr(o, ran, [_enref(o2) for o2 in v])
             elif isinstance(v, str):
                 pass
             elif is_curie_type(v):    # already a reference
@@ -45,12 +54,12 @@ def ga4gh_enref(o, cra_map, object_store=None):
             elif v is not None:
                 _id = _id_and_store(v)
                 if _id:
-                    o[ran] = _id
+                    setattr(o, ran, _id)
 
         return _id_and_store(o)
 
     if not is_pydantic_instance(o):
-        raise ValueError("Called ga4gh_enref() with non-python_jsonschema_object instance")
+        raise ValueError("Called ga4gh_enref() with non-pydantic instance")
     if not is_identifiable(o):
         raise ValueError("Called ga4gh_enref() with non-identifiable object")
 
@@ -73,22 +82,25 @@ def ga4gh_deref(o, cra_map, object_store):
     def _deref(o):
         """depth-first recursive, in-place deref of object; returns id of object"""
         if o.type not in cra_map:
+            _logger.warning(f"{o.type} not in cra_map {cra_map}")
             return o
 
         ref_att_names = cra_map[o.type]
         for ran in ref_att_names:
-            v = o[ran]
+            v = getattr(o, ran)
             if is_list(v):
-                o[ran] = [_deref(object_store[str(curie)]) for curie in v]
+                setattr(o, ran, [_deref(object_store[str(curie)]) for curie in v])
             elif is_ga4gh_identifier(v):
-                o[ran] = _deref(object_store[str(v)])
+                v = get_pydantic_root(v)
+                dereffed_identifier = object_store[str(v)]
+                setattr(o, ran, _deref(dereffed_identifier))
             else:
                 pass    # some object; pass as-is
 
         return o
 
     if not is_pydantic_instance(o):
-        raise ValueError("Called ga4gh_deref() with non-python_jsonschema_object instance")
+        raise ValueError("Called ga4gh_deref() with non-non-pydantic instance")
     if not is_identifiable(o):
         raise ValueError("Called ga4gh_deref() with non-identifiable object")
 
diff --git a/src/ga4gh/core/_internal/identifiers.py b/src/ga4gh/core/_internal/identifiers.py
index dc49360..f08c771 100644
--- a/src/ga4gh/core/_internal/identifiers.py
+++ b/src/ga4gh/core/_internal/identifiers.py
@@ -57,7 +57,7 @@ def is_ga4gh_identifier(ir):
     False
 
     """
-    return str(ir).startswith(ns_w_sep)
+    return str(get_pydantic_root(ir)).startswith(ns_w_sep)
 
 
 def parse_ga4gh_identifier(ir):
diff --git a/src/ga4gh/core/_internal/pydantic.py b/src/ga4gh/core/_internal/pydantic.py
index a073da1..473e6c7 100644
--- a/src/ga4gh/core/_internal/pydantic.py
+++ b/src/ga4gh/core/_internal/pydantic.py
@@ -48,7 +48,9 @@ def is_curie_type(o: Any) -> bool:
     """
     if isinstance(o, RootModel):
         o = o.root
-    return re.match(r'[a-zA-Z0-9.]+:\S+', o)
+    if isinstance(o, str):
+        return re.match(r'[a-zA-Z0-9.]+:\S+', o)
+    return False
 
 
 def is_pydantic_instance(o: Any) -> bool:
@@ -67,6 +69,7 @@ def get_pydantic_root(obj: Union[Any, RootModel]) -> Any:
 def is_pydantic_custom_type(obj: RootModel) -> bool:
     return isinstance(obj, RootModel)
 
+
 def is_pydantic_custom_str_type(obj: RootModel) -> bool:
     return isinstance(obj, RootModel) and isinstance(obj.root, str)
 
diff --git a/src/ga4gh/vrs/_internal/enderef.py b/src/ga4gh/vrs/_internal/enderef.py
index 07cbd54..522d83d 100644
--- a/src/ga4gh/vrs/_internal/enderef.py
+++ b/src/ga4gh/vrs/_internal/enderef.py
@@ -1,11 +1,11 @@
 from ga4gh.core import ga4gh_deref, ga4gh_enref
 
+from .models import class_refatt_map
+
 
 def vrs_enref(o, object_store=None):
-    raise RuntimeError("Not Implemented!")
     return ga4gh_enref(o, cra_map=class_refatt_map, object_store=object_store)
 
 
 def vrs_deref(o, object_store):
-    raise RuntimeError("Not Implemented!")
     return ga4gh_deref(o, cra_map=class_refatt_map, object_store=object_store)
diff --git a/src/ga4gh/vrs/_internal/models.py b/src/ga4gh/vrs/_internal/models.py
index 87b7a76..c009d01 100644
--- a/src/ga4gh/vrs/_internal/models.py
+++ b/src/ga4gh/vrs/_internal/models.py
@@ -61,7 +61,7 @@ def flatten_type(t):
         if t.__origin__ == typing.Literal:
             return list(t.__args__)
         elif (t.__origin__ == typing.Union
-              or issubclass(t.__origin__,  typing.List)):
+              or issubclass(t.__origin__, typing.List)):
             return list(flatten([flatten_type(sub_t) for sub_t in t.__args__]))
     return [t]
 
@@ -73,7 +73,6 @@ def overlaps(a: list, b: list):
     return len(set(a).intersection(set(b))) > 0
 
 
-# <<<<<<< HEAD
 def pydantic_class_refatt_map():
     """
     Builds a map of class names to their field names that are referable types.
@@ -92,36 +91,28 @@ def pydantic_class_refatt_map():
         [gl_name_value[1] for gl_name_value in global_map.items()]
     ))
     # Types directly reffable
-    # reffable_classes = list(filter(
-    #     lambda c: ('id' in c.__fields__
-    #                and hasattr(c, 'ga4gh_digest')),
-    #     model_classes
-    # ))
     reffable_classes = list(filter(
-        lambda c: ('id' in c.__fields__
+        lambda c: ('id' in c.model_fields
                    and is_identifiable(c)),
         model_classes
     ))
     # Types reffable because they are a union of reffable types
-    union_reffable_classes = list(filter(
-        lambda c: ('__root__' in c.__fields__
-                   and overlaps(reffable_classes,
-                                flatten_type(c.__fields__['__root__'].type_))),
-        model_classes
-    ))
+    union_reffable_classes = []
+    for model_class in model_classes:
+        if issubclass(model_class, RootModel):
+            flattened_type_annotation = flatten_type(model_class.model_fields["root"].annotation)
+            if overlaps(reffable_classes, flattened_type_annotation):
+                union_reffable_classes.append(model_class)
     reffable_fields = {}
     # Find any field whose type is a subclass of a reffable type,
     # or which is a typing.List that includes a reffable type.
-    # Interestingly, ModelField.type_ is the member type for List types, not type List itself.
     for model_class in model_classes:
-        # if model_class in union_reffable_classes:
-        #     continue  # These don't have fields other than __root__
-        fields = model_class.__fields__
+        fields = model_class.model_fields
         class_reffable_fields = []
         for fieldname, field in fields.items():
-            if fieldname == '__root__':
+            if fieldname == 'root':
                 continue
-            field_type = field.type_  # a typing or normal annotation like str
+            field_type = field.annotation  # a typing or normal annotation like str
             # types can be raw class type annotation (int, str, dict, etc)
             # typing.Literal, typing.Union, typing.Optional
             # Use flatten_type to simplify these
@@ -141,9 +132,6 @@ def pydantic_class_refatt_map():
             reffable_fields,
             class_keys)
 
-# =======
-# >>>>>>> pydantic-2.0-model
-
 
 class CopyChange(Enum):
     efo_0030069 = 'efo:0030069'
@@ -611,10 +599,10 @@ class SystemicVariation(RootModel):
     )
 
 
-# # At end so classes exist
-# (
-#     reffable_classes,
-#     union_reffable_classes,
-#     class_refatt_map,
-#     class_keys
-# ) = pydantic_class_refatt_map()
+# At end so classes exist
+(
+    reffable_classes,
+    union_reffable_classes,
+    class_refatt_map,
+    class_keys
+) = pydantic_class_refatt_map()
diff --git a/src/ga4gh/vrs/extras/translator.py b/src/ga4gh/vrs/extras/translator.py
index 257aad6..c9e31c5 100644
--- a/src/ga4gh/vrs/extras/translator.py
+++ b/src/ga4gh/vrs/extras/translator.py
@@ -369,6 +369,9 @@ class Translator:
 
         If the VRS object cannot be expressed as HGVS, raises ValueError.
 
+        This method assumes that IRIs are dereferenced, providing a `SequenceReference`
+        as the `vo.location.sequenceReference`. If a `SequenceReference` is not
+        provided, raises TypeError
         """
 
         def ir_stype(a):
@@ -384,6 +387,11 @@ class Translator:
                 return "g"
             return None
 
+        if not isinstance(vo.location.sequenceReference, models.SequenceReference):
+            raise TypeError(
+                "`vo.location.sequenceReference` expects a `SequenceReference`"
+            )
+
         sequence = f"ga4gh:{export_sequencelocation_sequence_id(vo.location.sequenceReference)}"
         aliases = self.data_proxy.translate_sequence_identifier(sequence, namespace)
 
@@ -410,8 +418,8 @@ class Translator:
                 ref = self.data_proxy.get_sequence(sequence, start, end)
                 start += 1
             ival = hgvs.location.Interval(
-                start=str(vo.location.start),
-                end=str(vo.location.end)
+                start=hgvs.location.SimplePosition(start),
+                end=hgvs.location.SimplePosition(end)
             )
             alt = str(vo.state.sequence.root) or None  # "" => None
             edit = hgvs.edit.NARefAlt(ref=ref, alt=alt)


Test patch:
diff --git a/tests/extras/cassettes/test_from_gnomad.yaml b/tests/extras/cassettes/test_from_gnomad.yaml
new file mode 100644
index 0000000..06d9139
--- /dev/null
+++ b/tests/extras/cassettes/test_from_gnomad.yaml
@@ -0,0 +1,1022 @@
+interactions:
+- request:
+    body: null
+    headers:
+      Accept:
+      - '*/*'
+      Accept-Encoding:
+      - gzip, deflate
+      Connection:
+      - keep-alive
+      User-Agent:
+      - python-requests/2.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/metadata/GRCh38:13
+  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:
+      - Wed, 06 Sep 2023 21: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.31.0
+    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:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=32936731&end=32936732
+  response:
+    body:
+      string: C
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '1'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    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:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=20003095&end=20003097
+  response:
+    body:
+      string: AC
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '2'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=20003096&end=20003097
+  response:
+    body:
+      string: C
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '1'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=20003096&end=20003097
+  response:
+    body:
+      string: C
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '1'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=20003095&end=20003096
+  response:
+    body:
+      string: A
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '1'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=20003097&end=20003098
+  response:
+    body:
+      string: A
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '1'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=20003096&end=20003096
+  response:
+    body:
+      string: ''
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '0'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=20003097&end=20003097
+  response:
+    body:
+      string: ''
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '0'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=20003096&end=20003097
+  response:
+    body:
+      string: C
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '1'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    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:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=20003009&end=20003010
+  response:
+    body:
+      string: A
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '1'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=20003010&end=20003010
+  response:
+    body:
+      string: ''
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '0'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=20003010&end=20003010
+  response:
+    body:
+      string: ''
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '0'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=20003009&end=20003010
+  response:
+    body:
+      string: A
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '1'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=20003010&end=20003011
+  response:
+    body:
+      string: C
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '1'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=20003010&end=20003010
+  response:
+    body:
+      string: ''
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '0'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=20003010&end=20003010
+  response:
+    body:
+      string: ''
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '0'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=20003010&end=20003010
+  response:
+    body:
+      string: ''
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '0'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    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:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=19993837&end=19993839
+  response:
+    body:
+      string: GT
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '2'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=19993839&end=19993839
+  response:
+    body:
+      string: ''
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '0'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=19993839&end=19993839
+  response:
+    body:
+      string: ''
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '0'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=19993838&end=19993839
+  response:
+    body:
+      string: T
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '1'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=19993837&end=19993838
+  response:
+    body:
+      string: G
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '1'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=19993836&end=19993837
+  response:
+    body:
+      string: A
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '1'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=19993839&end=19993840
+  response:
+    body:
+      string: A
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '1'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=19993837&end=19993839
+  response:
+    body:
+      string: GT
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '2'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=19993839&end=19993839
+  response:
+    body:
+      string: ''
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '0'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21: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.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/sequence/ga4gh:SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT?start=19993837&end=19993839
+  response:
+    body:
+      string: GT
+    headers:
+      Connection:
+      - close
+      Content-Length:
+      - '2'
+      Content-Type:
+      - text/plain; charset=utf-8
+      Date:
+      - Wed, 06 Sep 2023 21:42:43 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_000007.14:g.55181220del-expected2].yaml b/tests/extras/cassettes/test_hgvs[NC_000007.14:g.55181220del-expected2].yaml
index b193072..5adaead 100644
--- a/tests/extras/cassettes/test_hgvs[NC_000007.14:g.55181220del-expected2].yaml
+++ b/tests/extras/cassettes/test_hgvs[NC_000007.14:g.55181220del-expected2].yaml
@@ -34,7 +34,7 @@ interactions:
       Content-Type:
       - application/json
       Date:
-      - Thu, 31 Aug 2023 20:16:09 GMT
+      - Wed, 06 Sep 2023 22:18:56 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -64,7 +64,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:09 GMT
+      - Wed, 06 Sep 2023 22:18:56 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -94,7 +94,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:09 GMT
+      - Wed, 06 Sep 2023 22:18:56 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -124,7 +124,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:09 GMT
+      - Wed, 06 Sep 2023 22:18:56 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -154,7 +154,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:09 GMT
+      - Wed, 06 Sep 2023 22:18:57 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -184,7 +184,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:09 GMT
+      - Wed, 06 Sep 2023 22:18:57 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -214,7 +214,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:09 GMT
+      - Wed, 06 Sep 2023 22:18:57 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -244,7 +244,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:09 GMT
+      - Wed, 06 Sep 2023 22:18:57 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -274,7 +274,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:09 GMT
+      - Wed, 06 Sep 2023 22:18:57 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -304,77 +304,12 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:09 GMT
+      - Wed, 06 Sep 2023 22:18:57 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.31.0
-    method: GET
-    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000007.14&rettype=fasta&seq_start=55181219&seq_stop=55181220&tool=bioutils&email=biocommons-dev@googlegroups.com
-  response:
-    body:
-      string: !!binary |
-        H4sIAAAAAAAAALLzc443AAFzPUMTK1NTQwtDI0NLXQjDyEDBIz83X6E4sSAzNa9YITmjCMgtzs9N
-        VTDXUXAPcs4wttArMDRRCCjKzE0sqlRwLC5OzU3KqeRyDuHiAgAAAP//AwCZNMWOWwAAAA==
-    headers:
-      Access-Control-Allow-Origin:
-      - '*'
-      Access-Control-Expose-Headers:
-      - X-RateLimit-Limit,X-RateLimit-Remaining
-      Cache-Control:
-      - private
-      Connection:
-      - Keep-Alive
-      Content-Disposition:
-      - attachment; filename="sequence.fasta"
-      Content-Security-Policy:
-      - upgrade-insecure-requests
-      Content-Type:
-      - text/plain
-      Date:
-      - Thu, 31 Aug 2023 20:16:10 GMT
-      Keep-Alive:
-      - timeout=4, max=40
-      NCBI-PHID:
-      - 939B29D888F10AD50000584543F2AEE1.1.1.m_5
-      NCBI-SID:
-      - 42027C9606F080EF_95B3SID
-      Referrer-Policy:
-      - origin-when-cross-origin
-      Server:
-      - Finatra
-      Set-Cookie:
-      - ncbi_sid=42027C9606F080EF_95B3SID; domain=.nih.gov; path=/; expires=Sat, 31
-        Aug 2024 20:16:10 GMT
-      Strict-Transport-Security:
-      - max-age=31536000; includeSubDomains; preload
-      Transfer-Encoding:
-      - chunked
-      X-RateLimit-Limit:
-      - '3'
-      X-RateLimit-Remaining:
-      - '2'
-      X-UA-Compatible:
-      - IE=Edge
-      X-XSS-Protection:
-      - 1; mode=block
-      content-encoding:
-      - gzip
-    status:
-      code: 200
-      message: OK
 - request:
     body: null
     headers:
@@ -409,20 +344,20 @@ interactions:
       Content-Type:
       - text/plain
       Date:
-      - Thu, 31 Aug 2023 20:16:10 GMT
+      - Wed, 06 Sep 2023 22:18:58 GMT
       Keep-Alive:
       - timeout=4, max=40
       NCBI-PHID:
-      - D0BD6E1D0758AC7500006235E4C66F22.1.1.m_5
+      - 939B68E6D1C40EA5000046EA7659B4B8.1.1.m_5
       NCBI-SID:
-      - 4B6F2F1F206A5A3C_ABD6SID
+      - 249E59ACB5261996_94D3SID
       Referrer-Policy:
       - origin-when-cross-origin
       Server:
       - Finatra
       Set-Cookie:
-      - ncbi_sid=4B6F2F1F206A5A3C_ABD6SID; domain=.nih.gov; path=/; expires=Sat, 31
-        Aug 2024 20:16:11 GMT
+      - ncbi_sid=249E59ACB5261996_94D3SID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:18:58 GMT
       Strict-Transport-Security:
       - max-age=31536000; includeSubDomains; preload
       Transfer-Encoding:
@@ -430,7 +365,7 @@ interactions:
       X-RateLimit-Limit:
       - '3'
       X-RateLimit-Remaining:
-      - '1'
+      - '2'
       X-UA-Compatible:
       - IE=Edge
       X-XSS-Protection:
@@ -452,13 +387,13 @@ interactions:
       User-Agent:
       - python-requests/2.31.0
     method: GET
-    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000007.14&rettype=fasta&seq_start=55181219&seq_stop=55181240&tool=bioutils&email=biocommons-dev@googlegroups.com
+    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000007.14&rettype=fasta&seq_start=55181220&seq_stop=55181240&tool=bioutils&email=biocommons-dev@googlegroups.com
   response:
     body:
       string: !!binary |
-        H4sIAAAAAAAAALLzc443AAFzPUMTK1NTQwtDI0NLXQjDxEDBIz83X6E4sSAzNa9YITmjCMgtzs9N
-        VTDXUXAPcs4wttArMDRRCCjKzE0sqlRwLC5OzU3KqeRyDnF3d3R0B4IQZ2fHEPcQd2cg4OICAAAA
-        //8DAAHwlzhvAAAA
+        H4sIAAAAAAAAALLzc443AAFzPUMTK1NTQwtDIyMDXQjDxEDBIz83X6E4sSAzNa9YITmjCMgtzs9N
+        VTDXUXAPcs4wttArMDRRCCjKzE0sqlRwLC5OzU3KqeQKcXd3dHQHghBnZ8cQ9xB3ZyDg4gIAAAD/
+        /wMAmg0v4W4AAAA=
     headers:
       Access-Control-Allow-Origin:
       - '*'
@@ -475,20 +410,20 @@ interactions:
       Content-Type:
       - text/plain
       Date:
-      - Thu, 31 Aug 2023 20:16:11 GMT
+      - Wed, 06 Sep 2023 22:19:00 GMT
       Keep-Alive:
       - timeout=4, max=40
       NCBI-PHID:
-      - D0BD6E1D0758AC7500002E35E893603F.1.1.m_5
+      - D0BD3C0596812615000032D26D6E61C8.1.1.m_5
       NCBI-SID:
-      - 098B20CEB89305A9_4D71SID
+      - B0981E7B2B117273_0093SID
       Referrer-Policy:
       - origin-when-cross-origin
       Server:
       - Finatra
       Set-Cookie:
-      - ncbi_sid=098B20CEB89305A9_4D71SID; domain=.nih.gov; path=/; expires=Sat, 31
-        Aug 2024 20:16:12 GMT
+      - ncbi_sid=B0981E7B2B117273_0093SID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:19:00 GMT
       Strict-Transport-Security:
       - max-age=31536000; includeSubDomains; preload
       Transfer-Encoding:
@@ -496,7 +431,7 @@ interactions:
       X-RateLimit-Limit:
       - '3'
       X-RateLimit-Remaining:
-      - '1'
+      - '2'
       X-UA-Compatible:
       - IE=Edge
       X-XSS-Protection:
diff --git a/tests/extras/cassettes/test_hgvs[NC_000007.14:g.55181230_55181231insGGCT-expected3].yaml b/tests/extras/cassettes/test_hgvs[NC_000007.14:g.55181230_55181231insGGCT-expected3].yaml
index 4fe65b1..3249dad 100644
--- a/tests/extras/cassettes/test_hgvs[NC_000007.14:g.55181230_55181231insGGCT-expected3].yaml
+++ b/tests/extras/cassettes/test_hgvs[NC_000007.14:g.55181230_55181231insGGCT-expected3].yaml
@@ -34,7 +34,7 @@ interactions:
       Content-Type:
       - application/json
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:00 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -64,7 +64,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:00 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -94,7 +94,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:00 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -124,7 +124,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:00 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -154,7 +154,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:00 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -184,7 +184,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:00 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -214,7 +214,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:00 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -244,7 +244,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:00 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -274,10 +274,206 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:00 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.31.0
+    method: GET
+    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000007.14&rettype=fasta&seq_start=55181231&seq_stop=55181231&tool=bioutils&email=biocommons-dev@googlegroups.com
+  response:
+    body:
+      string: !!binary |
+        H4sIAAAAAAAAALLzc443AAFzPUMTK1NTQwtDI2NDXRhDwSM/N1+hOLEgMzWvWCE5owjILc7PTVUw
+        11FwD3LOMLbQKzA0UQgoysxNLKpUcCwuTs1NyqnkcubiAgAAAP//AwCoL8VLWgAAAA==
+    headers:
+      Access-Control-Allow-Origin:
+      - '*'
+      Access-Control-Expose-Headers:
+      - X-RateLimit-Limit,X-RateLimit-Remaining
+      Cache-Control:
+      - private
+      Connection:
+      - Keep-Alive
+      Content-Disposition:
+      - attachment; filename="sequence.fasta"
+      Content-Security-Policy:
+      - upgrade-insecure-requests
+      Content-Type:
+      - text/plain
+      Date:
+      - Wed, 06 Sep 2023 22:19:00 GMT
+      Keep-Alive:
+      - timeout=4, max=40
+      NCBI-PHID:
+      - 939B68E6D1C40EA5000017EA8294899F.1.1.m_5
+      NCBI-SID:
+      - A231D643D0563453_9145SID
+      Referrer-Policy:
+      - origin-when-cross-origin
+      Server:
+      - Finatra
+      Set-Cookie:
+      - ncbi_sid=A231D643D0563453_9145SID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:19:01 GMT
+      Strict-Transport-Security:
+      - max-age=31536000; includeSubDomains; preload
+      Transfer-Encoding:
+      - chunked
+      X-RateLimit-Limit:
+      - '3'
+      X-RateLimit-Remaining:
+      - '1'
+      X-UA-Compatible:
+      - IE=Edge
+      X-XSS-Protection:
+      - 1; mode=block
+      content-encoding:
+      - gzip
+    status:
+      code: 200
+      message: OK
+- request:
+    body: null
+    headers:
+      Accept:
+      - '*/*'
+      Accept-Encoding:
+      - gzip, deflate
+      Connection:
+      - keep-alive
+      User-Agent:
+      - python-requests/2.31.0
+    method: GET
+    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000007.14&rettype=fasta&seq_start=55181230&seq_stop=55181250&tool=bioutils&email=biocommons-dev@googlegroups.com
+  response:
+    body:
+      string: !!binary |
+        H4sIAAAAAAAAALLzc443AAFzPUMTK1NTQwtDI2MDXQjD1EDBIz83X6E4sSAzNa9YITmjCMgtzs9N
+        VTDXUXAPcs4wttArMDRRCCjKzE0sqlRwLC5OzU3KqeRydnYMcQ9xdwaCECAKcQ5xd3fm4gIAAAD/
+        /wMAmUGUnW4AAAA=
+    headers:
+      Access-Control-Allow-Origin:
+      - '*'
+      Access-Control-Expose-Headers:
+      - X-RateLimit-Limit,X-RateLimit-Remaining
+      Cache-Control:
+      - private
+      Connection:
+      - Keep-Alive
+      Content-Disposition:
+      - attachment; filename="sequence.fasta"
+      Content-Security-Policy:
+      - upgrade-insecure-requests
+      Content-Type:
+      - text/plain
+      Date:
+      - Wed, 06 Sep 2023 22:19:02 GMT
+      Keep-Alive:
+      - timeout=4, max=40
+      NCBI-PHID:
+      - D0BD3C0596812615000056D27113A4B5.1.1.m_5
+      NCBI-SID:
+      - 6C137F95C470BC8C_7A25SID
+      Referrer-Policy:
+      - origin-when-cross-origin
+      Server:
+      - Finatra
+      Set-Cookie:
+      - ncbi_sid=6C137F95C470BC8C_7A25SID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:19:01 GMT
+      Strict-Transport-Security:
+      - max-age=31536000; includeSubDomains; preload
+      Transfer-Encoding:
+      - chunked
+      X-RateLimit-Limit:
+      - '3'
+      X-RateLimit-Remaining:
+      - '1'
+      X-UA-Compatible:
+      - IE=Edge
+      X-XSS-Protection:
+      - 1; mode=block
+      content-encoding:
+      - gzip
+    status:
+      code: 200
+      message: OK
+- request:
+    body: null
+    headers:
+      Accept:
+      - '*/*'
+      Accept-Encoding:
+      - gzip, deflate
+      Connection:
+      - keep-alive
+      User-Agent:
+      - python-requests/2.31.0
+    method: GET
+    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000007.14&rettype=fasta&seq_start=55181227&seq_stop=55181230&tool=bioutils&email=biocommons-dev@googlegroups.com
+  response:
+    body:
+      string: !!binary |
+        H4sIAAAAAAAAALLzc443AAFzPUMTK1NTQwtDIyNzXQjD2EDBIz83X6E4sSAzNa9YITmjCMgtzs9N
+        VTDXUXAPcs4wttArMDRRCCjKzE0sqlRwLC5OzU3KqeRydw9x5uICAAAA//8DAImcWFxdAAAA
+    headers:
+      Access-Control-Allow-Origin:
+      - '*'
+      Access-Control-Expose-Headers:
+      - X-RateLimit-Limit,X-RateLimit-Remaining
+      Cache-Control:
+      - private
+      Connection:
+      - Keep-Alive
+      Content-Disposition:
+      - attachment; filename="sequence.fasta"
+      Content-Security-Policy:
+      - upgrade-insecure-requests
+      Content-Type:
+      - text/plain
+      Date:
+      - Wed, 06 Sep 2023 22:19:03 GMT
+      Keep-Alive:
+      - timeout=4, max=40
+      NCBI-PHID:
+      - 939B68E6D1C40EA500003AEA88548443.1.1.m_5
+      NCBI-SID:
+      - 3429F0804541FECB_7FB3SID
+      Referrer-Policy:
+      - origin-when-cross-origin
+      Server:
+      - Finatra
+      Set-Cookie:
+      - ncbi_sid=3429F0804541FECB_7FB3SID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:19:02 GMT
+      Strict-Transport-Security:
+      - max-age=31536000; includeSubDomains; preload
+      Transfer-Encoding:
+      - chunked
+      X-RateLimit-Limit:
+      - '3'
+      X-RateLimit-Remaining:
+      - '1'
+      X-UA-Compatible:
+      - IE=Edge
+      X-XSS-Protection:
+      - 1; mode=block
+      content-encoding:
+      - gzip
+    status:
+      code: 200
+      message: OK
 version: 1
diff --git a/tests/extras/cassettes/test_hgvs[NC_000007.14:g.55181320A>T-expected1].yaml b/tests/extras/cassettes/test_hgvs[NC_000007.14:g.55181320A>T-expected1].yaml
index cd43ec3..5df5f23 100644
--- a/tests/extras/cassettes/test_hgvs[NC_000007.14:g.55181320A>T-expected1].yaml
+++ b/tests/extras/cassettes/test_hgvs[NC_000007.14:g.55181320A>T-expected1].yaml
@@ -34,7 +34,7 @@ interactions:
       Content-Type:
       - application/json
       Date:
-      - Thu, 31 Aug 2023 20:16:07 GMT
+      - Wed, 06 Sep 2023 22:18:52 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -75,7 +75,7 @@ interactions:
       Content-Type:
       - application/json
       Date:
-      - Thu, 31 Aug 2023 20:16:07 GMT
+      - Wed, 06 Sep 2023 22:18:52 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -105,7 +105,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:07 GMT
+      - Wed, 06 Sep 2023 22:18:52 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -135,7 +135,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:07 GMT
+      - Wed, 06 Sep 2023 22:18:52 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -176,7 +176,7 @@ interactions:
       Content-Type:
       - application/json
       Date:
-      - Thu, 31 Aug 2023 20:16:07 GMT
+      - Wed, 06 Sep 2023 22:18:52 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -206,7 +206,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:07 GMT
+      - Wed, 06 Sep 2023 22:18:52 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -246,20 +246,20 @@ interactions:
       Content-Type:
       - text/plain
       Date:
-      - Thu, 31 Aug 2023 20:16:08 GMT
+      - Wed, 06 Sep 2023 22:18:54 GMT
       Keep-Alive:
       - timeout=4, max=40
       NCBI-PHID:
-      - 322C572A8DE8D0950000614D6270229A.1.1.m_5
+      - 939B68E6D1C40EA5000062EA63B272DE.1.1.m_5
       NCBI-SID:
-      - B2BCB4C8D14AC1F9_E2EFSID
+      - 91D4933049828CE4_9DD4SID
       Referrer-Policy:
       - origin-when-cross-origin
       Server:
       - Finatra
       Set-Cookie:
-      - ncbi_sid=B2BCB4C8D14AC1F9_E2EFSID; domain=.nih.gov; path=/; expires=Sat, 31
-        Aug 2024 20:16:08 GMT
+      - ncbi_sid=91D4933049828CE4_9DD4SID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:18:53 GMT
       Strict-Transport-Security:
       - max-age=31536000; includeSubDomains; preload
       Transfer-Encoding:
@@ -267,7 +267,7 @@ interactions:
       X-RateLimit-Limit:
       - '3'
       X-RateLimit-Remaining:
-      - '1'
+      - '2'
       X-UA-Compatible:
       - IE=Edge
       X-XSS-Protection:
@@ -289,13 +289,13 @@ interactions:
       User-Agent:
       - python-requests/2.31.0
     method: GET
-    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000007.14&rettype=fasta&seq_start=55181319&seq_stop=55181340&tool=bioutils&email=biocommons-dev@googlegroups.com
+    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000007.14&rettype=fasta&seq_start=55181320&seq_stop=55181340&tool=bioutils&email=biocommons-dev@googlegroups.com
   response:
     body:
       string: !!binary |
-        H4sIAAAAAAAAALLzc443AAFzPUMTK1NTQwtDY0NLXQjDxEDBIz83X6E4sSAzNa9YITmjCMgtzs9N
-        VTDXUXAPcs4wttArMDRRCCjKzE0sqlRwLC5OzU3KqeRydnR0BgFHZ/cQIHR2BqIQdy4uAAAAAP//
-        AwAhZlzpbwAAAA==
+        H4sIAAAAAAAAALLzc443AAFzPUMTK1NTQwtDYyMDXQjDxEDBIz83X6E4sSAzNa9YITmjCMgtzs9N
+        VTDXUXAPcs4wttArMDRRCCjKzE0sqlRwLC5OzU3KqeRydHQGAUdn9xAgdHYGohB3Li4AAAAA//8D
+        AKrmuS9uAAAA
     headers:
       Access-Control-Allow-Origin:
       - '*'
@@ -312,20 +312,20 @@ interactions:
       Content-Type:
       - text/plain
       Date:
-      - Thu, 31 Aug 2023 20:16:09 GMT
+      - Wed, 06 Sep 2023 22:18:56 GMT
       Keep-Alive:
       - timeout=4, max=40
       NCBI-PHID:
-      - D0BD6E1D0758AC7500003335DB9DEAC5.1.1.m_5
+      - 939B68E6D1C40EA500004AEA70766C2E.1.1.m_5
       NCBI-SID:
-      - DD89783B72928BAE_E806SID
+      - D3E54FE409A4D2BB_469DSID
       Referrer-Policy:
       - origin-when-cross-origin
       Server:
       - Finatra
       Set-Cookie:
-      - ncbi_sid=DD89783B72928BAE_E806SID; domain=.nih.gov; path=/; expires=Sat, 31
-        Aug 2024 20:16:09 GMT
+      - ncbi_sid=D3E54FE409A4D2BB_469DSID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:18:56 GMT
       Strict-Transport-Security:
       - max-age=31536000; includeSubDomains; preload
       Transfer-Encoding:
diff --git a/tests/extras/cassettes/test_hgvs[NC_000013.11:g.32316467dup-expected5].yaml b/tests/extras/cassettes/test_hgvs[NC_000013.11:g.32316467dup-expected5].yaml
index bb83c4d..6c5b985 100644
--- a/tests/extras/cassettes/test_hgvs[NC_000013.11:g.32316467dup-expected5].yaml
+++ b/tests/extras/cassettes/test_hgvs[NC_000013.11:g.32316467dup-expected5].yaml
@@ -23,7 +23,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:16 GMT
+      - Wed, 06 Sep 2023 22:19:07 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -65,7 +65,7 @@ interactions:
       Content-Type:
       - application/json
       Date:
-      - Thu, 31 Aug 2023 20:16:16 GMT
+      - Wed, 06 Sep 2023 22:19:07 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -95,7 +95,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:16 GMT
+      - Wed, 06 Sep 2023 22:19:07 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -125,7 +125,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:16 GMT
+      - Wed, 06 Sep 2023 22:19:07 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -155,7 +155,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:16 GMT
+      - Wed, 06 Sep 2023 22:19:07 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -185,7 +185,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:16 GMT
+      - Wed, 06 Sep 2023 22:19:07 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -215,7 +215,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:16 GMT
+      - Wed, 06 Sep 2023 22:19:07 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -245,7 +245,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:16 GMT
+      - Wed, 06 Sep 2023 22:19:07 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -275,7 +275,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:16 GMT
+      - Wed, 06 Sep 2023 22:19:07 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -305,7 +305,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:16 GMT
+      - Wed, 06 Sep 2023 22:19:07 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -335,7 +335,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:16 GMT
+      - Wed, 06 Sep 2023 22:19:07 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -365,77 +365,12 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:16 GMT
+      - Wed, 06 Sep 2023 22:19:07 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.31.0
-    method: GET
-    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000013.11&rettype=fasta&seq_start=32316466&seq_stop=32316467&tool=bioutils&email=biocommons-dev@googlegroups.com
-  response:
-    body:
-      string: !!binary |
-        H4sIAAAAAAAAALLzc443AAJDYz1DQytjI2NDMxMzM10ow1zBIz83X6E4sSAzNa9YITmjCMgtzs9N
-        VTA01lFwD3LOMLbQKzA0UQgoysxNLKpUcCwuTs1NyqnkCnHk4gIAAAD//wMAfY62d1wAAAA=
-    headers:
-      Access-Control-Allow-Origin:
-      - '*'
-      Access-Control-Expose-Headers:
-      - X-RateLimit-Limit,X-RateLimit-Remaining
-      Cache-Control:
-      - private
-      Connection:
-      - Keep-Alive
-      Content-Disposition:
-      - attachment; filename="sequence.fasta"
-      Content-Security-Policy:
-      - upgrade-insecure-requests
-      Content-Type:
-      - text/plain
-      Date:
-      - Thu, 31 Aug 2023 20:16:16 GMT
-      Keep-Alive:
-      - timeout=4, max=40
-      NCBI-PHID:
-      - 322C572A8DE8D0950000404D6CB6CC0E.1.1.m_5
-      NCBI-SID:
-      - B6CCAB2B97C54A09_4F38SID
-      Referrer-Policy:
-      - origin-when-cross-origin
-      Server:
-      - Finatra
-      Set-Cookie:
-      - ncbi_sid=B6CCAB2B97C54A09_4F38SID; domain=.nih.gov; path=/; expires=Sat, 31
-        Aug 2024 20:16:16 GMT
-      Strict-Transport-Security:
-      - max-age=31536000; includeSubDomains; preload
-      Transfer-Encoding:
-      - chunked
-      X-RateLimit-Limit:
-      - '3'
-      X-RateLimit-Remaining:
-      - '2'
-      X-UA-Compatible:
-      - IE=Edge
-      X-XSS-Protection:
-      - 1; mode=block
-      content-encoding:
-      - gzip
-    status:
-      code: 200
-      message: OK
 - request:
     body: null
     headers:
@@ -470,20 +405,20 @@ interactions:
       Content-Type:
       - text/plain
       Date:
-      - Thu, 31 Aug 2023 20:16:17 GMT
+      - Wed, 06 Sep 2023 22:19:07 GMT
       Keep-Alive:
       - timeout=4, max=40
       NCBI-PHID:
-      - 322C572A8DE8D09500002E4D6F58A5DA.1.1.m_5
+      - 322C85E7550F506500004126D2F7CD8A.1.1.m_5
       NCBI-SID:
-      - 073CE1DDE48C1357_9001SID
+      - 18BCC2CE4B2A705E_8B96SID
       Referrer-Policy:
       - origin-when-cross-origin
       Server:
       - Finatra
       Set-Cookie:
-      - ncbi_sid=073CE1DDE48C1357_9001SID; domain=.nih.gov; path=/; expires=Sat, 31
-        Aug 2024 20:16:17 GMT
+      - ncbi_sid=18BCC2CE4B2A705E_8B96SID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:19:07 GMT
       Strict-Transport-Security:
       - max-age=31536000; includeSubDomains; preload
       Transfer-Encoding:
@@ -513,13 +448,13 @@ interactions:
       User-Agent:
       - python-requests/2.31.0
     method: GET
-    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000013.11&rettype=fasta&seq_start=32316466&seq_stop=32316487&tool=bioutils&email=biocommons-dev@googlegroups.com
+    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000013.11&rettype=fasta&seq_start=32316467&seq_stop=32316487&tool=bioutils&email=biocommons-dev@googlegroups.com
   response:
     body:
       string: !!binary |
-        H4sIAAAAAAAAALLzc443AAJDYz1DQytjI2NDMxMzM10Iw8JcwSM/N1+hOLEgMzWvWCE5owjILc7P
-        TVUwNNZRcA9yzjC20CswNFEIKMrMTSyqVHAsLk7NTcqp5ApxDAlxd3cMcXZ2dHR0B0F3IJOLCwAA
-        AP//AwDLG37GcAAAAA==
+        H4sIAAAAAAAAALLzc443AAJDYz1DQytjI2NDMxMzc10Iw8JcwSM/N1+hOLEgMzWvWCE5owjILc7P
+        TVUwNNZRcA9yzjC20CswNFEIKMrMTSyqVHAsLk7NTcqp5HIMCXF3dwxxdnZ0dHQHQXcgk4sLAAAA
+        //8DAG14V2hvAAAA
     headers:
       Access-Control-Allow-Origin:
       - '*'
@@ -536,20 +471,20 @@ interactions:
       Content-Type:
       - text/plain
       Date:
-      - Thu, 31 Aug 2023 20:16:17 GMT
+      - Wed, 06 Sep 2023 22:19:08 GMT
       Keep-Alive:
       - timeout=4, max=40
       NCBI-PHID:
-      - 939B29D888F10AD500001645649489B4.1.1.m_5
+      - 322C85E7550F506500003D26D4DA9F79.1.1.m_5
       NCBI-SID:
-      - 8CB66EC0240577D1_E8D6SID
+      - 9ECD78878F6CDDF2_6ED0SID
       Referrer-Policy:
       - origin-when-cross-origin
       Server:
       - Finatra
       Set-Cookie:
-      - ncbi_sid=8CB66EC0240577D1_E8D6SID; domain=.nih.gov; path=/; expires=Sat, 31
-        Aug 2024 20:16:18 GMT
+      - ncbi_sid=9ECD78878F6CDDF2_6ED0SID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:19:08 GMT
       Strict-Transport-Security:
       - max-age=31536000; includeSubDomains; preload
       Transfer-Encoding:
diff --git a/tests/extras/cassettes/test_hgvs[NC_000013.11:g.32331093_32331094dup-expected4].yaml b/tests/extras/cassettes/test_hgvs[NC_000013.11:g.32331093_32331094dup-expected4].yaml
index 5d3b9e1..366a638 100644
--- a/tests/extras/cassettes/test_hgvs[NC_000013.11:g.32331093_32331094dup-expected4].yaml
+++ b/tests/extras/cassettes/test_hgvs[NC_000013.11:g.32331093_32331094dup-expected4].yaml
@@ -23,7 +23,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -65,7 +65,7 @@ interactions:
       Content-Type:
       - application/json
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -95,7 +95,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -125,7 +125,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -155,7 +155,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -185,7 +185,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -215,7 +215,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -245,7 +245,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -275,7 +275,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -305,7 +305,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:12 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -335,7 +335,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:13 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -365,7 +365,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:13 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -395,7 +395,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:13 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -425,7 +425,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:13 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -455,7 +455,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:13 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -485,7 +485,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:13 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -515,7 +515,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:13 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -545,7 +545,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:13 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -575,7 +575,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:13 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -605,7 +605,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:13 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -635,7 +635,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:13 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -665,7 +665,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:13 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -695,7 +695,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:13 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -713,12 +713,12 @@ interactions:
       User-Agent:
       - python-requests/2.31.0
     method: GET
-    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000013.11&rettype=fasta&seq_start=32331082&seq_stop=32331094&tool=bioutils&email=biocommons-dev@googlegroups.com
+    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000013.11&rettype=fasta&seq_start=32331083&seq_stop=32331094&tool=bioutils&email=biocommons-dev@googlegroups.com
   response:
     body:
       string: !!binary |
-        H4sIAAAAAAAAALLzc443AAJDYz1DQytjI2NjQwMLI10Iw9JEwSM/N1+hOLEgMzWvWCE5owjILc7P
-        TVUwNNZRcA9yzjC20CswNFEIKMrMTSyqVHAsLk7NTcqp5HIMQQJcXAAAAAD//wMAyCv7I2cAAAA=
+        H4sIAAAAAAAAALLzc443AAJDYz1DQytjI2NjQwMLY10Iw9JEwSM/N1+hOLEgMzWvWCE5owjILc7P
+        TVUwNNZRcA9yzjC20CswNFEIKMrMTSyqVHAsLk7NTcqp5ApBAlxcAAAAAP//AwBz5s6GZgAAAA==
     headers:
       Access-Control-Allow-Origin:
       - '*'
@@ -735,20 +735,20 @@ interactions:
       Content-Type:
       - text/plain
       Date:
-      - Thu, 31 Aug 2023 20:16:13 GMT
+      - Wed, 06 Sep 2023 22:19:03 GMT
       Keep-Alive:
       - timeout=4, max=40
       NCBI-PHID:
-      - 939B29D888F10AD500002745504A2529.1.1.m_5
+      - D0BD3C059681261500004ED279FE450C.1.1.m_5
       NCBI-SID:
-      - BAF5E81B64B3D3C3_DCBASID
+      - C9F2BE8CE6289D07_4A1BSID
       Referrer-Policy:
       - origin-when-cross-origin
       Server:
       - Finatra
       Set-Cookie:
-      - ncbi_sid=BAF5E81B64B3D3C3_DCBASID; domain=.nih.gov; path=/; expires=Sat, 31
-        Aug 2024 20:16:13 GMT
+      - ncbi_sid=C9F2BE8CE6289D07_4A1BSID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:19:04 GMT
       Strict-Transport-Security:
       - max-age=31536000; includeSubDomains; preload
       Transfer-Encoding:
@@ -800,20 +800,20 @@ interactions:
       Content-Type:
       - text/plain
       Date:
-      - Thu, 31 Aug 2023 20:16:13 GMT
+      - Wed, 06 Sep 2023 22:19:05 GMT
       Keep-Alive:
       - timeout=4, max=40
       NCBI-PHID:
-      - D0BD6E1D0758AC7500006335F3590A69.1.1.m_5
+      - D0BD3C059681261500004BD27CD6CB92.1.1.m_5
       NCBI-SID:
-      - 3A2FED6A5B20E704_BF33SID
+      - D6D6B0E3BDF299B7_5DF2SID
       Referrer-Policy:
       - origin-when-cross-origin
       Server:
       - Finatra
       Set-Cookie:
-      - ncbi_sid=3A2FED6A5B20E704_BF33SID; domain=.nih.gov; path=/; expires=Sat, 31
-        Aug 2024 20:16:14 GMT
+      - ncbi_sid=D6D6B0E3BDF299B7_5DF2SID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:19:05 GMT
       Strict-Transport-Security:
       - max-age=31536000; includeSubDomains; preload
       Transfer-Encoding:
@@ -843,13 +843,13 @@ interactions:
       User-Agent:
       - python-requests/2.31.0
     method: GET
-    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000013.11&rettype=fasta&seq_start=32331082&seq_stop=32331114&tool=bioutils&email=biocommons-dev@googlegroups.com
+    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000013.11&rettype=fasta&seq_start=32331083&seq_stop=32331114&tool=bioutils&email=biocommons-dev@googlegroups.com
   response:
     body:
       string: !!binary |
-        H4sIAAAAAAAAALLzc443AAJDYz1DQytjI2NjQwMLI10ww9DQRMEjPzdfoTixIDM1r1ghOaMIyC3O
-        z01VMDTWUXAPcs4wttArACoLKMrMTSyqVHAsLk7NTcqp5HIMQQLuju7uIe5AMsQZyHEGku4hXFwA
-        AAAA//8DANd3Vn57AAAA
+        H4sIAAAAAAAAALLzc443AAJDYz1DQytjI2NjQwMLY10ww9DQRMEjPzdfoTixIDM1r1ghOaMIyC3O
+        z01VMDTWUXAPcs4wttArACoLKMrMTSyqVHAsLk7NTcqp5ApBAu6O7u4h7kAyxBnIcQaS7iFcXAAA
+        AAD//wMAlOTJvHoAAAA=
     headers:
       Access-Control-Allow-Origin:
       - '*'
@@ -866,20 +866,20 @@ interactions:
       Content-Type:
       - text/plain
       Date:
-      - Thu, 31 Aug 2023 20:16:15 GMT
+      - Wed, 06 Sep 2023 22:19:05 GMT
       Keep-Alive:
       - timeout=4, max=40
       NCBI-PHID:
-      - D0BD6E1D0758AC7500002D35F8EAD6FE.1.1.m_5
+      - D0BD3C059681261500005AD27F891D94.1.1.m_5
       NCBI-SID:
-      - 0C70BF6B8E903E02_A3C2SID
+      - 01D7FC6D91F532BF_5E13SID
       Referrer-Policy:
       - origin-when-cross-origin
       Server:
       - Finatra
       Set-Cookie:
-      - ncbi_sid=0C70BF6B8E903E02_A3C2SID; domain=.nih.gov; path=/; expires=Sat, 31
-        Aug 2024 20:16:15 GMT
+      - ncbi_sid=01D7FC6D91F532BF_5E13SID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:19:06 GMT
       Strict-Transport-Security:
       - max-age=31536000; includeSubDomains; preload
       Transfer-Encoding:
@@ -887,7 +887,72 @@ interactions:
       X-RateLimit-Limit:
       - '3'
       X-RateLimit-Remaining:
-      - '2'
+      - '1'
+      X-UA-Compatible:
+      - IE=Edge
+      X-XSS-Protection:
+      - 1; mode=block
+      content-encoding:
+      - gzip
+    status:
+      code: 200
+      message: OK
+- request:
+    body: null
+    headers:
+      Accept:
+      - '*/*'
+      Accept-Encoding:
+      - gzip, deflate
+      Connection:
+      - keep-alive
+      User-Agent:
+      - python-requests/2.31.0
+    method: GET
+    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000013.11&rettype=fasta&seq_start=32331093&seq_stop=32331094&tool=bioutils&email=biocommons-dev@googlegroups.com
+  response:
+    body:
+      string: !!binary |
+        H4sIAAAAAAAAALLzc443AAJDYz1DQytjI2NjQwNLY10ow0TBIz83X6E4sSAzNa9YITmjCMgtzs9N
+        VTA01lFwD3LOMLbQKzA0UQgoysxNLKpUcCwuTs1NyqnkCgnh4gIAAAD//wMAmBgGAVwAAAA=
+    headers:
+      Access-Control-Allow-Origin:
+      - '*'
+      Access-Control-Expose-Headers:
+      - X-RateLimit-Limit,X-RateLimit-Remaining
+      Cache-Control:
+      - private
+      Connection:
+      - Keep-Alive
+      Content-Disposition:
+      - attachment; filename="sequence.fasta"
+      Content-Security-Policy:
+      - upgrade-insecure-requests
+      Content-Type:
+      - text/plain
+      Date:
+      - Wed, 06 Sep 2023 22:19:06 GMT
+      Keep-Alive:
+      - timeout=4, max=40
+      NCBI-PHID:
+      - D0BD3C0596812615000054D2815F72DD.1.1.m_5
+      NCBI-SID:
+      - A4B78B6D142E4A0E_468FSID
+      Referrer-Policy:
+      - origin-when-cross-origin
+      Server:
+      - Finatra
+      Set-Cookie:
+      - ncbi_sid=A4B78B6D142E4A0E_468FSID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:19:06 GMT
+      Strict-Transport-Security:
+      - max-age=31536000; includeSubDomains; preload
+      Transfer-Encoding:
+      - chunked
+      X-RateLimit-Limit:
+      - '3'
+      X-RateLimit-Remaining:
+      - '1'
       X-UA-Compatible:
       - IE=Edge
       X-XSS-Protection:
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 24b5f4b..5315421 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
@@ -1,4 +1,46 @@
 interactions:
+- request:
+    body: null
+    headers:
+      Accept:
+      - '*/*'
+      Accept-Encoding:
+      - gzip, deflate
+      Connection:
+      - keep-alive
+      User-Agent:
+      - python-requests/2.31.0
+    method: GET
+    uri: http://localhost:5000/seqrepo/1/metadata/refseq:NC_000013.11
+  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:
+      - Wed, 06 Sep 2023 22:18:46 GMT
+      Server:
+      - Werkzeug/2.2.2 Python/3.10.4
+    status:
+      code: 200
+      message: OK
 - request:
     body: null
     headers:
@@ -23,7 +65,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:02 GMT
+      - Wed, 06 Sep 2023 22:18:46 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -65,7 +107,7 @@ interactions:
       Content-Type:
       - application/json
       Date:
-      - Thu, 31 Aug 2023 20:16:02 GMT
+      - Wed, 06 Sep 2023 22:18:46 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -95,7 +137,49 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:03 GMT
+      - Wed, 06 Sep 2023 22:18: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.31.0
+    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:
+      - Wed, 06 Sep 2023 22:18:46 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -125,7 +209,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:03 GMT
+      - Wed, 06 Sep 2023 22:18:46 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -143,12 +227,12 @@ interactions:
       User-Agent:
       - python-requests/2.31.0
     method: GET
-    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000013.11&rettype=fasta&seq_start=32936731&seq_stop=32936732&tool=bioutils&email=biocommons-dev@googlegroups.com
+    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NC_000013.11&rettype=fasta&seq_start=32936732&seq_stop=32936732&tool=bioutils&email=biocommons-dev@googlegroups.com
   response:
     body:
       string: !!binary |
-        H4sIAAAAAAAAALLzc443AAJDYz1DQytjI0tjM3NjQ10ow0jBIz83X6E4sSAzNa9YITmjCMgtzs9N
-        VTA01lFwD3LOMLbQKzA0UQgoysxNLKpUcCwuTs1Nyqnkcnbm4gIAAAD//wMA49yXRFwAAAA=
+        H4sIAAAAAAAAALLzc443AAJDYz1DQytjI0tjM3NjI10YQ8EjPzdfoTixIDM1r1ghOaMIyC3Oz01V
+        MDTWUXAPcs4wttArMDRRCCjKzE0sqlRwLC5OzU3KqeRy5uICAAAA//8DALFcilZbAAAA
     headers:
       Access-Control-Allow-Origin:
       - '*'
@@ -165,20 +249,20 @@ interactions:
       Content-Type:
       - text/plain
       Date:
-      - Thu, 31 Aug 2023 20:16:07 GMT
+      - Wed, 06 Sep 2023 22:18:51 GMT
       Keep-Alive:
       - timeout=4, max=40
       NCBI-PHID:
-      - D0BD6E1D0758AC7500003735D2DB17B5.1.1.m_5
+      - 939B68E6D1C40EA5000028EA596BF585.1.1.m_5
       NCBI-SID:
-      - 9E731ACC80E665E2_1BB4SID
+      - E2C51A30ABE4B3F3_884DSID
       Referrer-Policy:
       - origin-when-cross-origin
       Server:
       - Finatra
       Set-Cookie:
-      - ncbi_sid=9E731ACC80E665E2_1BB4SID; domain=.nih.gov; path=/; expires=Sat, 31
-        Aug 2024 20:16:07 GMT
+      - ncbi_sid=E2C51A30ABE4B3F3_884DSID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:18:51 GMT
       Strict-Transport-Security:
       - max-age=31536000; includeSubDomains; preload
       Transfer-Encoding:
diff --git a/tests/extras/cassettes/test_hgvs[NM_001331029.1:n.872A>G-expected6].yaml b/tests/extras/cassettes/test_hgvs[NM_001331029.1:n.872A>G-expected6].yaml
index 0d2cc92..5a90ce5 100644
--- a/tests/extras/cassettes/test_hgvs[NM_001331029.1:n.872A>G-expected6].yaml
+++ b/tests/extras/cassettes/test_hgvs[NM_001331029.1:n.872A>G-expected6].yaml
@@ -28,7 +28,7 @@ interactions:
       Content-Type:
       - application/json
       Date:
-      - Thu, 31 Aug 2023 20:16:18 GMT
+      - Wed, 06 Sep 2023 22:19:08 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -63,7 +63,7 @@ interactions:
       Content-Type:
       - application/json
       Date:
-      - Thu, 31 Aug 2023 20:16:18 GMT
+      - Wed, 06 Sep 2023 22:19:08 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -93,7 +93,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:18 GMT
+      - Wed, 06 Sep 2023 22:19:08 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -123,7 +123,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:18 GMT
+      - Wed, 06 Sep 2023 22:19:08 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -158,7 +158,7 @@ interactions:
       Content-Type:
       - application/json
       Date:
-      - Thu, 31 Aug 2023 20:16:18 GMT
+      - Wed, 06 Sep 2023 22:19:08 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -188,7 +188,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:18 GMT
+      - Wed, 06 Sep 2023 22:19:08 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -229,20 +229,20 @@ interactions:
       Content-Type:
       - text/plain
       Date:
-      - Thu, 31 Aug 2023 20:16:18 GMT
+      - Wed, 06 Sep 2023 22:19:09 GMT
       Keep-Alive:
       - timeout=4, max=40
       NCBI-PHID:
-      - 939B29D888F10AD50000544567E271A9.1.1.m_5
+      - 939B68E6D1C40EA5000053EA9C2F634E.1.1.m_5
       NCBI-SID:
-      - 27E94100778C456F_83D0SID
+      - C32CE9D56C0FC4EA_0ECDSID
       Referrer-Policy:
       - origin-when-cross-origin
       Server:
       - Finatra
       Set-Cookie:
-      - ncbi_sid=27E94100778C456F_83D0SID; domain=.nih.gov; path=/; expires=Sat, 31
-        Aug 2024 20:16:18 GMT
+      - ncbi_sid=C32CE9D56C0FC4EA_0ECDSID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:19:09 GMT
       Strict-Transport-Security:
       - max-age=31536000; includeSubDomains; preload
       Transfer-Encoding:
@@ -272,13 +272,13 @@ interactions:
       User-Agent:
       - python-requests/2.31.0
     method: GET
-    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NM_001331029.1&rettype=fasta&seq_start=871&seq_stop=892&tool=bioutils&email=biocommons-dev@googlegroups.com
+    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NM_001331029.1&rettype=fasta&seq_start=872&seq_stop=892&tool=bioutils&email=biocommons-dev@googlegroups.com
   response:
     body:
       string: !!binary |
-        H4sIAAAAAAAAAAzGsQrCMBQF0L1fcUeFKnntYOsgxA51sZSSXZ4SbMAmIXkV/Hs7nXMZ7g+lqK5J
-        Ve2Rzs2JDk1b4RaWgMzRWZ8RUxDrPOIccpxZOFsQkn2vH5aQfsjrc/VOQNUVu3Ecadq2LyGJfX4l
-        FwVfTo69oCmxTIMujDa91p3p9Baz0ffamKL4AwAA//8DAJnR/l+RAAAA
+        H4sIAAAAAAAAAAzGsQrCMBQF0L1fcUeFKk062DoIsUNdLKFkl6cEG7BJSF4E/95O51ym+6NpRNuK
+        RvZHce5O8tD1ErewBmSKzvqMmAJb5xGXkONCTNlCINl3+RCH9EMuz+IdQ8grdlprMW/b1+BEPr+S
+        i4wvJUee0dVY50lVyoxKDWZQW8zGOCpjquoPAAD//wMAQOE1ipAAAAA=
     headers:
       Access-Control-Allow-Origin:
       - '*'
@@ -295,20 +295,20 @@ interactions:
       Content-Type:
       - text/plain
       Date:
-      - Thu, 31 Aug 2023 20:16:20 GMT
+      - Wed, 06 Sep 2023 22:19:09 GMT
       Keep-Alive:
       - timeout=4, max=40
       NCBI-PHID:
-      - 939B29D888F10AD5000026456BBA7A02.1.1.m_5
+      - D0BD3C0596812615000053D28D7656EE.1.1.m_5
       NCBI-SID:
-      - B2DAEA1A9D35DB08_63C8SID
+      - FA71EC3A86529D4A_0A89SID
       Referrer-Policy:
       - origin-when-cross-origin
       Server:
       - Finatra
       Set-Cookie:
-      - ncbi_sid=B2DAEA1A9D35DB08_63C8SID; domain=.nih.gov; path=/; expires=Sat, 31
-        Aug 2024 20:16:19 GMT
+      - ncbi_sid=FA71EC3A86529D4A_0A89SID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:19:10 GMT
       Strict-Transport-Security:
       - max-age=31536000; includeSubDomains; preload
       Transfer-Encoding:
diff --git a/tests/extras/cassettes/test_hgvs[NM_181798.1:n.1263G>T-expected7].yaml b/tests/extras/cassettes/test_hgvs[NM_181798.1:n.1263G>T-expected7].yaml
index 456211c..12a8cc1 100644
--- a/tests/extras/cassettes/test_hgvs[NM_181798.1:n.1263G>T-expected7].yaml
+++ b/tests/extras/cassettes/test_hgvs[NM_181798.1:n.1263G>T-expected7].yaml
@@ -28,7 +28,7 @@ interactions:
       Content-Type:
       - application/json
       Date:
-      - Thu, 31 Aug 2023 20:16:20 GMT
+      - Wed, 06 Sep 2023 22:19:10 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -63,7 +63,7 @@ interactions:
       Content-Type:
       - application/json
       Date:
-      - Thu, 31 Aug 2023 20:16:20 GMT
+      - Wed, 06 Sep 2023 22:19:10 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -93,7 +93,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:20 GMT
+      - Wed, 06 Sep 2023 22:19:10 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -123,7 +123,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:20 GMT
+      - Wed, 06 Sep 2023 22:19:10 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -158,7 +158,7 @@ interactions:
       Content-Type:
       - application/json
       Date:
-      - Thu, 31 Aug 2023 20:16:20 GMT
+      - Wed, 06 Sep 2023 22:19:10 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -188,7 +188,7 @@ interactions:
       Content-Type:
       - text/plain; charset=utf-8
       Date:
-      - Thu, 31 Aug 2023 20:16:20 GMT
+      - Wed, 06 Sep 2023 22:19:10 GMT
       Server:
       - Werkzeug/2.2.2 Python/3.10.4
     status:
@@ -229,20 +229,20 @@ interactions:
       Content-Type:
       - text/plain
       Date:
-      - Thu, 31 Aug 2023 20:16:20 GMT
+      - Wed, 06 Sep 2023 22:19:11 GMT
       Keep-Alive:
       - timeout=4, max=40
       NCBI-PHID:
-      - 939B29D888F10AD5000027457065372F.1.1.m_5
+      - D0BD3C059681261500003ED290DEE977.1.1.m_5
       NCBI-SID:
-      - 1F4DC42F25DAA920_AA86SID
+      - 732AD5AA27B3A662_E66FSID
       Referrer-Policy:
       - origin-when-cross-origin
       Server:
       - Finatra
       Set-Cookie:
-      - ncbi_sid=1F4DC42F25DAA920_AA86SID; domain=.nih.gov; path=/; expires=Sat, 31
-        Aug 2024 20:16:20 GMT
+      - ncbi_sid=732AD5AA27B3A662_E66FSID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:19:11 GMT
       Strict-Transport-Security:
       - max-age=31536000; includeSubDomains; preload
       Transfer-Encoding:
@@ -272,13 +272,13 @@ interactions:
       User-Agent:
       - python-requests/2.31.0
     method: GET
-    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NM_181798.1&rettype=fasta&seq_start=1262&seq_stop=1268&tool=bioutils&email=biocommons-dev@googlegroups.com
+    uri: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=NM_181798.1&rettype=fasta&seq_start=1263&seq_stop=1268&tool=bioutils&email=biocommons-dev@googlegroups.com
   response:
     body:
       string: !!binary |
-        H4sIAAAAAAAAAAzEuwrCMBgG0D1P8Y0KrZAMWh2E0qGCGKhkl781rYHcSNKCb69nOFf5ePGGn87N
-        gV+4OIr6X4NbcAGZotE+I4ZCOZvVYQu20KLrhYp+Y/qQ99oir+NMztgvBjjtRp3Asbt3cuD7CiWR
-        z1MysWCjZMgXiAruKVvW9kp1qmfsBwAA//8DAFMv0XCGAAAA
+        H4sIAAAAAAAAAAzEuwrCMBgG0D1P8Y0KrZAKGh0E6VBBDFSyy9+a1kBuJGnBt9cznIt8vLjgx5PY
+        8TNvDvv6n8AtuIBM0WifEUOhnM3isAZbaNb1TEW/MX7Ie22Rl2EiZ+wXPZx2g07g2Nxb2fNthZLI
+        5zGZWLBSMuQLmgruKa+sU6pVHWM/AAAA//8DAATZgc6FAAAA
     headers:
       Access-Control-Allow-Origin:
       - '*'
@@ -295,20 +295,20 @@ interactions:
       Content-Type:
       - text/plain
       Date:
-      - Thu, 31 Aug 2023 20:16:21 GMT
+      - Wed, 06 Sep 2023 22:19:11 GMT
       Keep-Alive:
       - timeout=4, max=40
       NCBI-PHID:
-      - 322C572A8DE8D0950000394D7F162BF2.1.1.m_5
+      - 939B68E6D1C40EA5000024EAA4329593.1.1.m_5
       NCBI-SID:
-      - 38DEB32B67EC79ED_5DEDSID
+      - D60C6900D718CBA4_E1D0SID
       Referrer-Policy:
       - origin-when-cross-origin
       Server:
       - Finatra
       Set-Cookie:
-      - ncbi_sid=38DEB32B67EC79ED_5DEDSID; domain=.nih.gov; path=/; expires=Sat, 31
-        Aug 2024 20:16:21 GMT
+      - ncbi_sid=D60C6900D718CBA4_E1D0SID; domain=.nih.gov; path=/; expires=Fri, 06
+        Sep 2024 22:19:12 GMT
       Strict-Transport-Security:
       - max-age=31536000; includeSubDomains; preload
       Transfer-Encoding:
diff --git a/tests/extras/test_translator.py b/tests/extras/test_translator.py
index a646545..17e7181 100644
--- a/tests/extras/test_translator.py
+++ b/tests/extras/test_translator.py
@@ -1,7 +1,5 @@
 import pytest
 
-from ga4gh.vrs import models
-
 snv_inputs = {
     "hgvs": "NC_000013.11:g.32936732G>C",
     "beacon": "13 : 32936732 G > C",
@@ -29,7 +27,8 @@ snv_output = {
 # https://www.ncbi.nlm.nih.gov/clinvar/variation/1373966/?new_evidence=true
 deletion_inputs = {
     "hgvs": "NC_000013.11:g.20003097del",
-    "spdi": ["NC_000013.11:20003096:C:", "NC_000013.11:20003096:1:"]
+    "spdi": ["NC_000013.11:20003096:C:", "NC_000013.11:20003096:1:"],
+    "gnomad": "13-20003096-AC-A"
 }
 
 deletion_output = {
@@ -49,10 +48,50 @@ deletion_output = {
     "type": "Allele"
 }
 
+
+gnomad_deletion_output = {
+    "location": {
+        "end": 20003097,
+        "start": 20003095,
+        "sequenceReference": {
+            "refgetAccession": "SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT",
+            "type": "SequenceReference"
+        },
+        "type": "SequenceLocation"
+    },
+    "state": {
+        "sequence": "A",
+        "type": "LiteralSequenceExpression"
+    },
+    "type": "Allele"
+}
+
+
+deletion_output_normalized = {
+    "location": {
+        "end": 20003097,
+        "start": 20003096,
+        "sequenceReference": {
+            "refgetAccession": "SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT",
+            "type": "SequenceReference"
+        },
+        "type": "SequenceLocation"
+    },
+    "state": {
+        "length": 0,
+        "repeatSubunitLength": 1,
+        "sequence": "",
+        "type": "ReferenceLengthExpression"
+    },
+    "type": "Allele"
+}
+
+
 # https://www.ncbi.nlm.nih.gov/clinvar/variation/1687427/?new_evidence=true
 insertion_inputs = {
     "hgvs": "NC_000013.11:g.20003010_20003011insG",
-    "spdi": ["NC_000013.11:20003010::G", "NC_000013.11:20003010:0:G"]
+    "spdi": ["NC_000013.11:20003010::G", "NC_000013.11:20003010:0:G"],
+    "gnomad": "13-20003010-A-AG"
 }
 
 insertion_output = {
@@ -72,10 +111,30 @@ insertion_output = {
     "type": "Allele"
 }
 
+
+gnomad_insertion_output = {
+    "location": {
+        "end": 20003010,
+        "start": 20003009,
+        "sequenceReference": {
+            "refgetAccession": "SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT",
+            "type": "SequenceReference"
+        },
+        "type": "SequenceLocation"
+    },
+    "state": {
+        "sequence": "AG",
+        "type": "LiteralSequenceExpression"
+    },
+    "type": "Allele"
+}
+
+
 # https://www.ncbi.nlm.nih.gov/clinvar/variation/1264314/?new_evidence=true
 duplication_inputs = {
     "hgvs": "NC_000013.11:g.19993838_19993839dup",
-    "spdi": "NC_000013.11:19993837:GT:GTGT"
+    "spdi": "NC_000013.11:19993837:GT:GTGT",
+    "gnomad": "13-19993838-GT-GTGT"
 }
 
 duplication_output = {
@@ -96,18 +155,49 @@ duplication_output = {
 }
 
 
+duplication_output_normalized = {
+    "location": {
+        "end": 19993839,
+        "start": 19993837,
+        "sequenceReference": {
+            "refgetAccession": "SQ._0wi-qoDrvram155UmcSC-zA5ZK4fpLT",
+            "type": "SequenceReference"
+        },
+        "type": "SequenceLocation"
+    },
+    "state": {
+        "length": 4,
+        "repeatSubunitLength": 2,
+        "sequence": "GTGT",
+        "type": "ReferenceLengthExpression"
+    },
+    "type": "Allele"
+}
+
+
 @pytest.mark.vcr
 def test_from_beacon(tlr):
+    tlr.normalize = False
     assert tlr._from_beacon(snv_inputs["beacon"]).model_dump(exclude_none=True) == snv_output
 
 
 @pytest.mark.vcr
 def test_from_gnomad(tlr):
+    tlr.normalize = False
     assert tlr._from_gnomad(snv_inputs["gnomad"]).model_dump(exclude_none=True) == snv_output
+    assert tlr._from_gnomad(deletion_inputs["gnomad"]).model_dump(exclude_none=True) == gnomad_deletion_output
+    assert tlr._from_gnomad(insertion_inputs["gnomad"]).model_dump(exclude_none=True) == gnomad_insertion_output
+    assert tlr._from_gnomad(duplication_inputs["gnomad"]).model_dump(exclude_none=True) == duplication_output
 
+    tlr.normalize = True
+    assert tlr._from_gnomad(snv_inputs["gnomad"]).model_dump(exclude_none=True) == snv_output
+    assert tlr._from_gnomad(deletion_inputs["gnomad"]).model_dump(exclude_none=True) == deletion_output_normalized
+    assert tlr._from_gnomad(insertion_inputs["gnomad"]).model_dump(exclude_none=True) == insertion_output
+    assert tlr._from_gnomad(duplication_inputs["gnomad"]).model_dump(exclude_none=True) == duplication_output_normalized
 
 @pytest.mark.vcr
 def test_from_hgvs(tlr):
+    tlr.normalize = False
     assert tlr._from_hgvs(snv_inputs["hgvs"]).model_dump(exclude_none=True) == snv_output
     assert tlr._from_hgvs(deletion_inputs["hgvs"]).model_dump(exclude_none=True) == deletion_output
     assert tlr._from_hgvs(insertion_inputs["hgvs"]).model_dump(exclude_none=True) == insertion_output
@@ -116,6 +206,7 @@ def test_from_hgvs(tlr):
 
 @pytest.mark.vcr
 def test_from_spdi(tlr):
+    tlr.normalize = False
     assert tlr._from_spdi(snv_inputs["spdi"]).model_dump(exclude_none=True) == snv_output
     for spdi_del_expr in deletion_inputs["spdi"]:
         assert tlr._from_spdi(spdi_del_expr).model_dump(exclude_none=True) == deletion_output, spdi_del_expr
@@ -300,6 +391,28 @@ def test_hgvs(tlr, hgvsexpr, expected):
     assert hgvsexpr == to_hgvs[0]
 
 
+def test_to_hgvs_invalid(tlr):
+    # IRI is passed
+    iri_vo =  models.Allele(
+        **{
+            "location": {
+                "end": 1263,
+                "start": 1262,
+                "sequenceReference": "seqrefs.jsonc#/NM_181798.1",
+                "type": "SequenceLocation"
+            },
+            "state": {
+                "sequence": "T",
+                "type": "LiteralSequenceExpression"
+            },
+            "type": "Allele"
+        }
+    )
+    with pytest.raises(TypeError) as e:
+        tlr.translate_to(iri_vo, "hgvs")
+    assert str(e.value) == "`vo.location.sequenceReference` expects a `SequenceReference`"
+
+
 # TODO: Readd these tests
 # @pytest.mark.vcr
 # def test_errors(tlr):
diff --git a/tests/test_vrs2.py b/tests/test_vrs2.py
index 73a3a1e..9bb22d8 100644
--- a/tests/test_vrs2.py
+++ b/tests/test_vrs2.py
@@ -6,7 +6,7 @@ from ga4gh.core import (
     is_pydantic_instance,
     is_curie_type,
     pydantic_copy)
-from ga4gh.vrs import models
+from ga4gh.vrs import models, vrs_enref, vrs_deref
 
 allele_dict = {
     'location': {
@@ -170,3 +170,33 @@ def test_iri():
     assert is_curie_type(iri)
     assert iri.root == pydantic_copy(iri).root
     assert ga4gh_serialize(iri) == b'asdf'
+
+
+def test_enref():
+    object_store = {}
+    allele_383650_enreffed = vrs_enref(allele_383650, object_store=object_store)
+    orig_no_loc = allele_383650.model_dump().copy()
+    orig_no_loc.pop("location")
+    actual_no_loc = allele_383650_enreffed.model_dump().copy()
+    actual_no_loc.pop("location")
+    assert orig_no_loc == actual_no_loc, "Original and enreffed match except for enreffed field"
+    assert allele_383650_enreffed.location == 'ga4gh:SL.6kJ-T5Y6EhiJVUxKZoFbOL5e4KkV0Yf6'
+    assert allele_383650_enreffed.model_dump(exclude_none=True) == {
+        'type': 'Allele',
+        'location': 'ga4gh:SL.6kJ-T5Y6EhiJVUxKZoFbOL5e4KkV0Yf6',
+        'state': {
+            'type': 'LiteralSequenceExpression',
+            'sequence': 'T'}}
+
+
+    dereffed = vrs_deref(allele_383650_enreffed, object_store=object_store)
+    assert (dereffed.location.model_dump(exclude_none=True) == {
+        'type': 'SequenceLocation',
+        'sequenceReference': {
+            'type': 'SequenceReference',
+            'refgetAccession': 'ga4gh:SQ.KEO-4XBcm1cxeo_DIQ8_ofqGUkp4iZhI'
+        },
+        'start': 128325834,
+        'end': 128325835})
+    assert dereffed.location.model_dump(exclude_none=True) == allele_383650.location.model_dump(exclude_none=True)
+    assert dereffed.model_dump() == allele_383650.model_dump()