def test_err_result(self): """excercise creation of NotCompletedResult""" result = NotCompleted("SKIP", "this", "some obj") self.assertFalse(result) self.assertEqual(result.origin, "this") self.assertEqual(result.message, "some obj") self.assertIs(result.source, None) # check source correctly deduced from provided object fake_source = Mock() fake_source.source = "blah" del fake_source.info result = NotCompleted("SKIP", "this", "err", source=fake_source) self.assertIs(result.source, "blah") fake_source = Mock() del fake_source.source fake_source.info.source = "blah" result = NotCompleted("SKIP", "this", "err", source=fake_source) self.assertIs(result.source, "blah") try: _ = 0 raise ValueError("error message") except ValueError as err: result = NotCompleted("SKIP", "this", err.args[0]) self.assertEqual(result.message, "error message")
def test_not_completed_result(self): """correctly reconstructs a NotCompletedResult object""" from cogent3.app.composable import NotCompleted val = NotCompleted("ERROR", "nothing", "some error", source="here") expect = val.to_rich_dict() json = val.to_json() got = deserialise_object(json) self.assertEqual(got.to_rich_dict(), expect)
def test_summary_methods(self): """produce a table""" from cogent3.app.composable import NotCompleted keys = list(self.data) incomplete = [ keys.pop(0), NotCompleted("FAIL", "somefunc", "checking", source="testing.txt"), ] with TemporaryDirectory(dir=".") as dirname: path = os.path.join(dirname, self.basedir) dstore = self.WriteClass(path, if_exists="overwrite") id_ = dstore.make_relative_identifier(incomplete[0]) dstore.write_incomplete(id_, incomplete[1]) for k in keys: id_ = dstore.make_relative_identifier(k) dstore.write(id_, self.data[k]) # now add a log file dstore.add_file("data" + os.sep + "scitrack.log", cleanup=False) got = dstore.describe # table has rows for completed, incomplete and log self.assertEqual(got.shape, (3, 2)) # log summary has a row per log file and a column for each property got = dstore.summary_logs self.assertEqual(got.shape, (1, 6)) # incomplete summmary has a row per type and 5 columns got = dstore.summary_incomplete self.assertEqual(got.shape, (1, 5)) dstore.close()
def test_tiny_write_incomplete(self): """write an incomplete result to tinydb""" from cogent3.app.composable import NotCompleted keys = list(self.data) incomplete = [ keys.pop(0), NotCompleted("FAIL", "somefunc", "checking", source="testing.txt"), ] with TemporaryDirectory(dir=".") as dirname: path = os.path.join(dirname, self.basedir) dstore = self.WriteClass(path, if_exists="overwrite") id_ = dstore.make_relative_identifier(incomplete[0]) dstore.write_incomplete(id_, incomplete[1]) for k in keys: id_ = dstore.make_relative_identifier(k) dstore.write(id_, self.data[k]) dstore.close() # all records are contained dstore = self.ReadClass(path) for k in self.data: id_ = f"{k.split('.')[0]}.json" self.assertTrue(id_ in dstore) # but len(dstore) reflects only members with completed==True len_store = len(dstore) # but len(dstore.db) reflects all members self.assertEqual(len(dstore.db), len_store + 1) # the incomplete property contains the incomplete ones got = dstore.incomplete[0].read() self.assertTrue("notcompleted" in got["type"].lower()) dstore.close()
def test_not_completed_result(self): """should survive roundtripping pickle""" from pickle import dumps, loads err = NotCompleted("FAIL", "mytest", "can we roundtrip") p = dumps(err) new = loads(p) self.assertEqual(err.type, new.type) self.assertEqual(err.message, new.message) self.assertEqual(err.source, new.source) self.assertEqual(err.origin, new.origin)