about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMuriithi Frederick Muriuki2021-07-23 05:34:59 +0300
committerMuriithi Frederick Muriuki2021-07-23 05:34:59 +0300
commitb08bf586d653d2243d8bc7a321227f287ce99a74 (patch)
treee2153b1f5fb1795c8a07171623fbe0a65eba6a63
parentf10c18757a097f310c011c54f31a9a4bc6e47ce5 (diff)
downloadgenenetwork3-b08bf586d653d2243d8bc7a321227f287ce99a74.tar.gz
New function (`slink`): return [] on exception
Issue:
https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/clustering.gmi

* gn3/computations/slink.py: Add minimum code to pass new test
* tests/unit/computations/test_slink.py: new test

  Add test to ensure that the new `slink` function return an empty list in
  case and exception is raised.

  Add the new `slink` function with minimum amount of code needed to pass the
  test.
-rw-r--r--gn3/computations/slink.py12
-rw-r--r--tests/unit/computations/test_slink.py6
2 files changed, 18 insertions, 0 deletions
diff --git a/gn3/computations/slink.py b/gn3/computations/slink.py
index c29ddb0..103a853 100644
--- a/gn3/computations/slink.py
+++ b/gn3/computations/slink.py
@@ -6,6 +6,7 @@ FUNCTIONS:
 slink:
     TODO: Describe what the function does...
 """
+import logging
 from functools import partial
 
 class LengthError(BaseException):
@@ -116,3 +117,14 @@ def nearest(lists, i, j):
         return min(ns)
     else:
         raise ValueError("member values (i or j) should be lists/tuples of integers or integers")
+
+def slink(lists):
+    """
+    """
+    try:
+        nearest(lists, 1, 2)
+    except Exception as e:
+        # TODO: Look into making the logging log output to the system's
+        #    configured logger(s)
+        logging.warning("Exception: {}, {}".format(type(e), e))
+        return []
diff --git a/tests/unit/computations/test_slink.py b/tests/unit/computations/test_slink.py
index dd42d5d..bdfaf6d 100644
--- a/tests/unit/computations/test_slink.py
+++ b/tests/unit/computations/test_slink.py
@@ -2,6 +2,7 @@
 import unittest
 from unittest import TestCase
 
+from gn3.computations.slink import slink
 from gn3.computations.slink import nearest
 from gn3.computations.slink import LengthError
 from gn3.computations.slink import MirrorError
@@ -200,3 +201,8 @@ class TestSlink(TestCase):
                     expected_distance=ed):
                 self.assertEqual(nearest(md, ml, mc), ed)
                 self.assertEqual(nearest(md, mc, ml), ed)
+
+    def test_slink_wrong_data_returns_empty_list(self):
+        for data in [1, "test", [], 2.945, nearest]:
+            with self.subTest(data=data):
+                self.assertEqual(slink(data), [])