about summary refs log tree commit diff
path: root/gn_auth/auth/authorisation
diff options
context:
space:
mode:
Diffstat (limited to 'gn_auth/auth/authorisation')
-rw-r--r--gn_auth/auth/authorisation/resources/inbredset/__init__.py1
-rw-r--r--gn_auth/auth/authorisation/resources/inbredset/views.py37
2 files changed, 38 insertions, 0 deletions
diff --git a/gn_auth/auth/authorisation/resources/inbredset/__init__.py b/gn_auth/auth/authorisation/resources/inbredset/__init__.py
new file mode 100644
index 0000000..7ca14a0
--- /dev/null
+++ b/gn_auth/auth/authorisation/resources/inbredset/__init__.py
@@ -0,0 +1 @@
+"""InbredSet resources."""
diff --git a/gn_auth/auth/authorisation/resources/inbredset/views.py b/gn_auth/auth/authorisation/resources/inbredset/views.py
new file mode 100644
index 0000000..c3669e6
--- /dev/null
+++ b/gn_auth/auth/authorisation/resources/inbredset/views.py
@@ -0,0 +1,37 @@
+"""Views for InbredSet resources."""
+from flask import jsonify, Response, Blueprint
+
+from gn_auth.auth.db import sqlite3 as db
+from gn_auth.auth.db.sqlite3 import with_db_connection
+from gn_auth.auth.authentication.oauth2.resource_server import require_oauth
+
+iset = Blueprint("inbredset", __name__)
+
+@iset.route("/resource-id/<int:speciesid>/<int:inbredsetid>")
+def resource_id_by_inbredset_id(speciesid: int, inbredsetid: int) -> Response:
+    """Retrieve the resource ID for resource attached to the inbredset."""
+    def __res_by_iset_id__(conn):
+        with db.cursor(conn) as cursor:
+            cursor.execute(
+                "SELECT r.resource_id FROM linked_inbredset_groups AS lisg "
+                "INNER JOIN inbredset_group_resources AS isgr "
+                "ON lisg.data_link_id=isgr.data_link_id "
+                "INNER JOIN resources AS r ON isgr.resource_id=r.resource_id "
+                "WHERE lisg.SpeciesId=? AND lisg.InbredSetId=?",
+                (speciesid, inbredsetid))
+            return cursor.fetchone()
+
+    res = with_db_connection(__res_by_iset_id__)
+    if res:
+        resp = jsonify({"status": "success", "resource-id": res["resource_id"]})
+    else:
+        resp = jsonify({
+            "status": "not-found",
+            "error_description": (
+                "Could not find resource handling InbredSet group with ID "
+                f"'{inbredsetid}' that belongs to Species with ID "
+                f"'{speciesid}'")
+        })
+        resp.status_code = 404
+
+    return resp