def test_unchanged_database_record(self): """tests unchanged record via the Readable and Writable DataStore interface to TinyDB""" from cogent3.app.io import load_db from copy import deepcopy loader = load_db() data = self.data original_record = deepcopy(data) with TemporaryDirectory(dir=".") as dirname: path = os.path.join(dirname, self.basedir) dstore = self.WriteClass(path, if_exists="overwrite") id_ = dstore.make_relative_identifier(list(data).pop(0)) m = dstore.write(id_, data) data.pop(set(data.keys()).pop()) got = loader(m) self.assertNotEqual(got, data) self.assertEqual(got, original_record) data = deepcopy(original_record) m = dstore.write(id_, data) data[set(data.keys()).pop()] = None got = loader(m) self.assertNotEqual(got, data) self.assertEqual(got, original_record) data = deepcopy(original_record) m = dstore.write(id_, data) data.clear() got = loader(m) self.assertNotEqual(got, data) self.assertEqual(got, original_record) dstore.close()
def test_bootstrap_composability(self): """can be composed with load_db and write_db""" m1 = evo_app.model("F81") m2 = evo_app.model("HKY85") hyp = evo_app.hypothesis(m1, m2) with TemporaryDirectory(dir=".") as dirname: path = join(dirname, "delme.tinydb") _ = io.load_db() + evo_app.bootstrap( hyp, num_reps=2) + io.write_db(path)
def test_write_db_load_db2(self): """correctly write/load built-in python from tinydb""" with TemporaryDirectory(dir=".") as dirname: outpath = join(dirname, "delme") writer = write_db(outpath, create=True, if_exists="ignore") data = dict(a=[1, 2], b="string") m = writer(data, identifier=join("blah", "delme.json")) writer.data_store.db.close() dstore = io_app.get_data_store(f"{outpath}.tinydb", suffix="json") reader = io_app.load_db() got = reader(dstore[0]) dstore.close() self.assertEqual(got, data)
def test_write_db_load_db(self): """correctly write/load from tinydb""" # straight directory with TemporaryDirectory(dir=".") as dirname: outpath = join(dirname, "delme") writer = write_db(outpath, create=True, if_exists="ignore") gr = _get_generic_result(join("blah", "delme.json")) got = writer(gr) writer.data_store.db.close() dstore = io_app.get_data_store(f"{outpath}.tinydb", suffix="json") reader = io_app.load_db() got = reader(dstore[0]) dstore.close() got.deserialised_values() self.assertIsInstance(got["dna"], DNA.__class__) self.assertEqual(got["dna"], DNA)
def test_write_db_load_db(self): """correctly write/load from tinydb""" # straight directory with TemporaryDirectory(dir=".") as dirname: outpath = join(dirname, "delme") writer = write_db(outpath, create=True, if_exists="ignore") mock = patch("data.source", autospec=True) mock.to_json = DNA.to_json mock.source = join("blah", "delme.json") got = writer(mock) writer.data_store.db.close() dstore = io_app.get_data_store(f"{outpath}.tinydb", suffix="json") reader = io_app.load_db() got = reader(dstore[0]) dstore.close() self.assertIsInstance(got, DNA.__class__) self.assertEqual(got, DNA)
def test_load_db_failure_json_file(self): """informative load_db error message when given a json file path""" # todo this test has a trapped exception about being unable to delete # a file with TemporaryDirectory(dir=".") as dirname: outpath = join(dirname, "delme") writer = write_db(outpath, create=True, if_exists="ignore") gr = _get_generic_result(join("blah", "delme.json")) got = writer(gr) writer.data_store.db.close() dstore = io_app.get_data_store(f"{outpath}.tinydb", suffix="json") reader = io_app.load_db() outpath = join(dirname, "dummy.json") with open(outpath, mode="w") as outfile: outfile.write("\n\n") got = reader(outpath) self.assertIsInstance(got, NotCompleted) self.assertTrue("json" in got.message)