Skip to content

Commit a30b10e

Browse files
jplfariacthoyt
andauthored
Add getter for SILVA (#69)
--------- Co-authored-by: Charles Tapley Hoyt <cthoyt@gmail.com>
1 parent 4e55236 commit a30b10e

3 files changed

Lines changed: 44 additions & 1 deletion

File tree

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ dependencies = [
6363
"more_click",
6464
"pyyaml",
6565
"tqdm",
66-
"bioregistry[align]>=0.10.0",
66+
"bioregistry[align]>=0.11.35",
6767
"lxml",
6868
"pydantic>=2.0",
6969
"psycopg2-binary",

src/bioversions/sources/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
from .rxnorm import RxNormGetter
6565
from .sgd import SgdGetter
6666
from .signor import SignorGetter
67+
from .silva import SILVAGetter
6768
from .slm import SwissLipidGetter
6869
from .stringdb import StringDBGetter
6970
from .umls import UMLSGetter
@@ -142,6 +143,7 @@ def get_getters() -> list[type[Getter]]:
142143
ICD11Getter,
143144
CiVICGetter,
144145
GTDBGetter,
146+
SILVAGetter,
145147
SignorGetter,
146148
]
147149
getters.extend(iter_obo_getters())

src/bioversions/sources/silva.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
"""A getter for SILVA."""
2+
3+
from datetime import datetime
4+
5+
import requests
6+
7+
from bioversions.utils import Getter, VersionType
8+
9+
__all__ = [
10+
"SILVAGetter",
11+
]
12+
13+
URL = "https://www.arb-silva.de/fileadmin/silva_databases/current/VERSION.txt"
14+
HEADER_FMT = "%a, %d %b %Y %H:%M:%S %Z"
15+
16+
17+
class SILVAGetter(Getter):
18+
"""A getter for the SILVA."""
19+
20+
bioregistry_id = "silva.taxon"
21+
name = "SILVA ribosomal RNA database"
22+
version_type = VersionType.sequential
23+
homepage_fmt = "https://www.arb-silva.de/"
24+
25+
def get(self):
26+
"""Get the latest SILVA version number from VERSION.txt."""
27+
res = requests.get(URL, timeout=15)
28+
29+
# Get version from the content
30+
rv = {"version": res.text.strip()}
31+
32+
# Get date from the Last-Modified header
33+
date_str = res.headers.get("Last-Modified")
34+
if date_str:
35+
rv["date"] = datetime.strptime(date_str, HEADER_FMT)
36+
37+
return rv
38+
39+
40+
if __name__ == "__main__":
41+
SILVAGetter.print()

0 commit comments

Comments
 (0)