cool-seq-tool 0.12.1__tar.gz → 0.13.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/.github/workflows/checks.yaml +20 -0
  2. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/.pre-commit-config.yaml +5 -3
  3. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/PKG-INFO +6 -5
  4. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/docs/make.bat +34 -34
  5. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/pyproject.toml +32 -7
  6. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/mappers/__init__.py +1 -1
  7. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/mappers/exon_genomic_coords.py +2 -5
  8. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/resources/status.py +9 -11
  9. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/sources/uta_database.py +11 -11
  10. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool.egg-info/PKG-INFO +6 -5
  11. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool.egg-info/requires.txt +3 -3
  12. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/tests/mappers/test_alignment.py +7 -7
  13. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/tests/mappers/test_exon_genomic_coords.py +13 -13
  14. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/tests/mappers/test_mane_transcript.py +12 -12
  15. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/tests/sources/test_uta_database.py +17 -17
  16. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/.coveragerc +0 -0
  17. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/.github/ISSUE_TEMPLATE/bug-report.yaml +0 -0
  18. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/.github/ISSUE_TEMPLATE/feature-request.yaml +0 -0
  19. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/.github/workflows/pr-priority-label.yaml +0 -0
  20. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/.github/workflows/release.yml +0 -0
  21. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/.github/workflows/stale.yaml +0 -0
  22. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/.gitignore +0 -0
  23. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/.readthedocs.yaml +0 -0
  24. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/CITATION.cff +0 -0
  25. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/LICENSE +0 -0
  26. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/README.md +0 -0
  27. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/docs/Makefile +0 -0
  28. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/docs/source/_static/img/biomart.png +0 -0
  29. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/docs/source/_templates/module_summary.rst +0 -0
  30. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/docs/source/changelog.rst +0 -0
  31. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/docs/source/conf.py +0 -0
  32. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/docs/source/contributing.rst +0 -0
  33. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/docs/source/index.rst +0 -0
  34. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/docs/source/install.rst +0 -0
  35. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/docs/source/license.rst +0 -0
  36. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/docs/source/reference/index.rst +0 -0
  37. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/docs/source/transcript_selection.rst +0 -0
  38. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/docs/source/usage.rst +0 -0
  39. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/setup.cfg +0 -0
  40. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/__init__.py +0 -0
  41. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/app.py +0 -0
  42. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/handlers/__init__.py +0 -0
  43. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/handlers/seqrepo_access.py +0 -0
  44. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/mappers/alignment.py +0 -0
  45. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/mappers/liftover.py +0 -0
  46. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/mappers/mane_transcript.py +0 -0
  47. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/resources/__init__.py +0 -0
  48. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/resources/data_files.py +0 -0
  49. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/resources/transcript_mapping.tsv +0 -0
  50. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/schemas.py +0 -0
  51. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/sources/__init__.py +0 -0
  52. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/sources/mane_transcript_mappings.py +0 -0
  53. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/sources/transcript_mappings.py +0 -0
  54. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool/utils.py +0 -0
  55. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool.egg-info/SOURCES.txt +0 -0
  56. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool.egg-info/dependency_links.txt +0 -0
  57. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/src/cool_seq_tool.egg-info/top_level.txt +0 -0
  58. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/tests/conftest.py +0 -0
  59. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/tests/handlers/test_seqrepo_access.py +0 -0
  60. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/tests/mappers/test_liftover.py +0 -0
  61. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/tests/sources/test_mane_transcript_mappings.py +0 -0
  62. {cool_seq_tool-0.12.1 → cool_seq_tool-0.13.1}/tests/test_utils.py +0 -0
@@ -56,3 +56,23 @@ jobs:
56
56
  - name: Attempt docs build
57
57
  working-directory: ./docs
58
58
  run: make html
59
+
60
+ precommit_hooks:
61
+ runs-on: ubuntu-latest
62
+ strategy:
63
+ matrix:
64
+ cmd:
65
+ - "end-of-file-fixer"
66
+ - "trailing-whitespace"
67
+ - "mixed-line-ending"
68
+ steps:
69
+ - uses: actions/checkout@v4
70
+
71
+ - name: Set up Python 3.12
72
+ uses: actions/setup-python@v5
73
+ with:
74
+ python-version: 3.12
75
+
76
+ - uses: pre-commit/action@v3.0.1
77
+ with:
78
+ extra_args: ${{ matrix.cmd }} --all-files
@@ -1,6 +1,6 @@
1
1
  repos:
2
2
  - repo: https://github.com/pre-commit/pre-commit-hooks
3
- rev: v4.6.0 # pre-commit-hooks version
3
+ rev: v5.0.0 # pre-commit-hooks version
4
4
  hooks:
5
5
  - id: check-added-large-files
6
6
  - id: detect-private-key
@@ -9,10 +9,12 @@ repos:
9
9
  - id: check-merge-conflict
10
10
  - id: detect-aws-credentials
11
11
  args: [ --allow-missing-credentials ]
12
+ - id: mixed-line-ending
13
+ args: [ --fix=lf ]
12
14
  - repo: https://github.com/astral-sh/ruff-pre-commit
13
- rev: v0.5.0
15
+ rev: v0.8.6
14
16
  hooks:
15
17
  - id: ruff-format
16
18
  - id: ruff
17
19
  args: [ --fix, --exit-non-zero-on-fix ]
18
- minimum_pre_commit_version: 3.7.1
20
+ minimum_pre_commit_version: 4.0.1
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: cool_seq_tool
3
- Version: 0.12.1
3
+ Version: 0.13.1
4
4
  Summary: Common Operation on Lots of Sequences Tool
5
5
  Author: Kori Kuzma, James Stevenson, Katie Stahl, Alex Wagner
6
6
  License: MIT License
@@ -53,14 +53,14 @@ Requires-Dist: hgvs
53
53
  Requires-Dist: biocommons.seqrepo
54
54
  Requires-Dist: pydantic==2.*
55
55
  Requires-Dist: ga4gh.vrs~=2.0.0a10
56
- Requires-Dist: wags-tails~=0.2.2
56
+ Requires-Dist: wags-tails~=0.3.2
57
57
  Requires-Dist: bioutils
58
58
  Provides-Extra: dev
59
- Requires-Dist: pre-commit>=3.7.1; extra == "dev"
59
+ Requires-Dist: pre-commit>=4.0.1; extra == "dev"
60
60
  Requires-Dist: ipython; extra == "dev"
61
61
  Requires-Dist: ipykernel; extra == "dev"
62
62
  Requires-Dist: psycopg2-binary; extra == "dev"
63
- Requires-Dist: ruff==0.5.0; extra == "dev"
63
+ Requires-Dist: ruff==0.8.6; extra == "dev"
64
64
  Provides-Extra: tests
65
65
  Requires-Dist: pytest; extra == "tests"
66
66
  Requires-Dist: pytest-cov; extra == "tests"
@@ -74,6 +74,7 @@ Requires-Dist: sphinx-copybutton==0.5.2; extra == "docs"
74
74
  Requires-Dist: sphinxext-opengraph==0.8.2; extra == "docs"
75
75
  Requires-Dist: furo==2023.3.27; extra == "docs"
76
76
  Requires-Dist: sphinx-github-changelog==1.2.1; extra == "docs"
77
+ Dynamic: license-file
77
78
 
78
79
  <h1 align="center">
79
80
  Cool-Seq-Tool
@@ -1,35 +1,35 @@
1
- @ECHO OFF
2
-
3
- pushd %~dp0
4
-
5
- REM Command file for Sphinx documentation
6
-
7
- if "%SPHINXBUILD%" == "" (
8
- set SPHINXBUILD=sphinx-build
9
- )
10
- set SOURCEDIR=source
11
- set BUILDDIR=build
12
-
13
- %SPHINXBUILD% >NUL 2>NUL
14
- if errorlevel 9009 (
15
- echo.
16
- echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
17
- echo.installed, then set the SPHINXBUILD environment variable to point
18
- echo.to the full path of the 'sphinx-build' executable. Alternatively you
19
- echo.may add the Sphinx directory to PATH.
20
- echo.
21
- echo.If you don't have Sphinx installed, grab it from
22
- echo.https://www.sphinx-doc.org/
23
- exit /b 1
24
- )
25
-
26
- if "%1" == "" goto help
27
-
28
- %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
29
- goto end
30
-
31
- :help
32
- %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
33
-
34
- :end
1
+ @ECHO OFF
2
+
3
+ pushd %~dp0
4
+
5
+ REM Command file for Sphinx documentation
6
+
7
+ if "%SPHINXBUILD%" == "" (
8
+ set SPHINXBUILD=sphinx-build
9
+ )
10
+ set SOURCEDIR=source
11
+ set BUILDDIR=build
12
+
13
+ %SPHINXBUILD% >NUL 2>NUL
14
+ if errorlevel 9009 (
15
+ echo.
16
+ echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
17
+ echo.installed, then set the SPHINXBUILD environment variable to point
18
+ echo.to the full path of the 'sphinx-build' executable. Alternatively you
19
+ echo.may add the Sphinx directory to PATH.
20
+ echo.
21
+ echo.If you don't have Sphinx installed, grab it from
22
+ echo.https://www.sphinx-doc.org/
23
+ exit /b 1
24
+ )
25
+
26
+ if "%1" == "" goto help
27
+
28
+ %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
29
+ goto end
30
+
31
+ :help
32
+ %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
33
+
34
+ :end
35
35
  popd
@@ -33,13 +33,19 @@ dependencies = [
33
33
  "biocommons.seqrepo",
34
34
  "pydantic == 2.*",
35
35
  "ga4gh.vrs ~= 2.0.0a10",
36
- "wags-tails ~= 0.2.2",
36
+ "wags-tails ~= 0.3.2",
37
37
  "bioutils",
38
38
  ]
39
39
  dynamic = ["version"]
40
40
 
41
41
  [project.optional-dependencies]
42
- dev = ["pre-commit>=3.7.1", "ipython", "ipykernel", "psycopg2-binary", "ruff==0.5.0"]
42
+ dev = [
43
+ "pre-commit>=4.0.1",
44
+ "ipython",
45
+ "ipykernel",
46
+ "psycopg2-binary",
47
+ "ruff==0.8.6"
48
+ ]
43
49
  tests = ["pytest", "pytest-cov", "pytest-asyncio==0.18.3", "mock"]
44
50
  docs = [
45
51
  "sphinx==6.1.3",
@@ -110,10 +116,14 @@ lint.select = [
110
116
  "RSE", # https://docs.astral.sh/ruff/rules/#flake8-raise-rse
111
117
  "RET", # https://docs.astral.sh/ruff/rules/#flake8-return-ret
112
118
  "SLF", # https://docs.astral.sh/ruff/rules/#flake8-self-slf
119
+ "SLOT", # https://docs.astral.sh/ruff/rules/#flake8-slots-slot
113
120
  "SIM", # https://docs.astral.sh/ruff/rules/#flake8-simplify-sim
114
121
  "ARG", # https://docs.astral.sh/ruff/rules/#flake8-unused-arguments-arg
115
122
  "PTH", # https://docs.astral.sh/ruff/rules/#flake8-use-pathlib-pth
116
123
  "PGH", # https://docs.astral.sh/ruff/rules/#pygrep-hooks-pgh
124
+ "PLC", # https://docs.astral.sh/ruff/rules/#convention-c
125
+ "PLE", # https://docs.astral.sh/ruff/rules/#error-e_1
126
+ "TRY", # https://docs.astral.sh/ruff/rules/#tryceratops-try
117
127
  "PERF", # https://docs.astral.sh/ruff/rules/#perflint-perf
118
128
  "FURB", # https://docs.astral.sh/ruff/rules/#refurb-furb
119
129
  "RUF", # https://docs.astral.sh/ruff/rules/#ruff-specific-rules-ruf
@@ -132,14 +142,15 @@ lint.fixable = [
132
142
  "PT",
133
143
  "RSE",
134
144
  "SIM",
145
+ "PLC",
146
+ "PLE",
147
+ "TRY",
135
148
  "PERF",
136
149
  "FURB",
137
150
  "RUF"
138
151
  ]
139
152
 
140
153
  # ANN003 - missing-type-kwargs
141
- # ANN101 - missing-type-self
142
- # ANN102 - missing-type-cls
143
154
  # D203 - one-blank-line-before-class
144
155
  # D205 - blank-line-after-summary
145
156
  # D206 - indent-with-spaces*
@@ -153,26 +164,40 @@ lint.fixable = [
153
164
  # E501 - line-too-long*
154
165
  # W191 - tab-indentation*
155
166
  # S321 - suspicious-ftp-lib-usage
167
+ # PLC0206 - dict-index-missing-items
156
168
  # *ignored for compatibility with formatter
157
169
  lint.ignore = [
158
- "ANN003", "ANN101", "ANN102",
170
+ "ANN003",
159
171
  "D203", "D205", "D206", "D213", "D300", "D400", "D415",
160
172
  "E111", "E114", "E117", "E501",
161
173
  "W191",
162
174
  "S321",
175
+ "PLC0206",
163
176
  ]
164
177
 
165
178
  [tool.ruff.lint.per-file-ignores]
166
179
  # ANN001 - missing-type-function-argument
167
180
  # ANN2 - missing-return-type
168
- # ANN102 - missing-type-cls
181
+ # D100 - undocumented-public-module
182
+ # D102 - undocumented-public-class
183
+ # D103 - undocumented-public-function
169
184
  # N805 - invalid-first-argument-name-for-method
170
185
  # F821 - undefined-name
171
186
  # F401 - unused-import
172
187
  # INP001 - implicit-namespace-package
173
188
  # SLF001 - private-member-access
174
189
  # ARG001 - unused-function-argument
175
- "tests/*" = ["ANN001", "ANN2", "ANN102", "S101", "INP001", "SLF001", "ARG001"]
190
+ "tests/*" = [
191
+ "ANN001",
192
+ "ANN2",
193
+ "D100",
194
+ "D102",
195
+ "D103",
196
+ "S101",
197
+ "INP001",
198
+ "SLF001",
199
+ "ARG001"
200
+ ]
176
201
  "*__init__.py" = ["F401"]
177
202
  "src/cool_seq_tool/schemas.py" = ["ANN201", "N805", "ANN001"]
178
203
 
@@ -6,4 +6,4 @@ from .mane_transcript import ManeTranscript
6
6
  from .exon_genomic_coords import ExonGenomicCoordsMapper
7
7
 
8
8
 
9
- __all__ = ["AlignmentMapper", "LiftOver", "ManeTranscript", "ExonGenomicCoordsMapper"]
9
+ __all__ = ["AlignmentMapper", "ExonGenomicCoordsMapper", "LiftOver", "ManeTranscript"]
@@ -1022,11 +1022,8 @@ class ExonGenomicCoordsMapper:
1022
1022
  :return ``True`` if alt_start_i should be used, ``False`` if alt_end_i should
1023
1023
  be used
1024
1024
  """
1025
- return (
1026
- is_seg_start
1027
- and strand == Strand.POSITIVE
1028
- or not is_seg_start
1029
- and strand == Strand.NEGATIVE
1025
+ return (is_seg_start and strand == Strand.POSITIVE) or (
1026
+ not is_seg_start and strand == Strand.NEGATIVE
1030
1027
  )
1031
1028
 
1032
1029
  @staticmethod
@@ -88,11 +88,11 @@ async def check_status(
88
88
  try:
89
89
  get_data_file(r)
90
90
  except FileNotFoundError:
91
- _logger.error(
91
+ _logger.exception(
92
92
  "%s does not exist at configured location %s", name_lower, declared_path
93
93
  )
94
94
  except ValueError:
95
- _logger.error(
95
+ _logger.exception(
96
96
  "%s configured at %s is not a valid file.", name_lower, declared_path
97
97
  )
98
98
  except Exception as e:
@@ -107,8 +107,8 @@ async def check_status(
107
107
  chain_file_37_to_38=chain_file_37_to_38,
108
108
  chain_file_38_to_37=chain_file_38_to_37,
109
109
  )
110
- except (FileNotFoundError, ChainfileError) as e:
111
- _logger.error("agct converter setup failed: %s", e)
110
+ except (FileNotFoundError, ChainfileError):
111
+ _logger.exception("agct converter setup failed")
112
112
  except Exception as e:
113
113
  _logger.critical("Encountered unexpected error setting up agct: %s", e)
114
114
  else:
@@ -116,10 +116,8 @@ async def check_status(
116
116
 
117
117
  try:
118
118
  await UtaDatabase.create(db_url)
119
- except (OSError, InvalidCatalogNameError, UndefinedTableError) as e:
120
- _logger.error(
121
- "Encountered error instantiating UTA at URI %s: %s", UTA_DB_URL, e
122
- )
119
+ except (OSError, InvalidCatalogNameError, UndefinedTableError):
120
+ _logger.exception("Encountered error instantiating UTA at URI %s", UTA_DB_URL)
123
121
  except Exception as e:
124
122
  _logger.critical(
125
123
  "Encountered unexpected error instantiating UTA from URI %s: %s",
@@ -134,10 +132,10 @@ async def check_status(
134
132
  sr = SeqRepo(root_dir=SEQREPO_ROOT_DIR)
135
133
  sra = SeqRepoAccess(sr)
136
134
  sra.sr["NC_000001.11"][1000:1001]
137
- except OSError as e:
138
- _logger.error("Encountered error while instantiating SeqRepo: %s", e)
135
+ except OSError:
136
+ _logger.exception("Encountered error while instantiating SeqRepo")
139
137
  except KeyError:
140
- _logger.error("SeqRepo data fetch test failed -- is it populated?")
138
+ _logger.exception("SeqRepo data fetch test failed -- is it populated?")
141
139
  except Exception as e:
142
140
  _logger.critical("Encountered unexpected error setting up SeqRepo: %s", e)
143
141
  else:
@@ -162,11 +162,11 @@ class UtaDatabase:
162
162
  database=self.args.database,
163
163
  )
164
164
  except InterfaceError as e:
165
- _logger.error(
166
- "While creating connection pool, encountered exception %s", e
165
+ _logger.exception(
166
+ "While creating connection pool, encountered exception"
167
167
  )
168
168
  msg = "Could not create connection pool"
169
- raise Exception(msg) from e
169
+ raise Exception(msg) from e # noqa: TRY002
170
170
 
171
171
  @classmethod
172
172
  async def create(
@@ -221,7 +221,7 @@ class UtaDatabase:
221
221
  WHERE table_schema = '{self.schema}'
222
222
  AND table_name = 'genomic'
223
223
  );
224
- """ # noqa: S608
224
+ """
225
225
  genomic_table_exists = await self.execute_query(check_table_exists)
226
226
  genomic_table_exists = genomic_table_exists[0].get("exists")
227
227
  if genomic_table_exists is None:
@@ -250,7 +250,7 @@ class UtaDatabase:
250
250
  LEFT JOIN {self.schema}.exon_aln ea ON
251
251
  (((te.exon_id = ea.tx_exon_id) AND
252
252
  (ae.exon_id = ea.alt_exon_id))));
253
- """ # noqa: S608
253
+ """
254
254
  await self.execute_query(create_genomic_table)
255
255
 
256
256
  indexes = [
@@ -499,7 +499,7 @@ class UtaDatabase:
499
499
  AND {start_pos} BETWEEN {pos_q}
500
500
  AND {end_pos} BETWEEN {pos_q}
501
501
  {order_by_cond}
502
- """ # noqa: S608
502
+ """
503
503
  result = await self.execute_query(query)
504
504
  if not result:
505
505
  _logger.warning("Unable to find transcript alignment for query: %s", query)
@@ -852,8 +852,8 @@ class UtaDatabase:
852
852
 
853
853
  try:
854
854
  assembly = Assembly(assembly)
855
- except ValueError as e:
856
- _logger.error(e)
855
+ except ValueError:
856
+ _logger.exception("Unable to parse %s as an Assembly", assembly)
857
857
  return None
858
858
 
859
859
  return chromosome, assembly
@@ -924,11 +924,11 @@ class UtaDatabase:
924
924
 
925
925
  try:
926
926
  get_secret_value_response = client.get_secret_value(SecretId=secret_name)
927
- except ClientError as e:
927
+ except ClientError:
928
928
  # For a list of exceptions thrown, see
929
929
  # https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html
930
- _logger.error(e)
931
- raise e
930
+ _logger.exception("Encountered AWS client error fetching UTA DB secret")
931
+ raise
932
932
  else:
933
933
  return get_secret_value_response["SecretString"]
934
934
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: cool_seq_tool
3
- Version: 0.12.1
3
+ Version: 0.13.1
4
4
  Summary: Common Operation on Lots of Sequences Tool
5
5
  Author: Kori Kuzma, James Stevenson, Katie Stahl, Alex Wagner
6
6
  License: MIT License
@@ -53,14 +53,14 @@ Requires-Dist: hgvs
53
53
  Requires-Dist: biocommons.seqrepo
54
54
  Requires-Dist: pydantic==2.*
55
55
  Requires-Dist: ga4gh.vrs~=2.0.0a10
56
- Requires-Dist: wags-tails~=0.2.2
56
+ Requires-Dist: wags-tails~=0.3.2
57
57
  Requires-Dist: bioutils
58
58
  Provides-Extra: dev
59
- Requires-Dist: pre-commit>=3.7.1; extra == "dev"
59
+ Requires-Dist: pre-commit>=4.0.1; extra == "dev"
60
60
  Requires-Dist: ipython; extra == "dev"
61
61
  Requires-Dist: ipykernel; extra == "dev"
62
62
  Requires-Dist: psycopg2-binary; extra == "dev"
63
- Requires-Dist: ruff==0.5.0; extra == "dev"
63
+ Requires-Dist: ruff==0.8.6; extra == "dev"
64
64
  Provides-Extra: tests
65
65
  Requires-Dist: pytest; extra == "tests"
66
66
  Requires-Dist: pytest-cov; extra == "tests"
@@ -74,6 +74,7 @@ Requires-Dist: sphinx-copybutton==0.5.2; extra == "docs"
74
74
  Requires-Dist: sphinxext-opengraph==0.8.2; extra == "docs"
75
75
  Requires-Dist: furo==2023.3.27; extra == "docs"
76
76
  Requires-Dist: sphinx-github-changelog==1.2.1; extra == "docs"
77
+ Dynamic: license-file
77
78
 
78
79
  <h1 align="center">
79
80
  Cool-Seq-Tool
@@ -7,15 +7,15 @@ hgvs
7
7
  biocommons.seqrepo
8
8
  pydantic==2.*
9
9
  ga4gh.vrs~=2.0.0a10
10
- wags-tails~=0.2.2
10
+ wags-tails~=0.3.2
11
11
  bioutils
12
12
 
13
13
  [dev]
14
- pre-commit>=3.7.1
14
+ pre-commit>=4.0.1
15
15
  ipython
16
16
  ipykernel
17
17
  psycopg2-binary
18
- ruff==0.5.0
18
+ ruff==0.8.6
19
19
 
20
20
  [docs]
21
21
  sphinx==6.1.3
@@ -111,7 +111,7 @@ def hras_t2a():
111
111
  return _expected
112
112
 
113
113
 
114
- @pytest.mark.asyncio()
114
+ @pytest.mark.asyncio
115
115
  async def test_get_cds_start(test_alignment_mapper):
116
116
  """Test that _get_cds_start method works correctly"""
117
117
  # Valid
@@ -125,7 +125,7 @@ async def test_get_cds_start(test_alignment_mapper):
125
125
  assert w == "Accession NM_004333.6293702 not found in UTA db"
126
126
 
127
127
 
128
- @pytest.mark.asyncio()
128
+ @pytest.mark.asyncio
129
129
  async def test_p_to_c(test_alignment_mapper, braf_v600e_c, egfr_l858r_c):
130
130
  """Test that p_to_c works as expected"""
131
131
  # BRAF V600E
@@ -164,7 +164,7 @@ async def test_p_to_c(test_alignment_mapper, braf_v600e_c, egfr_l858r_c):
164
164
  }
165
165
 
166
166
 
167
- @pytest.mark.asyncio()
167
+ @pytest.mark.asyncio
168
168
  async def test_p_to_c_invalid(test_alignment_mapper):
169
169
  """Test invalid queries for p_to_c method"""
170
170
  # Invalid protein accession
@@ -175,7 +175,7 @@ async def test_p_to_c_invalid(test_alignment_mapper):
175
175
  assert resp is None
176
176
 
177
177
 
178
- @pytest.mark.asyncio()
178
+ @pytest.mark.asyncio
179
179
  async def test_c_to_g(
180
180
  test_alignment_mapper,
181
181
  braf_v600e_grch37,
@@ -227,7 +227,7 @@ async def test_c_to_g(
227
227
  assert resp == expected, params
228
228
 
229
229
 
230
- @pytest.mark.asyncio()
230
+ @pytest.mark.asyncio
231
231
  async def test_c_to_g_invalid(test_alignment_mapper):
232
232
  """Test invalid queries for c_to_g method"""
233
233
  # Should not expect to find anything given these two positions
@@ -262,7 +262,7 @@ async def test_c_to_g_invalid(test_alignment_mapper):
262
262
  assert w == "c_start_pos and c_end_pos are not a valid range for the codon(s)"
263
263
 
264
264
 
265
- @pytest.mark.asyncio()
265
+ @pytest.mark.asyncio
266
266
  async def test_p_to_g(
267
267
  test_alignment_mapper,
268
268
  braf_v600e_grch37,
@@ -350,7 +350,7 @@ async def test_p_to_g(
350
350
  assert resp == hras_t2a(assembly), params
351
351
 
352
352
 
353
- @pytest.mark.asyncio()
353
+ @pytest.mark.asyncio
354
354
  async def test_p_to_g_invalid(test_alignment_mapper):
355
355
  """Test invalid queries for p_to_g method"""
356
356
  # Invalid protein accession
@@ -704,7 +704,7 @@ def genomic_tx_seg_checks(actual, expected=None, is_valid=True):
704
704
  assert len(actual.errors) > 0
705
705
 
706
706
 
707
- @pytest.mark.asyncio()
707
+ @pytest.mark.asyncio
708
708
  async def test_get_all_exon_coords(
709
709
  test_egc_mapper, nm_152263_exons, nm_152263_exons_genomic_coords
710
710
  ):
@@ -724,7 +724,7 @@ async def test_get_all_exon_coords(
724
724
  assert resp == []
725
725
 
726
726
 
727
- @pytest.mark.asyncio()
727
+ @pytest.mark.asyncio
728
728
  async def test_get_start_end_exon_coords(test_egc_mapper):
729
729
  """Test that _get_start_end_exon_coords works correctly."""
730
730
  resp = await test_egc_mapper._get_start_end_exon_coords(
@@ -761,7 +761,7 @@ async def test_get_start_end_exon_coords(test_egc_mapper):
761
761
  assert resp == (None, None, ["Transcript does not exist in UTA: NM_1234.5"])
762
762
 
763
763
 
764
- @pytest.mark.asyncio()
764
+ @pytest.mark.asyncio
765
765
  async def test_get_adjacent_exon(
766
766
  test_egc_mapper,
767
767
  nm_152263_exons_genomic_coords,
@@ -864,7 +864,7 @@ def test_use_alt_start_i(test_egc_mapper):
864
864
  assert not resp
865
865
 
866
866
 
867
- @pytest.mark.asyncio()
867
+ @pytest.mark.asyncio
868
868
  async def test_genomic_to_transcript_fusion_context(
869
869
  test_egc_mapper,
870
870
  zbtb10_exon3_end,
@@ -1003,7 +1003,7 @@ async def test_genomic_to_transcript_fusion_context(
1003
1003
  genomic_tx_seg_service_checks(resp, gusbp3_exon5_start)
1004
1004
 
1005
1005
 
1006
- @pytest.mark.asyncio()
1006
+ @pytest.mark.asyncio
1007
1007
  async def test_get_alt_ac_start_and_end(
1008
1008
  test_egc_mapper, tpm3_1_8_start_genomic, tpm3_1_8_end_genomic
1009
1009
  ):
@@ -1038,7 +1038,7 @@ async def test_get_alt_ac_start_and_end(
1038
1038
  )
1039
1039
 
1040
1040
 
1041
- @pytest.mark.asyncio()
1041
+ @pytest.mark.asyncio
1042
1042
  async def test_get_get_exons_coords(test_egc_mapper, nm_152263_exons_genomic_coords):
1043
1043
  """Test that _get_all_exon_coords works correctly."""
1044
1044
  resp = await test_egc_mapper._get_all_exon_coords("NM_152263.4", "NC_000001.11")
@@ -1049,7 +1049,7 @@ async def test_get_get_exons_coords(test_egc_mapper, nm_152263_exons_genomic_coo
1049
1049
  assert resp == []
1050
1050
 
1051
1051
 
1052
- @pytest.mark.asyncio()
1052
+ @pytest.mark.asyncio
1053
1053
  async def test_genomic_to_transcript(test_egc_mapper, tpm3_exon1, tpm3_exon8):
1054
1054
  """Test that _genomic_to_tx_segment method works correctly."""
1055
1055
  resp = await test_egc_mapper._genomic_to_tx_segment(
@@ -1145,7 +1145,7 @@ async def test_genomic_to_transcript(test_egc_mapper, tpm3_exon1, tpm3_exon8):
1145
1145
  genomic_tx_seg_checks(resp, tpm3_exon8)
1146
1146
 
1147
1147
 
1148
- @pytest.mark.asyncio()
1148
+ @pytest.mark.asyncio
1149
1149
  async def test_tpm3(
1150
1150
  test_egc_mapper,
1151
1151
  tpm3_exon1_exon8,
@@ -1214,7 +1214,7 @@ async def test_tpm3(
1214
1214
  genomic_tx_seg_service_checks(t_to_g_resp, tpm3_exon8_g)
1215
1215
 
1216
1216
 
1217
- @pytest.mark.asyncio()
1217
+ @pytest.mark.asyncio
1218
1218
  async def test_braf(test_egc_mapper, mane_braf):
1219
1219
  """Test BRAF genomic_to_tx_segment and
1220
1220
  tx_segment_to_genomic.
@@ -1248,7 +1248,7 @@ async def test_braf(test_egc_mapper, mane_braf):
1248
1248
  genomic_tx_seg_service_checks(t_to_g_resp, expected)
1249
1249
 
1250
1250
 
1251
- @pytest.mark.asyncio()
1251
+ @pytest.mark.asyncio
1252
1252
  async def test_wee1(test_egc_mapper, wee1_exon2_exon11, mane_wee1_exon2_exon11):
1253
1253
  """Test WEE1 genomic_to_tx_segment and
1254
1254
  tx_segment_to_genomic.
@@ -1312,7 +1312,7 @@ async def test_wee1(test_egc_mapper, wee1_exon2_exon11, mane_wee1_exon2_exon11):
1312
1312
  genomic_tx_seg_service_checks(t_to_g_resp, mane_wee1_exon2_exon11)
1313
1313
 
1314
1314
 
1315
- @pytest.mark.asyncio()
1315
+ @pytest.mark.asyncio
1316
1316
  async def test_transcript_to_genomic(
1317
1317
  test_egc_mapper,
1318
1318
  tpm3_exon1_g,
@@ -1398,7 +1398,7 @@ async def test_transcript_to_genomic(
1398
1398
  genomic_tx_seg_service_checks(resp, expected)
1399
1399
 
1400
1400
 
1401
- @pytest.mark.asyncio()
1401
+ @pytest.mark.asyncio
1402
1402
  async def test_valid_inputs(test_egc_mapper, eln_grch38_intronic):
1403
1403
  """Test that valid inputs don"t return any errors"""
1404
1404
  inputs = {
@@ -1462,7 +1462,7 @@ async def test_valid_inputs(test_egc_mapper, eln_grch38_intronic):
1462
1462
  genomic_tx_seg_service_checks(resp, eln_grch38_intronic)
1463
1463
 
1464
1464
 
1465
- @pytest.mark.asyncio()
1465
+ @pytest.mark.asyncio
1466
1466
  async def test_invalid(test_egc_mapper):
1467
1467
  """Test that invalid queries return `None`."""
1468
1468
  resp = await test_egc_mapper.genomic_to_tx_segment(
@@ -232,7 +232,7 @@ def test_p_to_c_pos(test_mane_transcript):
232
232
  assert c_pos == (2241, 2252)
233
233
 
234
234
 
235
- @pytest.mark.asyncio()
235
+ @pytest.mark.asyncio
236
236
  async def test_p_to_c(test_mane_transcript):
237
237
  """Test that _p_to_c method works correctly."""
238
238
  # Amino Acid Substitution
@@ -271,7 +271,7 @@ async def test_p_to_c(test_mane_transcript):
271
271
  assert pos == expected_pos
272
272
 
273
273
 
274
- @pytest.mark.asyncio()
274
+ @pytest.mark.asyncio
275
275
  async def test_c_to_g(test_mane_transcript, nm_004333v6_g):
276
276
  """Test that _c_to_g method works correctly."""
277
277
  tx_ac = "NM_004333.6"
@@ -279,7 +279,7 @@ async def test_c_to_g(test_mane_transcript, nm_004333v6_g):
279
279
  assert g == nm_004333v6_g
280
280
 
281
281
 
282
- @pytest.mark.asyncio()
282
+ @pytest.mark.asyncio
283
283
  async def test_g_to_c(
284
284
  test_mane_transcript, braf_mane_data, nm_004333v6_g, braf_v600e_mane_c
285
285
  ):
@@ -308,7 +308,7 @@ def test_set_liftover(test_mane_transcript, genomic_tx_data):
308
308
  assert cpy == expected
309
309
 
310
310
 
311
- @pytest.mark.asyncio()
311
+ @pytest.mark.asyncio
312
312
  async def test_liftover_to_38(test_mane_transcript, genomic_tx_data):
313
313
  """Test that liftover_to_38 works correctly."""
314
314
  cpy = genomic_tx_data.copy(deep=True)
@@ -326,7 +326,7 @@ def test_get_mane_p(test_mane_transcript, braf_mane_data, braf_v600e_mane_p):
326
326
  assert mane_p == braf_v600e_mane_p
327
327
 
328
328
 
329
- @pytest.mark.asyncio()
329
+ @pytest.mark.asyncio
330
330
  async def test_p_to_mane_p(test_mane_transcript, braf_v600e_mane_p, egfr_l858r_mane_p):
331
331
  """Test that p_to_mane_p method works correctly."""
332
332
  # BRAF V600E RefSeq Accessions
@@ -404,7 +404,7 @@ async def test_p_to_mane_p(test_mane_transcript, braf_v600e_mane_p, egfr_l858r_m
404
404
  )
405
405
 
406
406
 
407
- @pytest.mark.asyncio()
407
+ @pytest.mark.asyncio
408
408
  async def test_c_to_mane_c(test_mane_transcript, braf_v600e_mane_c, egfr_l858r_mane_c):
409
409
  """Test that c_to_mane_p method works correctly."""
410
410
  # BRAF V600E RefSeq Accessions
@@ -503,7 +503,7 @@ def test_get_prioritized_transcripts_from_gene(
503
503
  assert resp == ["NM_004333.6", "NM_001374258.2", "NM_001378472.1"]
504
504
 
505
505
 
506
- @pytest.mark.asyncio()
506
+ @pytest.mark.asyncio
507
507
  async def test_get_longest_compatible_transcript(test_mane_transcript):
508
508
  """Test that get_longest_compatible_transcript method works as expected"""
509
509
  mane_transcripts = {
@@ -669,7 +669,7 @@ async def test_get_longest_compatible_transcript(test_mane_transcript):
669
669
  )
670
670
 
671
671
 
672
- @pytest.mark.asyncio()
672
+ @pytest.mark.asyncio
673
673
  async def test_g_to_grch38(test_mane_transcript, grch38_egfr, grch38_braf):
674
674
  """Test that g_to_grch38 method works correctly."""
675
675
  resp = await test_mane_transcript.g_to_grch38(
@@ -705,7 +705,7 @@ async def test_g_to_grch38(test_mane_transcript, grch38_egfr, grch38_braf):
705
705
  assert resp == grch38_braf
706
706
 
707
707
 
708
- @pytest.mark.asyncio()
708
+ @pytest.mark.asyncio
709
709
  async def test_g_to_mane_c(test_mane_transcript, egfr_l858r_mane_c, braf_v600e_mane_c):
710
710
  """Test that g_to_mane_c method works correctly."""
711
711
  mane_c = await test_mane_transcript.g_to_mane_c(
@@ -789,7 +789,7 @@ async def test_g_to_mane_c(test_mane_transcript, egfr_l858r_mane_c, braf_v600e_m
789
789
  )
790
790
 
791
791
 
792
- @pytest.mark.asyncio()
792
+ @pytest.mark.asyncio
793
793
  async def test_grch38_to_mane_c_p(
794
794
  test_mane_transcript,
795
795
  braf_v600e_mane_p,
@@ -913,7 +913,7 @@ async def test_grch38_to_mane_c_p(
913
913
  assert resp is None
914
914
 
915
915
 
916
- @pytest.mark.asyncio()
916
+ @pytest.mark.asyncio
917
917
  async def test_valid(test_mane_transcript):
918
918
  """Test that valid queries do not raise any exceptions"""
919
919
  resp = await test_mane_transcript.get_mane_transcript(
@@ -937,7 +937,7 @@ async def test_valid(test_mane_transcript):
937
937
  assert resp
938
938
 
939
939
 
940
- @pytest.mark.asyncio()
940
+ @pytest.mark.asyncio
941
941
  async def test_no_matches(test_mane_transcript):
942
942
  """Test that invalid queries return None."""
943
943
  # Invalid ENST version
@@ -44,7 +44,7 @@ def data_from_result():
44
44
  return GenomicTxData(**params)
45
45
 
46
46
 
47
- @pytest.mark.asyncio()
47
+ @pytest.mark.asyncio
48
48
  async def test_get_cds_start_end(test_db):
49
49
  """Test that get_cds_start_end works correctly."""
50
50
  expected = (61, 2362)
@@ -58,7 +58,7 @@ async def test_get_cds_start_end(test_db):
58
58
  assert resp is None
59
59
 
60
60
 
61
- @pytest.mark.asyncio()
61
+ @pytest.mark.asyncio
62
62
  async def test_get_newest_assembly_ac(test_db):
63
63
  """Test that get_newest_assembly_ac works correctly."""
64
64
  resp = await test_db.get_newest_assembly_ac("NC_000007.13")
@@ -77,7 +77,7 @@ async def test_get_newest_assembly_ac(test_db):
77
77
  assert resp == []
78
78
 
79
79
 
80
- @pytest.mark.asyncio()
80
+ @pytest.mark.asyncio
81
81
  async def test_validate_genomic_ac(test_db):
82
82
  """Test that validate_genomic_ac"""
83
83
  resp = await test_db.validate_genomic_ac("NC_000007.13")
@@ -87,7 +87,7 @@ async def test_validate_genomic_ac(test_db):
87
87
  assert resp is False
88
88
 
89
89
 
90
- @pytest.mark.asyncio()
90
+ @pytest.mark.asyncio
91
91
  async def test_validate_gene_exists(test_db):
92
92
  """Test validate_gene_symbol"""
93
93
  resp = await test_db.gene_exists("TPM3")
@@ -97,7 +97,7 @@ async def test_validate_gene_exists(test_db):
97
97
  assert resp is False
98
98
 
99
99
 
100
- @pytest.mark.asyncio()
100
+ @pytest.mark.asyncio
101
101
  async def test_validate_transcript_exists(test_db):
102
102
  """Tests validate_transcript"""
103
103
  resp = await test_db.transcript_exists("NM_152263.3")
@@ -107,7 +107,7 @@ async def test_validate_transcript_exists(test_db):
107
107
  assert resp is False
108
108
 
109
109
 
110
- @pytest.mark.asyncio()
110
+ @pytest.mark.asyncio
111
111
  async def test_get_ac_descr(test_db):
112
112
  """Test that get_ac_descr works correctly."""
113
113
  resp = await test_db.get_ac_descr("NC_000007.13")
@@ -117,7 +117,7 @@ async def test_get_ac_descr(test_db):
117
117
  assert resp is None
118
118
 
119
119
 
120
- @pytest.mark.asyncio()
120
+ @pytest.mark.asyncio
121
121
  async def test_get_tx_exon_aln_v_data(test_db, tx_exon_aln_v_data):
122
122
  """Test that get_tx_exon_aln_v_data"""
123
123
  resp = await test_db.get_tx_exon_aln_v_data(
@@ -165,14 +165,14 @@ async def test_get_tx_exon_aln_v_data(test_db, tx_exon_aln_v_data):
165
165
  ]
166
166
 
167
167
 
168
- @pytest.mark.asyncio()
168
+ @pytest.mark.asyncio
169
169
  async def test_data_from_result(test_db, tx_exon_aln_v_data, data_from_result):
170
170
  """Test that data_from_result works correctly."""
171
171
  resp = test_db.data_from_result(tx_exon_aln_v_data)
172
172
  assert resp == data_from_result
173
173
 
174
174
 
175
- @pytest.mark.asyncio()
175
+ @pytest.mark.asyncio
176
176
  async def test_mane_c_genomic_data(test_db):
177
177
  """Test that get_mane_c_genomic_data works correctly."""
178
178
  resp = await test_db.get_mane_c_genomic_data(
@@ -196,7 +196,7 @@ async def test_mane_c_genomic_data(test_db):
196
196
  assert resp == GenomicTxMetadata(**expected_params)
197
197
 
198
198
 
199
- @pytest.mark.asyncio()
199
+ @pytest.mark.asyncio
200
200
  async def test_get_genomic_tx_data(test_db, genomic_tx_data):
201
201
  """Test that get_genomic_tx_data works correctly."""
202
202
  resp = await test_db.get_genomic_tx_data("NM_004333.4", (2145, 2145))
@@ -216,7 +216,7 @@ async def test_get_genomic_tx_data(test_db, genomic_tx_data):
216
216
  assert resp == GenomicTxMetadata(**expected_params)
217
217
 
218
218
 
219
- @pytest.mark.asyncio()
219
+ @pytest.mark.asyncio
220
220
  async def test_get_ac_from_gene(test_db):
221
221
  """Test that get_ac_from_gene works correctly."""
222
222
  resp = await test_db.get_ac_from_gene("BRAF")
@@ -229,7 +229,7 @@ async def test_get_ac_from_gene(test_db):
229
229
  assert resp == []
230
230
 
231
231
 
232
- @pytest.mark.asyncio()
232
+ @pytest.mark.asyncio
233
233
  async def test_get_gene_from_ac(test_db):
234
234
  """Tet that get_gene_from_ac works correctly."""
235
235
  resp = await test_db.get_gene_from_ac("NC_000007.13", 140453136, None)
@@ -245,7 +245,7 @@ async def test_get_gene_from_ac(test_db):
245
245
  assert resp is None
246
246
 
247
247
 
248
- @pytest.mark.asyncio()
248
+ @pytest.mark.asyncio
249
249
  async def test_get_transcripts_from_gene(test_db):
250
250
  """Test that get_transcripts works correctly."""
251
251
  resp = await test_db.get_transcripts(start_pos=2145, end_pos=2145, gene="BRAF")
@@ -281,7 +281,7 @@ async def test_get_transcripts_from_gene(test_db):
281
281
  assert len(resp) == 0
282
282
 
283
283
 
284
- @pytest.mark.asyncio()
284
+ @pytest.mark.asyncio
285
285
  async def test_get_chr_assembly(test_db):
286
286
  """Test that get_chr_assembly works correctly."""
287
287
  resp = await test_db.get_chr_assembly("NC_000007.13")
@@ -295,7 +295,7 @@ async def test_get_chr_assembly(test_db):
295
295
  assert resp is None
296
296
 
297
297
 
298
- @pytest.mark.asyncio()
298
+ @pytest.mark.asyncio
299
299
  async def test_p_to_c_ac(test_db):
300
300
  """Test that p_to_c_ac works correctly."""
301
301
  resp = await test_db.p_to_c_ac("NP_004324.2")
@@ -308,7 +308,7 @@ async def test_p_to_c_ac(test_db):
308
308
  assert resp == []
309
309
 
310
310
 
311
- @pytest.mark.asyncio()
311
+ @pytest.mark.asyncio
312
312
  async def test_get_alt_ac_start_or_end(
313
313
  test_db, tpm3_1_8_start_genomic, tpm3_1_8_end_genomic
314
314
  ):
@@ -330,7 +330,7 @@ async def test_get_alt_ac_start_or_end(
330
330
  )
331
331
 
332
332
 
333
- @pytest.mark.asyncio()
333
+ @pytest.mark.asyncio
334
334
  async def test_get_mane_transcripts_from_genomic_pos(test_db):
335
335
  """Test that get_mane_transcripts_from_genomic_pos works correctly"""
336
336
  resp = await test_db.get_transcripts_from_genomic_pos("NC_000007.14", 140753336)
File without changes
File without changes
File without changes