def test_search_down_no_output_files_does_not_raise(mocker): """ Regression test related to PIP-1163. If the current file being searched does not have any output files, then the _search_down should not throw an error in the call to reduce(), and instead yield nothing. """ mocker.patch( "builtins.open", mocker.mock_open(read_data='{"workflowRoot": "gs://foo/bar"}') ) analysis = Analysis(MetaData("foo"), auto_populate=False, backend="") no_outputs_task = Task("foo", {"inputs": {"bar": "gs://baz"}, "outputs": {}}) result = list(analysis._search_down(no_outputs_task, "searching_for", "a_file")) assert result == []
def mock_accession_unreplicated( mocker: MockFixture, mock_accession_gc_backend: MockGCBackend, mock_metadata: MockMetaData, lab: str, award: str, ) -> Accession: """ Mocked accession instance with dummy __init__ that doesn't do anything and pre-baked assembly property. @properties must be patched before instantiation """ mocker.patch.object( Accession, "experiment", new_callable=PropertyMock( return_value=EncodeExperiment( { "@id": "foo", "assay_term_name": "microRNA", "replicates": [{"biological_replicate_number": 1}], } ) ), ) mocked_accession = AccessionMicroRna( "imaginary_steps.json", Analysis(mock_metadata, backend=mock_accession_gc_backend), "mock_server.biz", EncodeCommonMetadata(lab, award), no_log_file=True, ) return mocked_accession
def test_invalid_metadata_raises(): """ Trying to create an Analysis from invalid JSON should raise an error. """ current_dir = Path(__file__).resolve() metadata_json = current_dir.parent / "data" / "invalid_metadata.json" with pytest.raises(Exception): Analysis(metadata_json)
def mock_accession( mocker: MockFixture, mock_accession_gc_backend: MockGCBackend, mock_metadata: MockMetaData, mock_accession_steps: MockAccessionSteps, server_name: str, common_metadata: EncodeCommonMetadata, ) -> Accession: """ Mocked accession instance with dummy __init__ that doesn't do anything and pre-baked assembly property. @properties must be patched before instantiation """ mocker.patch.object( AccessionMicroRna, "assembly", new_callable=PropertyMock(return_value="hg19") ) mocker.patch.object( AccessionMicroRna, "genome_annotation", new_callable=PropertyMock(return_value="V19"), ) mocker.patch.object( Accession, "experiment", new_callable=PropertyMock( return_value=EncodeExperiment( { "@id": "foo", "assay_term_name": "microRNA", "replicates": [ {"biological_replicate_number": 1}, {"biological_replicate_number": 2}, ], "analyses": [{"files": ["/files/1/"]}], } ) ), ) mocker.patch.object(Accession, "preflight_helper", new_callable=PropertyMock()) mocked_accession = AccessionMicroRna( mock_accession_steps, Analysis(mock_metadata, backend=mock_accession_gc_backend), create_autospec(Connection, dcc_url=server_name), common_metadata, no_log_file=True, ) return mocked_accession
def mock_accession_chip( mocker: MockFixture, mock_accession_gc_backend: MockGCBackend, mock_metadata: MockMetaData, mock_accession_steps: MockAccessionSteps, server_name: str, common_metadata: EncodeCommonMetadata, ) -> Accession: """ Mocked accession instance with dummy __init__ that doesn't do anything and pre-baked assembly property. @properties must be patched before instantiation """ mocker.patch.object( AccessionChip, "assembly", new_callable=PropertyMock(return_value="hg19") ) mocker.patch.object( AccessionChip, "genome_annotation", new_callable=PropertyMock(return_value="V19"), ) mocker.patch.object( Accession, "experiment", new_callable=PropertyMock( return_value=EncodeExperiment( { "@id": "foo", "assay_term_name": "TF ChIP-seq", "replicates": [ {"biological_replicate_number": 1}, {"biological_replicate_number": 2}, ], } ) ), ) mocked_accession = AccessionChip( mock_accession_steps, Analysis(mock_metadata, backend=mock_accession_gc_backend), server_name, common_metadata, no_log_file=True, ) return mocked_accession
def mock_accession_not_patched( mocker, mock_accession_gc_backend, mock_metadata, mock_accession_steps, server_name, common_metadata, mock_file, ): mocker.patch.object( Analysis, "raw_fastqs", new_callable=PropertyMock(return_value=[mock_file]) ) mock_accession = AccessionMicroRna( mock_accession_steps, Analysis(mock_metadata, backend=mock_accession_gc_backend), create_autospec(Connection, dcc_url=server_name), common_metadata, no_log_file=True, ) return mock_accession
def empty_analysis(mock_gc_backend, metadata_json_path): # noqa: F811 empty = Analysis( MetaData(metadata_json_path), auto_populate=False, backend=mock_gc_backend ) return empty
def test_search_up_disallow_tasks( mock_metadata, mock_gc_backend, condition, disallow_tasks, expected ): metadata = { "workflowRoot": "gs://foo/bar/", "calls": { "chip.bam2ta": [ { "dockerImageUsed": "arch:latest", "inputs": {"bam": "gs://foo/bar/ENCFF295YVN.nodup.bam"}, "outputs": { "ta": "gs://foo/bar/call-bam2ta/shard-0/glob-35/ENCFF295YVN.nodup.tagAlign.gz" }, }, { "dockerImageUsed": "arch:latest", "inputs": {"bam": "gs://foo/bar/ENCFF279HDE.nodup.bam"}, "outputs": { "ta": "gs://foo/bar/call-bam2ta/shard-1/glob-35/ENCFF279HDE.nodup.tagAlign.gz" }, }, ], "chip.macs2_signal_track": [ { "dockerImageUsed": "arch:latest", "inputs": { "tas": [ "gs://foo/bar/call-bam2ta/shard-0/glob-35/ENCFF295YVN.nodup.tagAlign.gz", "gs://foo/bar/call-choose_ctl/glob-99/ctl_for_rep1.tagAlign.gz", ] }, "outputs": { "fc_bw": "gs://foo/bar/call-macs2_signal_track/shard-0/glob-10/ENCFF295YVN.bigwig", "pval_bw": "gs://foo/bar/call-macs2_signal_track/shard-0/glob-89/ENCFF295YVN.bigwig", }, } ], "chip.choose_ctl": [ { "dockerImageUsed": "arch:latest", "inputs": { "tas": [ "gs://foo/bar/call-bam2ta/shard-0/glob-35/ENCFF295YVN.nodup.tagAlign.gz", "gs://foo/bar/call-bam2ta/shard-1/glob-35/ENCFF279HDE.nodup.tagAlign.gz", ] }, "outputs": { "chosen_ctl_tas": [ "gs://foo/bar/call-choose_ctl/glob-99/ctl_for_rep1.tagAlign.gz", "gs://foo/bar/call-choose_ctl/glob-99/ctl_for_rep2.tagAlign.gz", ] }, } ], }, } mock_metadata.content = metadata analysis = Analysis(mock_metadata, backend=mock_gc_backend) start_task = analysis.get_tasks("macs2_signal_track")[0] with condition: results = analysis.search_up( start_task=start_task, task_name="bam2ta", filekey="bam", inputs=True, disallow_tasks=disallow_tasks, ) result = [i.filename for i in results] assert sorted(result) == sorted(expected)
def normal_analysis( mock_gc_backend: MockFixture, metadata_json_path: Path ) -> Analysis: # noqa: F811 normal_analysis = Analysis(MetaData(metadata_json_path), backend=mock_gc_backend) return normal_analysis
def mirna_replicated_analysis( mock_accession_gc_backend: MockFixture, mirna_replicated_metadata_path: str) -> Analysis: # noqa: F811 analysis = Analysis(MetaData(mirna_replicated_metadata_path), backend=mock_accession_gc_backend) return analysis