示例#1
0
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 == []
示例#2
0
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
示例#3
0
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)
示例#4
0
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
示例#5
0
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
示例#6
0
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
示例#7
0
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
示例#8
0
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)
示例#9
0
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