def test_write_json_with_info(self): """correctly writes an object with info attribute from json""" # create a mock object that pretends like it's been derived from # something from cogent3.app.result import generic_result with TemporaryDirectory(dir=".") as dirname: outdir = join(dirname, "delme") obj = generic_result(source=join("blah", "delme.json")) obj["dna"] = DNA writer = io_app.write_json(outdir, create=True) _ = writer(obj) reader = io_app.load_json() got = reader(join(outdir, "delme.json")) got.deserialised_values() self.assertEqual(got["dna"], DNA) # now with a zipped archive with TemporaryDirectory(dir=".") as dirname: outdir = join(dirname, "delme.zip") obj = generic_result(source=join("blah", "delme.json")) obj["dna"] = DNA writer = io_app.write_json(outdir, create=True) identifier = writer(obj) reader = io_app.load_json() got = reader(writer.data_store[0]) got.deserialised_values() self.assertEqual(got["dna"], DNA) expect = join(outdir.replace(".zip", ""), "delme.json") if expect.startswith("." + os.sep): expect = expect[2:] self.assertEqual(identifier, expect)
def test_keys(self): """it works""" data = {"type": "cogent3.core.moltype.MolType", "moltype": "dna"} result = generic_result(source="blah.json") result["key"] = data keys = result.keys() self.assertEqual(keys, ["key"])
def test_repr_str(self): """it works""" data = {"type": "cogent3.core.moltype.MolType", "moltype": "dna"} result = generic_result(source="blah.json") result["key"] = data r = repr(result) s = str(result)
def test_roundtrip_tuple_key(self): """deserialise_result handles tuples as keys""" from cogent3.app.result import generic_result r = generic_result(source="none") r[(1, 2)] = 24 got = deserialise_object(r.to_json()) self.assertEqual(got[(1, 2)], 24)
def test_deserialised_values(self): """correctly deserialises values""" from cogent3 import DNA data = {"type": "cogent3.core.moltype.MolType", "moltype": "dna"} result = generic_result(source="blah.json") result["key"] = data result.deserialised_values() got = result["key"] self.assertEqual(got, DNA) # if we have a type value without "cogent3", leaves as is data = {"type": "core.moltype.MolType", "moltype": "dna"} result = generic_result(source="blah.json") result["key"] = data result.deserialised_values() got = result["key"] self.assertEqual(got, data) # or if no "type" entry, leaves as is data = {"moltype": "dna"} result = generic_result(source="blah.json") result["key"] = data result.deserialised_values() got = result["key"] self.assertEqual(got, data)
def test_write_json_with_info(self): """correctly writes an object with info attribute from json""" # create a mock object that pretends like it's been derived from # something from cogent3.app.result import generic_result with TemporaryDirectory(dir=".") as dirname: outdir = join(dirname, "delme") obj = generic_result(source=join("blah", "delme.json")) obj["dna"] = DNA writer = io_app.write_json(outdir, create=True) _ = writer(obj) reader = io_app.load_json() got = reader(join(outdir, "delme.json")) got.deserialised_values() self.assertEqual(got["dna"], DNA)
def _get_generic_result(source): """creates a generic result with a DNA moltype as the single value""" gr = generic_result(source=source) gr["dna"] = DNA return gr
def test_invalid_setitem(self): """generic_result raise TypeError if trying to set invalid item type for json""" gr = generic_result("null") with self.assertRaises(TypeError): gr["null"] = {0, 23}