def test_add_with_out_of_bound_region(self): epidb = DeepBlueClient(address="localhost", port=31415) self.init_base(epidb) sample_id = self.sample_ids[0] regions_data = helpers.load_bed("hg18_out_of_bounds") _format = data_info.EXPERIMENTS["hg19_chr1_1"]["format"] res = epidb.add_experiment("test_exp1", "hg19", "Methylation", sample_id, "tech1", "ENCODE", "desc1", regions_data, _format, None, self.admin_key) self.assertFailure(res) res = epidb.add_experiment("test_exp1", "hg19", "Methylation", sample_id, "tech1", "ENCODE", "desc1", regions_data, _format, {"__trim_to_chromosome_size__": True}, self.admin_key) self.assertSuccess(res) res, q_exp = epidb.select_regions("test_exp1", "hg19", None, None, None, None, None, None, None, self.admin_key) res, req = epidb.get_regions(q_exp, _format, self.admin_key) data = self.get_regions_request(req) regions_data_okay = helpers.load_bed("hg18_out_of_bounds_okay") self.assertEqual(data, regions_data_okay)
def test_category_fail(self): epidb = DeepBlueClient(address="localhost", port=31415) self.init_base(epidb) sample_id = self.sample_ids[0] format = ",".join([ "CHROMOSOME", "START", "END", "NAME", "SCORE", "STRAND_X", "SIGNAL_VALUE", "P_VALUE", "Q_VALUE", "PEAK" ]) res = epidb.create_column_type_category("STRAND_X", "strand of the region", ["X", "-"], self.admin_key) self.assertSuccess(res) regions_data = helpers.load_bed("hg19_chr1_1") res, msg = epidb.add_experiment("test_exp_fail2", "hg19", "Methylation", sample_id, "tech1", "ENCODE", "desc1", regions_data, format, None, self.admin_key) self.assertFailure(res, msg) self.assertTrue("STRAND_X" in msg)
def test_remove_technique(self): epidb = DeepBlueClient(address="localhost", port=31415) self.init_base(epidb) sample_id = self.sample_ids[0] regions_data = helpers.load_bed("hg19_chr1_1") format = data_info.EXPERIMENTS["hg19_chr1_1"]["format"] (res, add_technique_id) = epidb.add_technique( "Hypster Technique", "I knew this technique before everybody else", {}, self.admin_key) self.assertSuccess(res, add_technique_id) # adding two experiments with the same data should work res, eid = epidb.add_experiment("test_exp1", "hg19", "Methylation", sample_id, "Hypster Technique", "ENCODE", "desc1", regions_data, format, None, self.admin_key) self.assertSuccess(res) res = epidb.remove(add_technique_id, self.admin_key) self.assertFailure(res) res = epidb.remove(eid, self.admin_key) self.assertSuccess(res) res = epidb.remove(add_technique_id, self.admin_key) self.assertSuccess(res)
def test_remove_epigenetic_mark(self): epidb = DeepBlueClient(address="localhost", port=31415) self.init_base(epidb) sample_id = self.sample_ids[0] regions_data = helpers.load_bed("hg19_chr1_1") format = data_info.EXPERIMENTS["hg19_chr1_1"]["format"] (res, epigenetic_mark_id) = epidb.add_epigenetic_mark( "H3K666ac3", "acetil metal \,,,/", {"category": "heavy histone metal"}, self.admin_key) self.assertSuccess(res, epigenetic_mark_id) # adding two experiments with the same data should work res, eid = epidb.add_experiment("test_exp1", "hg19", "H3K666ac3", sample_id, "tech1", "ENCODE", "desc1", regions_data, format, None, self.admin_key) self.assertSuccess(res) res = epidb.remove(epigenetic_mark_id, self.admin_key) self.assertFailure(res) res = epidb.remove(eid, self.admin_key) self.assertSuccess(res) res = epidb.remove(epigenetic_mark_id, self.admin_key) self.assertSuccess(res)
def test_remove_project(self): epidb = DeepBlueClient(address="localhost", port=31415) self.init_base(epidb) sample_id = self.sample_ids[0] regions_data = helpers.load_bed("hg19_chr1_1") format = data_info.EXPERIMENTS["hg19_chr1_1"]["format"] res, projects = epidb.list_projects(self.admin_key) # adding two experiments with the same data should work res, eid = epidb.add_experiment("test_exp1", "hg19", "Methylation", sample_id, "tech1", projects[0][1], "desc1", regions_data, format, None, self.admin_key) self.assertSuccess(res, eid) res = epidb.remove(projects[0][0], self.admin_key) self.assertFailure(res) res = epidb.remove(eid, self.admin_key) self.assertSuccess(res) res = epidb.remove(projects[0][0], self.admin_key) self.assertSuccess(res)
def test_double_experiment_same_user_fail(self): epidb = DeepBlueClient(address="localhost", port=31415) self.init_base(epidb) uid, user_key = self.insert_user(epidb, "test_user") s, tmp_user = epidb.modify_user_admin(uid, "permission_level", "INCLUDE_EXPERIMENTS", self.admin_key) self.assertSuccess(s) sample_id = self.sample_ids[0] regions_data = helpers.load_bed("hg19_chr1_1") format = data_info.EXPERIMENTS["hg19_chr1_1"]["format"] # adding the same experiments with different users should work exp = ("test_exp1", "hg19", "Methylation", sample_id, "tech1", "ENCODE", "desc1", regions_data, format, None) res = epidb.add_experiment(*(exp + (self.admin_key, ))) self.assertSuccess(res) res = epidb.add_experiment(*(exp + (user_key, ))) self.assertFailure(res) self.assertEqual( res[1], "102001:The experiment name 'test_exp1' is already being used.")
def test_add_with_invalid_epigenetic_mark(self): epidb = DeepBlueClient(address="localhost", port=31415) self.init_base(epidb) sample_id = self.sample_ids[0] regions_data = helpers.load_bed("hg19_chr1_1") format = data_info.EXPERIMENTS["hg19_chr1_1"]["format"] res = epidb.add_experiment("test_exp1", "hg19", "No Epigenetic ", sample_id, "tech1", "ENCODE", "desc1", regions_data, format, None, self.admin_key) self.assertFailure(res)
def test_experiments_pass(self): epidb = DeepBlueClient(address="localhost", port=31415) self.init_base(epidb) sample_id = self.sample_ids[0] regions_data = helpers.load_bed("hg19_chr1_1") format = data_info.EXPERIMENTS["hg19_chr1_1"]["format"] # adding two experiments with the same data should work res = epidb.add_experiment("test_exp1", "hg19", "Methylation", sample_id, "tech1", "ENCODE", "desc1", regions_data, format, None, self.admin_key) self.assertSuccess(res) res = epidb.add_experiment("test_exp2", "hg19", "Methylation", sample_id, "tech1", "ENCODE", "desc1", regions_data, format, None, self.admin_key) self.assertSuccess(res) res, experiments = epidb.list_experiments("hg19", "peaks", None, "NO_BIOSOURCE", None, None, None, self.admin_key) self.assertSuccess(res, experiments) self.assertEqual(len(experiments), 0) res, experiments = epidb.list_experiments(None, None, None, None, None, None, None, self.admin_key) self.assertSuccess(res, experiments) self.assertEqual(len(experiments), 2) res, experiments = epidb.list_experiments("hg19", "peaks", None, "K562", None, None, None, self.admin_key) self.assertSuccess(res, experiments) self.assertEqual(len(experiments), 2) experiments_names = [x[1] for x in experiments] self.assertTrue("test_exp1" in experiments_names) self.assertTrue("test_exp2" in experiments_names) s, ids = epidb.name_to_id(['test_exp1'], 'experiments', self.admin_key) self.assertEqual(ids, [['e1', 'test_exp1']]) s, ids = epidb.name_to_id(['test_exp1', 'test_exp2'], 'experiments', self.admin_key) self.assertEqual([['e1', 'test_exp1'], ['e2', 'test_exp2']], ids) s, ids = epidb.name_to_id('test_exp1', 'experiments', self.admin_key) self.assertEqual([['e1', 'test_exp1']], ids)
def test_double_experiment_fail(self): epidb = DeepBlueClient(address="localhost", port=31415) self.init_base(epidb) sample_id = self.sample_ids[0] regions_data = helpers.load_bed("hg19_chr1_1") format = data_info.EXPERIMENTS["hg19_chr1_1"]["format"] # adding the same experiment with the same user should fail exp = ("test_exp1", "hg19", "Methylation", sample_id, "tech1", "ENCODE", "desc1", regions_data, format, None) res = epidb.add_experiment(*(exp + (self.admin_key, ))) self.assertSuccess(res) res = epidb.add_experiment(*(exp + (self.admin_key, ))) self.assertFailure(res)
def test_experiments_preview(self): epidb = DeepBlueClient(address="localhost", port=31415) self.init_base(epidb) sample_id = self.sample_ids[0] regions_data = helpers.load_bed("hg19_chr1_1") format = data_info.EXPERIMENTS["hg19_chr1_1"]["format"] # adding two experiments with the same data should work res = epidb.add_experiment("test_exp1", "hg19", "Methylation", sample_id, "tech1", "ENCODE", "desc1", regions_data, format, None, self.admin_key) self.assertSuccess(res) status, preview = epidb.preview_experiment('test_exp1', self.admin_key) self.assertEqual( preview, 'CHROMOSOME\tSTART\tEND\tNAME\tSCORE\tSTRAND\tSIGNAL_VALUE\tP_VALUE\tQ_VALUE\tPEAK\nchr1\t713240\t713390\t.\t0.0000\t+\t21.0000\t69.6000\t-1.0000\t-1\nchr1\t713520\t713670\t.\t0.0000\t-\t21.0000\t22.4866\t-1.0000\t-1\nchr1\t713900\t714050\t.\t0.0000\t+\t59.0000\t71.2352\t-1.0000\t-1\nchr1\t714160\t714310\t.\t0.0000\t+\t22.0000\t101.8740\t-1.0000\t-1\nchr1\t714540\t714690\t.\t0.0000\t+\t77.0000\t105.3120\t-1.0000\t-1' )
def test_list_recent(self): epidb = DeepBlueClient(address="localhost", port=31415) self.init_base(epidb) sample_id = self.sample_ids[0] regions_data = helpers.load_bed("hg19_chr1_1") format = data_info.EXPERIMENTS["hg19_chr1_1"]["format"] res, eid1 = epidb.add_experiment("test_exp1", "hg19", "Methylation", sample_id, "tech1", "ENCODE", "desc1", regions_data, format, None, self.admin_key) self.assertSuccess(res, eid1) # get some distance in insertion times time.sleep(5) res, eid2 = epidb.add_experiment("test_exp2", "hg19", "Methylation", sample_id, "tech1", "ENCODE", "desc1", regions_data, format, None, self.admin_key) self.assertEqual(res, "okay") time.sleep(3) ago = 1.0 / 24 / 60 / 60 * 5 res, experiments = epidb.list_recent_experiments( ago, "hg19", None, None, None, None, self.admin_key) self.assertSuccess(res, experiments) experiments_names = [x[1] for x in experiments] self.assertTrue("test_exp1" not in experiments_names) self.assertTrue("test_exp2" in experiments_names) res, experiments = epidb.list_recent_experiments( 1.0, "hg19", None, None, None, None, self.admin_key) self.assertSuccess(res, experiments) experiments_names = [x[1] for x in experiments] self.assertTrue("test_exp1" in experiments_names) self.assertTrue("test_exp2" in experiments_names)
def test_experiment_metadata(self): epidb = DeepBlueClient(address="localhost", port=31415) self.init_base(epidb) sample_id = self.sample_ids[0] regions_data = helpers.load_bed("hg19_chr1_1") format = data_info.EXPERIMENTS["hg19_chr1_1"]["format"] res, eid1 = epidb.add_experiment("test_exp1", "hg19", "Methylation", sample_id, "tech1", "ENCODE", "desc1", regions_data, format, {"source": "ncbi"}, self.admin_key) self.assertSuccess(res, eid1) res, eid2 = epidb.add_experiment("test_exp2", "hg19", "Methylation", sample_id, "tech1", "ENCODE", "desc1", regions_data, format, {"source":"encode"}, self.admin_key) self.assertSuccess(res, eid2) res, ids = epidb.search("ncbi", "Experiments", self.admin_key) self.assertSuccess(res, ids) self.assertEqual(ids[0][0], eid1) # Should be the first because the "encode" name appears twice (project and extra metadata) res, ids = epidb.search("encode", "experiments", self.admin_key) self.assertSuccess(res, ids) self.assertEqual(ids[0][0], eid2)