Repository: cthoyt/ols-client

Issue:
Access to SBO terms not possible
I am trying to use your tool to look up the specification of different SBO terms automatically. 

```Python
from ols_client import EBIClient

client = EBIClient()

```
When I then browse through the `sbo` ontology it seems to me that the IRI of any SBO term looks like `http://biomodels.net/SBO/SBO_0000150`. Entering such an IRI leads to a 404 Client error because 

```Python
c.get_term('sbo', 'http://biomodels.net/SBO/SBO_0000150')
```
leads to a lookup of `https://www.ebi.ac.uk/ols/api/ontologies/sbo/terms/http://biomodels.net/SBO/SBO_0000658` which is obviously not a valid url. 

I tried only using the number `150`, the SBO Term ID as written in my model `SBO:0000150` and as shown above `SBO_0000150`. None of these versions work. Maybe I am missing something and this is quite easy to solve. 

Discussion:

Patch:
diff --git a/src/ols_client/client.py b/src/ols_client/client.py
index 2888a72..6c3f068 100644
--- a/src/ols_client/client.py
+++ b/src/ols_client/client.py
@@ -87,7 +87,8 @@ class Client:
             params = {}
         if path.startswith(self.base_url):
             path = path[len(self.base_url) :]
-        res = requests.get(self.base_url + "/" + path.lstrip("/"), params=params, **kwargs)
+        url = self.base_url + "/" + path.lstrip("/")
+        res = requests.get(url, params=params, **kwargs)
         if raise_for_status:
             res.raise_for_status()
         return res
@@ -148,7 +149,7 @@ class Client:
         :param iri: The IRI of a term
         :returns: Results about the term
         """
-        return self.get_json(f"/ontologies/{ontology}/terms/{iri}")
+        return self.get_json(f"/ontologies/{ontology}/terms", params={"iri": iri})
 
     def search(self, query: str, query_fields: Optional[Iterable[str]] = None, params=None):
         """Search the OLS with the given term.
diff --git a/tox.ini b/tox.ini
index 89cdff7..8d4c5c9 100644
--- a/tox.ini
+++ b/tox.ini
@@ -78,7 +78,7 @@ description = Check that the MANIFEST.in is written properly and give feedback o
 skip_install = true
 deps =
     darglint
-    flake8
+    flake8<5.0.0
     flake8-black
     flake8-bandit
     flake8-bugbear
@@ -144,7 +144,7 @@ commands =
     python -m sphinx -W -b coverage -d {envtmpdir}/build/doctrees {envtmpdir}/source {envtmpdir}/build/coverage
     cat {envtmpdir}/build/coverage/c.txt
     cat {envtmpdir}/build/coverage/python.txt
-whitelist_externals =
+allowlist_externals =
     /bin/cp
     /bin/cat
     /bin/mkdir
@@ -214,5 +214,5 @@ commands =
     git push --tags
     bump2version patch
     git push
-whitelist_externals =
+allowlist_externals =
     /usr/bin/git


Test patch:
diff --git a/tests/test_ols_client.py b/tests/test_ols_client.py
index e6c99fa..b602bd4 100644
--- a/tests/test_ols_client.py
+++ b/tests/test_ols_client.py
@@ -12,3 +12,12 @@ class TestEbi(cases.TestClient):
     client_cls = EBIClient
     test_ontology = "aro"
     test_label = "CMY-167"
+
+    def test_get_term(self):
+        """Test getting a term."""
+        iri = "http://biomodels.net/SBO/SBO_0000150"
+        res_json = self.client.get_term("sbo", iri)
+        terms = res_json["_embedded"]["terms"]
+        self.assertEqual(1, len(terms))
+        term = terms[0]
+        self.assertEqual(iri, term["iri"])