55
66import bioregistry
77from bioregistry .external .ols import get_ols_processing
8- from bioregistry .resolve import get_name
98from class_resolver import ClassResolver
109
1110from bioversions .utils import Getter , VersionType
1514ols_processing = get_ols_processing ()
1615
1716
18- def _get_version_type (bioregistry_id : str ) -> VersionType | None :
19- ols_id = bioregistry .get_ols_prefix (bioregistry_id )
20- if ols_id is None :
21- raise ValueError (f"Missing OLS prefix for bioregistry:{ bioregistry_id } " )
17+ def _get_version_type (resource : bioregistry .Resource , ols_id : str ) -> VersionType | None :
2218 ols_config = ols_processing .get (ols_id )
2319 if ols_config is None :
2420 raise ValueError (
25- f"Missing OLS configuration for bioregistry:{ bioregistry_id } / ols:{ ols_id } "
21+ f"Missing OLS configuration for bioregistry:{ resource . prefix } / ols:{ ols_id } "
2622 )
2723
2824 ols_version_type = ols_config .version_type
@@ -32,60 +28,57 @@ def _get_version_type(bioregistry_id: str) -> VersionType | None:
3228 elif ols_version_type :
3329 return VersionType [ols_version_type .name ]
3430 else :
35- logger .warning ("[%s] missing version type" , bioregistry_id )
31+ logger .warning ("[%s] missing version type" , resource . prefix )
3632 return None
3733
3834
39- def make_ols_getter (bioregistry_id : str ) -> type [Getter ] | None :
35+ def make_ols_getter (resource : bioregistry . Resource ) -> type [Getter ] | None :
4036 """Make a getter from OLS."""
41- ols_id = bioregistry .get_ols_prefix (bioregistry_id )
37+ ols_id = resource .get_ols_prefix ()
4238 if ols_id is None :
4339 return None
4440
45- resource = bioregistry .get_resource (bioregistry_id )
46- if resource is None :
47- logger .warning (f"Invalid bioregistry prefix: { bioregistry_id } " )
48- return None
4941 if resource .ols is None :
50- logger . warning ( "[%s] Missing information in OLS" , bioregistry_id )
51- return None
42+ raise RuntimeError ( f" { resource . prefix } is mapped to OLS { ols_id } but is missing OLS data" )
43+
5244 version = resource .ols .get ("version" )
5345 if version is None :
54- logger .debug ("[%s] no OLS version" , bioregistry_id )
46+ logger .debug ("[%s] no OLS version" , resource )
5547 return None
56-
57- _brid = bioregistry_id
58- _name = get_name (_brid )
48+ _name = resource .get_name ()
5949 if _name is None :
6050 return None
61- _version_type = _get_version_type (bioregistry_id )
51+ _version_type = _get_version_type (resource , ols_id = ols_id )
6252 if _version_type is None :
6353 return None
6454
6555 class OlsGetter (Getter ):
6656 """A getter for OLS data from the Bioregistry."""
6757
68- bioregistry_id : ClassVar [str ] = _brid
69- name : ClassVar [str ] = _name
70- version_type : ClassVar [str ] = _version_type # type:ignore
58+ bioregistry_id : ClassVar [str ] = resource . prefix
59+ name : ClassVar [str ] = cast ( str , _name )
60+ version_type : ClassVar [VersionType ] = cast ( VersionType , _version_type )
7161
7262 def get (self ) -> str :
7363 """Get the version from the Bioregistry."""
7464 return cast (str , version )
7565
76- return type (f"{ _brid .title ()} Getter" , (OlsGetter ,), locals ())
66+ class_name = f"{ resource .prefix .title ()} Getter"
67+ return type (class_name , (OlsGetter ,), locals ())
7768
7869
7970def extend_ols (version_getter_resolver : ClassResolver [Getter ]) -> None :
8071 """Add OLS lookup."""
81- for bioregistry_id in bioregistry .read_registry ():
72+ for resource in bioregistry .resources ():
73+ if resource .provides or resource .has_canonical or resource .part_of :
74+ continue
8275 try :
83- version_getter_resolver .lookup (bioregistry_id )
76+ version_getter_resolver .lookup (resource . prefix )
8477 except KeyError :
8578 pass
8679 else :
8780 continue
88- getter = make_ols_getter (bioregistry_id )
81+ getter = make_ols_getter (resource )
8982 if getter is None :
9083 continue
9184 version_getter_resolver .register (getter )
0 commit comments