bioversions 0.7.40__tar.gz → 0.7.41__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 (84) hide show
  1. {bioversions-0.7.40 → bioversions-0.7.41}/PKG-INFO +5 -19
  2. {bioversions-0.7.40 → bioversions-0.7.41}/README.md +4 -10
  3. {bioversions-0.7.40 → bioversions-0.7.41}/pyproject.toml +54 -8
  4. bioversions-0.7.41/src/bioversions/__main__.py +6 -0
  5. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/charts.py +10 -10
  6. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/cli.py +7 -7
  7. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/resources/update.py +1 -8
  8. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/resources/versions.json +83 -4
  9. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/slack_client.py +3 -1
  10. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/__init__.py +30 -4
  11. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/biogrid.py +3 -3
  12. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/expasy.py +1 -1
  13. bioversions-0.7.41/src/bioversions/sources/flybase.py +38 -0
  14. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/guidetopharmacology.py +3 -1
  15. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/kegg.py +7 -4
  16. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/moalmanac.py +4 -3
  17. bioversions-0.7.41/src/bioversions/sources/ncit.py +33 -0
  18. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/npass.py +4 -2
  19. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/pathbank.py +6 -8
  20. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/pathwaycommons.py +5 -5
  21. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/rxnorm.py +3 -2
  22. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/umls.py +6 -10
  23. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/utils.py +9 -1
  24. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/version.py +2 -1
  25. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/wsgi.py +3 -3
  26. bioversions-0.7.40/src/bioversions/__main__.py +0 -6
  27. bioversions-0.7.40/src/bioversions/sources/flybase.py +0 -32
  28. bioversions-0.7.40/src/bioversions/sources/ncit.py +0 -39
  29. bioversions-0.7.40/src/bioversions/twitter_client.py +0 -45
  30. {bioversions-0.7.40 → bioversions-0.7.41}/LICENSE +0 -0
  31. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/__init__.py +0 -0
  32. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/py.typed +0 -0
  33. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/resources/__init__.py +0 -0
  34. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/antibodyregistry.py +0 -0
  35. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/bigg.py +0 -0
  36. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/cellosaurus.py +0 -0
  37. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/chebi.py +0 -0
  38. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/chembl.py +0 -0
  39. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/chemidplus.py +0 -0
  40. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/civic.py +0 -0
  41. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/complexportal.py +0 -0
  42. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/daily.py +0 -0
  43. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/depmap.py +0 -0
  44. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/dgi.py +0 -0
  45. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/disgenet.py +0 -0
  46. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/drugbank.py +0 -0
  47. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/drugcentral.py +0 -0
  48. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/ensembl.py +0 -0
  49. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/gtdb.py +0 -0
  50. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/hgnc.py +0 -0
  51. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/homologene.py +0 -0
  52. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/icd10.py +0 -0
  53. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/icd11.py +0 -0
  54. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/icf.py +0 -0
  55. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/intact.py +0 -0
  56. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/interpro.py +0 -0
  57. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/itis.py +0 -0
  58. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/mesh.py +0 -0
  59. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/mgi.py +0 -0
  60. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/mirbase.py +0 -0
  61. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/msigdb.py +0 -0
  62. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/obo.py +0 -0
  63. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/ols.py +0 -0
  64. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/omim.py +0 -0
  65. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/oncotree.py +0 -0
  66. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/pfam.py +0 -0
  67. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/pombase.py +0 -0
  68. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/pr.py +0 -0
  69. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/pubchem.py +0 -0
  70. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/reactome.py +0 -0
  71. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/rfam.py +0 -0
  72. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/rgd.py +0 -0
  73. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/rhea.py +0 -0
  74. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/sgd.py +0 -0
  75. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/signor.py +0 -0
  76. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/silva.py +0 -0
  77. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/slm.py +0 -0
  78. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/stringdb.py +0 -0
  79. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/uniprot.py +0 -0
  80. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/unversioned.py +0 -0
  81. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/wikipathways.py +0 -0
  82. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/sources/zfin.py +0 -0
  83. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/templates/base.html +0 -0
  84. {bioversions-0.7.40 → bioversions-0.7.41}/src/bioversions/templates/home.html +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bioversions
3
- Version: 0.7.40
3
+ Version: 0.7.41
4
4
  Summary: Get the current version for biological databases
5
5
  Keywords: snekpack,cookiecutter,databases,biological databases,biomedical databases
6
6
  Author: Charles Tapley Hoyt
@@ -39,13 +39,7 @@ Requires-Dist: pydantic>=2.0
39
39
  Requires-Dist: psycopg2-binary
40
40
  Requires-Dist: matplotlib ; extra == 'charts'
41
41
  Requires-Dist: seaborn ; extra == 'charts'
42
- Requires-Dist: sphinx>=8 ; extra == 'docs'
43
- Requires-Dist: sphinx-rtd-theme>=3.0 ; extra == 'docs'
44
- Requires-Dist: sphinx-click ; extra == 'docs'
45
- Requires-Dist: sphinx-automodapi ; extra == 'docs'
46
42
  Requires-Dist: slack-sdk ; extra == 'slack'
47
- Requires-Dist: pytest ; extra == 'tests'
48
- Requires-Dist: coverage[toml] ; extra == 'tests'
49
43
  Requires-Dist: tweepy ; extra == 'twitter'
50
44
  Requires-Dist: flask ; extra == 'web'
51
45
  Requires-Dist: bootstrap-flask ; extra == 'web'
@@ -58,9 +52,7 @@ Project-URL: Funding, https://github.com/sponsors/cthoyt
58
52
  Project-URL: Homepage, https://github.com/biopragmatics/bioversions
59
53
  Project-URL: Repository, https://github.com/biopragmatics/bioversions.git
60
54
  Provides-Extra: charts
61
- Provides-Extra: docs
62
55
  Provides-Extra: slack
63
- Provides-Extra: tests
64
56
  Provides-Extra: twitter
65
57
  Provides-Extra: web
66
58
  Description-Content-Type: text/markdown
@@ -173,18 +165,15 @@ $ python3 -m pip install bioversions
173
165
  The most recent code and data can be installed directly from GitHub with uv:
174
166
 
175
167
  ```console
176
- $ uv --preview pip install git+https://github.com/biopragmatics/bioversions.git
168
+ $ uv pip install git+https://github.com/biopragmatics/bioversions.git
177
169
  ```
178
170
 
179
171
  or with pip:
180
172
 
181
173
  ```console
182
- $ UV_PREVIEW=1 python3 -m pip install git+https://github.com/biopragmatics/bioversions.git
174
+ $ python3 -m pip install git+https://github.com/biopragmatics/bioversions.git
183
175
  ```
184
176
 
185
- Note that this requires setting `UV_PREVIEW` mode enabled until the uv build
186
- backend becomes a stable feature.
187
-
188
177
  ## 👐 Contributing
189
178
 
190
179
  Contributions, whether filing an issue, making a pull request, or forking, are
@@ -247,18 +236,15 @@ To install in development mode, use the following:
247
236
  ```console
248
237
  $ git clone git+https://github.com/biopragmatics/bioversions.git
249
238
  $ cd bioversions
250
- $ uv --preview pip install -e .
239
+ $ uv pip install -e .
251
240
  ```
252
241
 
253
242
  Alternatively, install using pip:
254
243
 
255
244
  ```console
256
- $ UV_PREVIEW=1 python3 -m pip install -e .
245
+ $ python3 -m pip install -e .
257
246
  ```
258
247
 
259
- Note that this requires setting `UV_PREVIEW` mode enabled until the uv build
260
- backend becomes a stable feature.
261
-
262
248
  ### Updating Package Boilerplate
263
249
 
264
250
  This project uses `cruft` to keep boilerplate (i.e., configuration, contribution
@@ -106,18 +106,15 @@ $ python3 -m pip install bioversions
106
106
  The most recent code and data can be installed directly from GitHub with uv:
107
107
 
108
108
  ```console
109
- $ uv --preview pip install git+https://github.com/biopragmatics/bioversions.git
109
+ $ uv pip install git+https://github.com/biopragmatics/bioversions.git
110
110
  ```
111
111
 
112
112
  or with pip:
113
113
 
114
114
  ```console
115
- $ UV_PREVIEW=1 python3 -m pip install git+https://github.com/biopragmatics/bioversions.git
115
+ $ python3 -m pip install git+https://github.com/biopragmatics/bioversions.git
116
116
  ```
117
117
 
118
- Note that this requires setting `UV_PREVIEW` mode enabled until the uv build
119
- backend becomes a stable feature.
120
-
121
118
  ## 👐 Contributing
122
119
 
123
120
  Contributions, whether filing an issue, making a pull request, or forking, are
@@ -180,18 +177,15 @@ To install in development mode, use the following:
180
177
  ```console
181
178
  $ git clone git+https://github.com/biopragmatics/bioversions.git
182
179
  $ cd bioversions
183
- $ uv --preview pip install -e .
180
+ $ uv pip install -e .
184
181
  ```
185
182
 
186
183
  Alternatively, install using pip:
187
184
 
188
185
  ```console
189
- $ UV_PREVIEW=1 python3 -m pip install -e .
186
+ $ python3 -m pip install -e .
190
187
  ```
191
188
 
192
- Note that this requires setting `UV_PREVIEW` mode enabled until the uv build
193
- backend becomes a stable feature.
194
-
195
189
  ### Updating Package Boilerplate
196
190
 
197
191
  This project uses `cruft` to keep boilerplate (i.e., configuration, contribution
@@ -1,12 +1,10 @@
1
1
  [build-system]
2
- requires = ["uv>=0.5.13,<0.6.0"]
3
- # The uv backend entered preview mode in https://github.com/astral-sh/uv/pull/8886/files
4
- # with the 0.5.0 release. See also https://github.com/astral-sh/uv/issues/3957 for tracking.
5
- build-backend = "uv"
2
+ requires = ["uv_build>=0.6.6,<0.7"]
3
+ build-backend = "uv_build"
6
4
 
7
5
  [project]
8
6
  name = "bioversions"
9
- version = "0.7.40"
7
+ version = "0.7.41"
10
8
  description = "Get the current version for biological databases"
11
9
  readme = "README.md"
12
10
  authors = [
@@ -69,7 +67,8 @@ dependencies = [
69
67
  "psycopg2-binary",
70
68
  ]
71
69
 
72
- [project.optional-dependencies]
70
+ # see https://peps.python.org/pep-0735/ and https://docs.astral.sh/uv/concepts/dependencies/#dependency-groups
71
+ [dependency-groups]
73
72
  tests = [
74
73
  "pytest",
75
74
  "coverage[toml]",
@@ -77,9 +76,53 @@ tests = [
77
76
  docs = [
78
77
  "sphinx>=8",
79
78
  "sphinx-rtd-theme>=3.0",
80
- "sphinx-click",
79
+ "sphinx-click",
81
80
  "sphinx_automodapi",
82
81
  ]
82
+ lint = [
83
+ "ruff",
84
+ ]
85
+ typing = [
86
+ { include-group = "tests" },
87
+ "mypy",
88
+ "pydantic",
89
+ "types-PyYAML",
90
+ "types-python-dateutil",
91
+ "types-requests",
92
+ "types-tabulate",
93
+ ]
94
+ docs-lint = [
95
+ { include-group = "docs" },
96
+ "doc8",
97
+ ]
98
+ format-docs = [
99
+ { include-group = "docs" },
100
+ "docstrfmt",
101
+ ]
102
+ doctests = [
103
+ "xdoctest",
104
+ "pygments",
105
+ ]
106
+ pyroma = [
107
+ "pyroma",
108
+ "pygments",
109
+ ]
110
+ # follow https://github.com/astral-sh/uv/issues/6298 for switching to a uv-based version bump workflow
111
+ bump = [
112
+ "bump-my-version",
113
+ ]
114
+ build = [
115
+ "uv",
116
+ "uv-build",
117
+ ]
118
+ release = [
119
+ { include-group = "build" },
120
+ "uv",
121
+ "keyring",
122
+ ]
123
+
124
+ # see https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#dependencies-optional-dependencies
125
+ [project.optional-dependencies]
83
126
  slack = [
84
127
  "slack_sdk",
85
128
  ]
@@ -138,6 +181,9 @@ source = [
138
181
  omit = [
139
182
  "tests/*",
140
183
  "docs/*",
184
+ "src/bioversions/version.py",
185
+ "src/bioversions/__main__.py",
186
+ "src/bioversions/cli.py",
141
187
  ]
142
188
 
143
189
  [tool.coverage.paths]
@@ -214,7 +260,7 @@ known-first-party = [
214
260
  docstring-code-format = true
215
261
 
216
262
  [tool.bumpversion]
217
- current_version = "0.7.40"
263
+ current_version = "0.7.41"
218
264
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)(?:-(?P<release>[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+(?P<build>[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?"
219
265
  serialize = [
220
266
  "{major}.{minor}.{patch}-{release}+{build}",
@@ -0,0 +1,6 @@
1
+ """Entrypoint module, in case you use `python -m bioversions`."""
2
+
3
+ from .cli import main
4
+
5
+ if __name__ == "__main__":
6
+ main()
@@ -13,13 +13,13 @@ from bioversions.utils import IMG, VersionType
13
13
  sns.set(style="whitegrid")
14
14
 
15
15
 
16
- def version_types_pie_chart():
16
+ def version_types_pie_chart() -> None:
17
17
  """Make a pie chart with types of versions."""
18
- counts = Counter(
18
+ counter = Counter(
19
19
  "Missing" if getter.version_type is None else getter.version_type.value
20
20
  for getter in get_getters()
21
21
  )
22
- labels, counts = zip(*counts.most_common(), strict=False)
22
+ labels, counts = zip(*counter.most_common(), strict=False)
23
23
  fig, ax = plt.subplots()
24
24
  ax.pie(
25
25
  counts,
@@ -34,14 +34,14 @@ def version_types_pie_chart():
34
34
  plt.close(fig)
35
35
 
36
36
 
37
- def verioning_date_formats_pie_chart():
37
+ def verioning_date_formats_pie_chart() -> None:
38
38
  """Make a pie chart with types of date/month versions."""
39
- counts = Counter(
39
+ counter = Counter(
40
40
  getter.date_version_fmt
41
41
  for getter in get_getters()
42
42
  if getter.version_type in {VersionType.date, VersionType.month}
43
43
  )
44
- labels, counts = zip(*counts.most_common(), strict=False)
44
+ labels, counts = zip(*counter.most_common(), strict=False)
45
45
  fig, ax = plt.subplots()
46
46
  ax.pie(
47
47
  counts,
@@ -56,14 +56,14 @@ def verioning_date_formats_pie_chart():
56
56
  plt.close(fig)
57
57
 
58
58
 
59
- def has_release_url():
59
+ def has_release_url() -> None:
60
60
  """Make a pie chart for how many have a release URL."""
61
- counts = Counter(
61
+ counter = Counter(
62
62
  "Has Stable Version URL" if getter.homepage_fmt is not None else "No Stable Version URL"
63
63
  for getter in get_getters()
64
64
  if getter.version_type != VersionType.unversioned
65
65
  )
66
- labels, counts = zip(*counts.most_common(), strict=False)
66
+ labels, counts = zip(*counter.most_common(), strict=False)
67
67
  fig, ax = plt.subplots()
68
68
  ax.pie(
69
69
  counts,
@@ -79,7 +79,7 @@ def has_release_url():
79
79
 
80
80
 
81
81
  @click.command()
82
- def charts():
82
+ def charts() -> None:
83
83
  """Generate charts for bioversions."""
84
84
  version_types_pie_chart()
85
85
  verioning_date_formats_pie_chart()
@@ -1,4 +1,4 @@
1
- """Command line interface for bioversions."""
1
+ """Command line interface for :mod:`bioversions`."""
2
2
 
3
3
  import click
4
4
  from click_default_group import DefaultGroup
@@ -10,7 +10,7 @@ from bioversions.resources.update import update
10
10
 
11
11
  @click.group(cls=DefaultGroup, default="web", default_if_no_args=True)
12
12
  @click.version_option()
13
- def main():
13
+ def main() -> None:
14
14
  """The bioversions CLI.""" # noqa:D401
15
15
 
16
16
 
@@ -25,19 +25,19 @@ web = make_web_command(
25
25
  )
26
26
 
27
27
 
28
- @main.command()
28
+ @main.command() # type:ignore
29
29
  @click.argument("key")
30
- @verbose_option
31
- def get(key: str):
30
+ @verbose_option # type:ignore
31
+ def get(key: str) -> None:
32
32
  """Print the version."""
33
33
  from . import get_version
34
34
 
35
35
  click.echo(get_version(key))
36
36
 
37
37
 
38
- @main.command()
38
+ @main.command() # type:ignore
39
39
  @click.option("--terse", "-t", is_flag=True)
40
- def ls(terse: bool):
40
+ def ls(terse: bool) -> None:
41
41
  """List versions."""
42
42
  from . import get_rows
43
43
 
@@ -29,7 +29,7 @@ def _get_clean_dict(d):
29
29
 
30
30
  @click.command()
31
31
  @click.option("--force", is_flag=True)
32
- def update(force: bool):
32
+ def update(force: bool) -> None:
33
33
  """Update the data file."""
34
34
  with logging_redirect_tqdm():
35
35
  _update(force=force)
@@ -123,13 +123,6 @@ def _log_update(bv) -> None:
123
123
  else:
124
124
  slack_client.post(text)
125
125
 
126
- try:
127
- from .. import twitter_client
128
- except ImportError:
129
- pass
130
- else:
131
- twitter_client.post(text)
132
-
133
126
 
134
127
  if __name__ == "__main__":
135
128
  update()
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "annotations": {
3
- "revision": 941,
4
- "date": "2025-03-06",
3
+ "revision": 942,
4
+ "date": "2025-03-20",
5
5
  "author": "runner"
6
6
  },
7
7
  "database": [
@@ -334,6 +334,11 @@
334
334
  "retrieved": "2025-03-05",
335
335
  "version": "2025-03-05",
336
336
  "homepage": "https://antibodyregistry.org/"
337
+ },
338
+ {
339
+ "retrieved": "2025-03-20",
340
+ "version": "2025-03-19",
341
+ "homepage": "https://antibodyregistry.org/"
337
342
  }
338
343
  ],
339
344
  "name": "Antibody Registry",
@@ -2190,6 +2195,10 @@
2190
2195
  {
2191
2196
  "retrieved": "2025-02-27",
2192
2197
  "version": "2.238"
2198
+ },
2199
+ {
2200
+ "retrieved": "2025-03-20",
2201
+ "version": "2.239"
2193
2202
  }
2194
2203
  ],
2195
2204
  "vtype": "date"
@@ -4095,7 +4104,7 @@
4095
4104
  },
4096
4105
  {
4097
4106
  "name": "ExPASy",
4098
- "prefix": "eccode",
4107
+ "prefix": "ec",
4099
4108
  "releases": [
4100
4109
  {
4101
4110
  "retrieved": "2021-01-02",
@@ -4342,6 +4351,10 @@
4342
4351
  {
4343
4352
  "retrieved": "2025-02-27",
4344
4353
  "version": "4.195"
4354
+ },
4355
+ {
4356
+ "retrieved": "2025-03-20",
4357
+ "version": "4.196"
4345
4358
  }
4346
4359
  ],
4347
4360
  "vtype": "date"
@@ -4853,6 +4866,10 @@
4853
4866
  {
4854
4867
  "retrieved": "2025-01-28",
4855
4868
  "version": "2025-01-14"
4869
+ },
4870
+ {
4871
+ "retrieved": "2025-03-20",
4872
+ "version": "2025-02-28"
4856
4873
  }
4857
4874
  ],
4858
4875
  "vtype": "date"
@@ -4988,7 +5005,7 @@
4988
5005
  ],
4989
5006
  "name": "FlyBase",
4990
5007
  "prefix": "flybase",
4991
- "vtype": "date"
5008
+ "vtype": "month"
4992
5009
  },
4993
5010
  {
4994
5011
  "releases": [
@@ -5909,6 +5926,11 @@
5909
5926
  "retrieved": "2025-02-12",
5910
5927
  "version": "2025-02-04",
5911
5928
  "homepage": "https://storage.googleapis.com/public-download-files/hgnc/archive/archive/monthly/json/hgnc_complete_set_2025-02-04.json"
5929
+ },
5930
+ {
5931
+ "retrieved": "2025-03-20",
5932
+ "version": "2025-03-04",
5933
+ "homepage": "https://storage.googleapis.com/public-download-files/hgnc/archive/archive/monthly/json/hgnc_complete_set_2025-03-04.json"
5912
5934
  }
5913
5935
  ],
5914
5936
  "name": "HGNC",
@@ -5999,6 +6021,10 @@
5999
6021
  {
6000
6022
  "retrieved": "2024-09-01",
6001
6023
  "version": "2024-08-19"
6024
+ },
6025
+ {
6026
+ "retrieved": "2025-03-20",
6027
+ "version": "2025-02-24"
6002
6028
  }
6003
6029
  ],
6004
6030
  "vtype": "semver"
@@ -7231,6 +7257,10 @@
7231
7257
  {
7232
7258
  "retrieved": "2025-02-27",
7233
7259
  "version": "4.1.190"
7260
+ },
7261
+ {
7262
+ "retrieved": "2025-03-20",
7263
+ "version": "4.1.191"
7234
7264
  }
7235
7265
  ],
7236
7266
  "name": "Mass spectrometry ontology",
@@ -7928,6 +7958,12 @@
7928
7958
  "version": "2025-02-07",
7929
7959
  "homepage": "https://github.com/vanallenlab/moalmanac-db/releases/tag/v.2025-02-07",
7930
7960
  "date": "2025-02-07"
7961
+ },
7962
+ {
7963
+ "retrieved": "2025-03-20",
7964
+ "version": "2025-03-06",
7965
+ "homepage": "https://github.com/vanallenlab/moalmanac-db/releases/tag/v.2025-03-06",
7966
+ "date": "2025-03-06"
7931
7967
  }
7932
7968
  ],
7933
7969
  "name": "Molecular Oncology Almanac",
@@ -8529,6 +8565,11 @@
8529
8565
  "retrieved": "2024-12-12",
8530
8566
  "version": "24.11d",
8531
8567
  "date": "2024-11-25"
8568
+ },
8569
+ {
8570
+ "retrieved": "2025-03-20",
8571
+ "version": "25.03c",
8572
+ "date": "2025-03-17"
8532
8573
  }
8533
8574
  ],
8534
8575
  "name": "National Cancer Institute Thesaurus",
@@ -9899,6 +9940,10 @@
9899
9940
  {
9900
9941
  "retrieved": "2025-03-06",
9901
9942
  "version": "2025-03-04"
9943
+ },
9944
+ {
9945
+ "retrieved": "2025-03-20",
9946
+ "version": "2025-03-18"
9902
9947
  }
9903
9948
  ],
9904
9949
  "name": "Online Mendelian Inheritance in Man",
@@ -10753,6 +10798,10 @@
10753
10798
  {
10754
10799
  "retrieved": "2025-02-27",
10755
10800
  "version": "2.0.58"
10801
+ },
10802
+ {
10803
+ "retrieved": "2025-03-20",
10804
+ "version": "2.0.59"
10756
10805
  }
10757
10806
  ],
10758
10807
  "name": "Ontology of units of Measure",
@@ -12537,6 +12586,10 @@
12537
12586
  {
12538
12587
  "retrieved": "2025-03-04",
12539
12588
  "version": "2025-02-28"
12589
+ },
12590
+ {
12591
+ "retrieved": "2025-03-20",
12592
+ "version": "2025-03-14"
12540
12593
  }
12541
12594
  ],
12542
12595
  "name": "Rat Genome Database",
@@ -12642,6 +12695,10 @@
12642
12695
  {
12643
12696
  "retrieved": "2025-02-27",
12644
12697
  "version": "6.242"
12698
+ },
12699
+ {
12700
+ "retrieved": "2025-03-20",
12701
+ "version": "6.243"
12645
12702
  }
12646
12703
  ],
12647
12704
  "vtype": "date"
@@ -16109,6 +16166,10 @@
16109
16166
  {
16110
16167
  "retrieved": "2025-03-06",
16111
16168
  "version": "2025-03-06"
16169
+ },
16170
+ {
16171
+ "retrieved": "2025-03-20",
16172
+ "version": "2025-03-20"
16112
16173
  }
16113
16174
  ],
16114
16175
  "name": "SwissLipids",
@@ -16604,6 +16665,10 @@
16604
16665
  {
16605
16666
  "retrieved": "2025-02-27",
16606
16667
  "version": "2025-02-22"
16668
+ },
16669
+ {
16670
+ "retrieved": "2025-03-20",
16671
+ "version": "2025-02-23"
16607
16672
  }
16608
16673
  ],
16609
16674
  "name": "The Statistical Methods Ontology",
@@ -17197,6 +17262,10 @@
17197
17262
  {
17198
17263
  "retrieved": "2025-01-05",
17199
17264
  "version": "2024-12-29"
17265
+ },
17266
+ {
17267
+ "retrieved": "2025-03-20",
17268
+ "version": "2025-02-26"
17200
17269
  }
17201
17270
  ],
17202
17271
  "vtype": "semver"
@@ -17732,6 +17801,12 @@
17732
17801
  "version": "20250210",
17733
17802
  "homepage": "http://data.wikipathways.org/20250210/",
17734
17803
  "date": "2025-02-10"
17804
+ },
17805
+ {
17806
+ "retrieved": "2025-03-20",
17807
+ "version": "20250310",
17808
+ "homepage": "http://data.wikipathways.org/20250310/",
17809
+ "date": "2025-03-10"
17735
17810
  }
17736
17811
  ],
17737
17812
  "vtype": "date"
@@ -21431,6 +21506,10 @@
21431
21506
  {
21432
21507
  "retrieved": "2025-03-06",
21433
21508
  "version": "2025-03-04"
21509
+ },
21510
+ {
21511
+ "retrieved": "2025-03-20",
21512
+ "version": "2025-03-19"
21434
21513
  }
21435
21514
  ],
21436
21515
  "name": "Zebrafish Information Network",
@@ -6,6 +6,7 @@ from functools import lru_cache
6
6
  import pystow
7
7
  from slack_sdk import WebClient
8
8
  from slack_sdk.errors import SlackApiError
9
+ from slack_sdk.web import SlackResponse
9
10
 
10
11
  __all__ = [
11
12
  "post",
@@ -22,7 +23,7 @@ def _get_client(token: str | None = None) -> WebClient | None:
22
23
  return WebClient(token=token)
23
24
 
24
25
 
25
- def post(text: str, channel: str = "random", token: str | None = None):
26
+ def post(text: str, channel: str = "random", token: str | None = None) -> SlackResponse | None:
26
27
  """Post the message to a given Slack channel."""
27
28
  client = _get_client(token)
28
29
  if client is None:
@@ -40,6 +41,7 @@ def post(text: str, channel: str = "random", token: str | None = None):
40
41
  if not e.response["ok"]:
41
42
  raise ValueError('Response is not "ok"') from e
42
43
  logger.warning(f"Got an error: {e.response['error']}")
44
+ return None
43
45
  else:
44
46
  return response
45
47
 
@@ -7,7 +7,7 @@ import logging
7
7
  import traceback
8
8
  from collections.abc import Iterable, Mapping
9
9
  from functools import lru_cache
10
- from typing import NamedTuple
10
+ from typing import Literal, NamedTuple, overload
11
11
 
12
12
  from tqdm import tqdm
13
13
 
@@ -186,9 +186,35 @@ def _resolve_helper(name: str) -> Bioversion:
186
186
  return getter.resolve()
187
187
 
188
188
 
189
- def get_version(name: str) -> str:
190
- """Resolve a database name to its version string."""
191
- return resolve(name).version
189
+ # docstr-coverage:excused `overload`
190
+ @overload
191
+ def get_version(name: str, *, strict: Literal[True] = True) -> str: ...
192
+
193
+
194
+ # docstr-coverage:excused `overload`
195
+ @overload
196
+ def get_version(name: str, *, strict: Literal[False] = False) -> str | None: ...
197
+
198
+
199
+ def get_version(name: str, *, strict: bool = True) -> str | None:
200
+ """Resolve a database name to its version string.
201
+
202
+ :param name:
203
+ The name of the resource to get the version from. Often, this is a Bioregistry
204
+ prefix, but sometimes can be an ad-hoc key for a database.
205
+ :param strict:
206
+ Re-raises errors in version resolution by default. Set explicitly to
207
+ ``false`` to return None on errors.
208
+ :return: The version of the resource as a string
209
+ """
210
+ try:
211
+ rv = resolve(name).version
212
+ except Exception:
213
+ if strict:
214
+ raise
215
+ return None
216
+ else:
217
+ return rv
192
218
 
193
219
 
194
220
  def get_rows(use_tqdm: bool | None = False) -> list[Bioversion]:
@@ -1,6 +1,6 @@
1
1
  """A getter for BioGRID."""
2
2
 
3
- from ..utils import Getter, VersionType, get_soup
3
+ from ..utils import Getter, VersionType, find, get_soup
4
4
 
5
5
  __all__ = [
6
6
  "BioGRIDGetter",
@@ -20,8 +20,8 @@ class BioGRIDGetter(Getter):
20
20
  def get(self) -> str:
21
21
  """Get the latest BioGRID version number."""
22
22
  soup = get_soup(URL)
23
- manifest = soup.find(id="manifestDesc")
24
- header = manifest.find("h2")
23
+ manifest = find(soup, id="manifestDesc")
24
+ header = find(manifest, "h2")
25
25
  return header.text[len("BioGRID Release ") :]
26
26
 
27
27
 
@@ -16,7 +16,7 @@ URL = "https://ftp.expasy.org/databases/enzyme/enzuser.txt"
16
16
  class ExPASyGetter(Getter):
17
17
  """A getter for ExPASy."""
18
18
 
19
- bioregistry_id = "eccode"
19
+ bioregistry_id = "ec"
20
20
  name = "ExPASy"
21
21
  version_type = VersionType.date
22
22