예제 #1
0
 def __init__(self, *args, **kwargs):
     self.command_log, self.message_log = [], []
     DXExecDependencyInstaller.__init__(self, *args, **kwargs)
예제 #2
0
 def __init__(self, *args, **kwargs):
     self.command_log, self.message_log = [], []
     DXExecDependencyInstaller.__init__(self, *args, **kwargs)
예제 #3
0
    def test_dx_execdepends_installer(self):
        def get_edi(run_spec, job_desc=None):
            return TestEDI(executable_desc={"runSpec": run_spec},
                           job_desc=job_desc if job_desc else {})

        def assert_cmd_ran(edi, regexp):
            self.assertRegexpMatches("\n".join(edi.command_log), regexp)

        def assert_log_contains(edi, regexp):
            self.assertRegexpMatches("\n".join(edi.message_log), regexp)

        with self.assertRaisesRegexp(AppInternalError,
                                     'Expected field "runSpec" to be present'):
            DXExecDependencyInstaller({}, {})

        with self.assertRaisesRegexp(AppInternalError,
                                     'Expected field "name" to be present'):
            get_edi({"dependencies": [{"foo": "bar"}]})

        edi = get_edi({
            "dependencies": [{
                "name": "foo",
                "package_manager": "cran",
                "version": "1.2.3"
            }]
        })
        edi.install()
        assert_cmd_ran(
            edi,
            "R -e .+ install.packages.+devtools.+install_version.+foo.+version.+1.2.3"
        )

        with self.assertRaisesRegexp(AppInternalError,
                                     'does not have a "url" field'):
            get_edi(
                {"dependencies": [{
                    "name": "foo",
                    "package_manager": "git"
                }]})

        edi = get_edi({
            "execDepends": [{
                "name": "git"
            }],
            "dependencies": [{
                "name": "tmux"
            }]
        })
        edi.install()
        assert_cmd_ran(
            edi, "apt-get install --yes --no-install-recommends git tmux")

        edi = get_edi({})
        edi.install()

        edi = get_edi({
            "execDepends": [],
            "bundledDepends": [],
            "dependencies": []
        })
        edi.install()

        edi = get_edi({
            "dependencies": [{
                "name": "pytz",
                "package_manager": "pip",
                "version": "2014.7"
            }, {
                "name": "certifi",
                "package_manager": "pip",
                "stages": ["main"]
            }, {
                "name": "tmux",
                "package_manager": "apt"
            }, {
                "name": "rake",
                "package_manager": "gem",
                "version": "10.3.2"
            }, {
                "name": "nokogiri",
                "package_manager": "gem",
                "stages": ["main"]
            }, {
                "name": "Module::Provision",
                "package_manager": "cpan",
                "version": "0.36.1"
            }, {
                "name": "LWP::MediaTypes",
                "package_manager": "cpan"
            }, {
                "name": "RJSONIO",
                "package_manager": "cran"
            }, {
                "name": "plyr",
                "package_manager": "cran",
                "version": "1.8.1"
            }, {
                "name": "ggplot2",
                "package_manager": "cran",
                "stages": ["main"],
                "version": "1.0.1"
            }, {
                "name": "r1",
                "id": {
                    "$dnanexus_link": "record-123"
                }
            }, {
                "name": "g1",
                "package_manager": "git",
                "url": "https://github.com/dnanexus/oauth2-demo"
            }, {
                "name": "g2",
                "package_manager": "git",
                "url": "https://github.com/dnanexus/bwa",
                "tag": "production",
                "destdir": "/tmp/ee-edi-test-bwa",
                "buld_commands": "echo build bwa here",
                "stages": ["main"]
            }]
        })
        edi.install()
        assert_cmd_ran(edi,
                       re.escape("pip install --upgrade pytz==2014.7 certifi"))
        assert_cmd_ran(edi,
                       "apt-get install --yes --no-install-recommends tmux")
        assert_cmd_ran(
            edi,
            re.escape(
                "gem install rake --version 10.3.2 && gem install nokogiri"))
        assert_cmd_ran(
            edi,
            "R -e .+ install.packages.+\"RJSONIO\".+install_version.+\"ggplot2\".+version=\"1.0.1\""
        )
        assert_log_contains(
            edi,
            'Skipping bundled dependency "r1" because it does not refer to a file'
        )
        assert_cmd_ran(
            edi,
            re.escape(
                "cd $(mktemp -d) && git clone https://github.com/dnanexus/oauth2-demo"
            ))
        assert_cmd_ran(
            edi,
            "cd /tmp/ee-edi-test-bwa && git clone https://github.com/dnanexus/bwa"
        )
        assert_cmd_ran(edi, "git checkout production")

        edi = get_edi({
            "execDepends": [{
                "name": "w00t",
                "stages": ["foo", "bar"]
            }, {
                "name": "f1",
                "id": {
                    "$dnanexus_link": "file-123"
                },
                "stages": ["xyzzt"]
            }]
        })
        edi.install()
        self.assertNotRegexpMatches("\n".join(edi.command_log), "w00t")
        for name in "w00t", "f1":
            assert_log_contains(
                edi,
                "Skipping dependency {} because it is inactive in stage \(function\) main"
                .format(name))

        edi = get_edi(
            {"execDepends": [{
                "name": "git",
                "stages": ["foo", "bar"]
            }]},
            job_desc={"function": "foo"})
        edi.install()
        assert_cmd_ran(edi,
                       "apt-get install --yes --no-install-recommends git")
예제 #4
0
def install_run_spec(exec_depends):
    run_spec = {"runSpec": {"execDepends": exec_depends}}
    job_desc = dxpy.get_handler(dxpy.JOB_ID).describe()
    dx_installer = DXExecDependencyInstaller(run_spec, job_desc)
    dx_installer.install()