Ejemplo n.º 1
0
    def test_deploy_with_requirements(self, *_):
        with self.project_dir:
            ws_dir = "/Shared/dbx/projects/%s" % self.project_name
            configure_result = invoke_cli_runner(
                configure,
                [
                    "--environment",
                    "test",
                    "--profile",
                    self.profile_name,
                    "--workspace-dir",
                    ws_dir,
                ],
            )
            self.assertEqual(configure_result.exit_code, 0)

            deployment_content = {"test": {"jobs": []}}

            write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH)

            sample_requirements = "\n".join(["pyspark=3.0.0", "xgboost=0.6.0"])

            pathlib.Path("runtime_requirements.txt").write_text(sample_requirements)

            deploy_result = invoke_cli_runner(
                deploy,
                [
                    "--environment",
                    "test",
                    "--requirements-file",
                    "runtime_requirements.txt",
                ],
            )

            self.assertEqual(deploy_result.exit_code, 0)
Ejemplo n.º 2
0
    def test_deploy_non_existent_env(self, *args):
        with self.project_dir:
            ws_dir = "/Shared/dbx/projects/%s" % self.project_name
            configure_result = invoke_cli_runner(
                configure,
                [
                    "--environment",
                    "test",
                    "--profile",
                    self.profile_name,
                    "--workspace-dir",
                    ws_dir,
                ],
            )
            self.assertEqual(configure_result.exit_code, 0)

            deployment_content = {
                "misconfigured-environment": {
                    "dbfs": {},
                    "jobs": []
                }
            }

            write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH)

            deploy_result = invoke_cli_runner(deploy,
                                              ["--environment", "test"],
                                              expected_error=True)

            self.assertIsInstance(deploy_result.exception, NameError)
            self.assertIn("non-existent in the deployment file",
                          str(deploy_result.exception))
Ejemplo n.º 3
0
    def test_deploy_basic(self, *_):
        with self.project_dir:
            ws_dir = "/Shared/dbx/projects/%s" % self.project_name
            configure_result = invoke_cli_runner(
                configure,
                [
                    "--environment",
                    "test",
                    "--profile",
                    self.profile_name,
                    "--workspace-dir",
                    ws_dir,
                ],
            )
            self.assertEqual(configure_result.exit_code, 0)

            deployment_content = {"test": {"jobs": []}}

            write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH)

            with patch(
                    "mlflow.get_experiment_by_name",
                    return_value=Experiment("id", None,
                                            f"dbfs:/dbx/{self.project_name}",
                                            None, None),
            ):
                deploy_result = invoke_cli_runner(deploy,
                                                  ["--environment", "test"])
                self.assertEqual(deploy_result.exit_code, 0)
Ejemplo n.º 4
0
    def test_deploy_listed_jobs(self, *args):
        with self.project_dir:
            ws_dir = "/Shared/dbx/projects/%s" % self.project_name
            configure_result = invoke_cli_runner(
                configure,
                [
                    "--environment",
                    "test",
                    "--profile",
                    self.profile_name,
                    "--workspace-dir",
                    ws_dir,
                ],
            )
            self.assertEqual(configure_result.exit_code, 0)

            deployment_content = {
                "test": {
                    "jobs": [{
                        "name": "job-1"
                    }, {
                        "name": "job-2"
                    }]
                }
            }

            write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH)

            deploy_result = invoke_cli_runner(
                deploy, ["--environment", "test", "--jobs", "job-1,job-2"])

            self.assertEqual(deploy_result.exit_code, 0)
Ejemplo n.º 5
0
    def test_trace_runs(self, *_):
        with self.project_dir:
            ws_dir = "/Shared/dbx/projects/%s" % self.project_name
            configure_result = invoke_cli_runner(
                configure,
                [
                    "--environment",
                    "test",
                    "--profile",
                    self.profile_name,
                    "--workspace-dir",
                    ws_dir,
                ],
            )
            self.assertEqual(configure_result.exit_code, 0)

            deployment_content = {"test": {"dbfs": {}, "jobs": []}}

            write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH)

            deploy_result = invoke_cli_runner(
                deploy, ["--environment", "test", "--tags", "cake=cheesecake"])

            self.assertEqual(deploy_result.exit_code, 0)

            launch_result = invoke_cli_runner(launch, [
                "--environment", "test", "--job", "sample", "--tags",
                "cake=cheesecake", "--trace"
            ])

            self.assertEqual(launch_result.exit_code, 0)
Ejemplo n.º 6
0
    def test_deploy_with_requirements_and_branch(self, *_):
        with self.project_dir:
            ws_dir = "/Shared/dbx/projects/%s" % self.project_name
            configure_result = invoke_cli_runner(
                configure,
                [
                    "--environment",
                    "test",
                    "--profile",
                    self.profile_name,
                    "--workspace-dir",
                    ws_dir,
                ],
            )
            self.assertEqual(configure_result.exit_code, 0)

            deployment_content = {"test": {"jobs": []}}

            write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH)

            sample_requirements = "\n".join(
                ["pyspark=3.0.0", "xgboost=0.6.0", "pyspark3d"])

            pathlib.Path("runtime_requirements.txt").write_text(
                sample_requirements)

            with patch(
                    "mlflow.get_experiment_by_name",
                    return_value=Experiment("id", None,
                                            f"dbfs:/dbx/{self.project_name}",
                                            None, None),
            ):
                deploy_result = invoke_cli_runner(
                    deploy,
                    [
                        "--environment",
                        "test",
                        "--requirements-file",
                        "runtime_requirements.txt",
                        "--branch-name",
                        "test-branch",
                    ],
                )

                deleted_dependency_lines = [
                    line for line in deploy_result.stdout.splitlines()
                    if "pyspark dependency deleted" in line
                ]
                self.assertEqual(len(deleted_dependency_lines), 1)

                self.assertEqual(deploy_result.exit_code, 0)
Ejemplo n.º 7
0
    def test_no_runs(self, *_):
        with self.project_dir:
            ws_dir = "/Shared/dbx/projects/%s" % self.project_name
            configure_result = invoke_cli_runner(
                configure,
                [
                    "--environment",
                    "test",
                    "--profile",
                    self.profile_name,
                    "--workspace-dir",
                    ws_dir,
                ],
            )
            self.assertEqual(configure_result.exit_code, 0)

            deployment_content = {"test": {"dbfs": {}, "jobs": []}}

            write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH)

            with patch(
                    "mlflow.get_experiment_by_name",
                    return_value=Experiment("id", None,
                                            f"dbfs:/dbx/{self.project_name}",
                                            None, None),
            ):
                deploy_result = invoke_cli_runner(
                    deploy,
                    ["--environment", "test", "--tags", "cake=cheesecake"])

                self.assertEqual(deploy_result.exit_code, 0)

                launch_result = invoke_cli_runner(
                    launch,
                    [
                        "--environment",
                        "test",
                        "--job",
                        "sample",
                        "--tags",
                        "cake=cheesecake",
                    ],
                    expected_error=True,
                )

                self.assertIsNotNone(launch_result.exception)
                self.assertTrue("not found in underlying MLflow experiment" in
                                str(launch_result.exception))
Ejemplo n.º 8
0
    def test_no_runs(self, *args):
        with self.project_dir:
            ws_dir = "/Shared/dbx/projects/%s" % self.project_name
            configure_result = invoke_cli_runner(
                configure,
                [
                    "--environment",
                    "test",
                    "--profile",
                    self.profile_name,
                    "--workspace-dir",
                    ws_dir,
                ],
            )
            self.assertEqual(configure_result.exit_code, 0)

            deployment_content = {"test": {"dbfs": {}, "jobs": []}}

            write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH)

            deploy_result = invoke_cli_runner(
                deploy, ["--environment", "test", "--tags", "cake=cheesecake"]
            )

            self.assertEqual(deploy_result.exit_code, 0)

            launch_result = invoke_cli_runner(
                launch,
                [
                    "--environment",
                    "test",
                    "--job",
                    "sample",
                    "--tags",
                    "cake=cheesecake",
                ],
                expected_error=True
            )

            self.assertIsNotNone(launch_result.exception)
            self.assertTrue("No runs provided per given set of filters" in str(launch_result.exception))
Ejemplo n.º 9
0
    def test_deploy_incorrect_artifact_location(self, *_):
        with self.project_dir:
            ws_dir = "/Shared/dbx/projects/%s" % self.project_name
            configure_result = invoke_cli_runner(
                configure,
                [
                    "--environment",
                    "test",
                    "--profile",
                    self.profile_name,
                    "--workspace-dir",
                    ws_dir,
                ],
            )
            self.assertEqual(configure_result.exit_code, 0)

            with patch(
                    "mlflow.get_experiment_by_name",
                    return_value=Experiment("id", None,
                                            "dbfs:/some/correct-location",
                                            None, None),
            ):
                deployment_content = {"test": {"jobs": []}}
                write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH)

                sample_config = read_json(INFO_FILE_PATH)
                sample_config["environments"]["test"][
                    "artifact_location"] = "dbfs:/some/another-location"
                write_json(sample_config, INFO_FILE_PATH)

                deploy_result = invoke_cli_runner(deploy,
                                                  ["--environment", "test"],
                                                  expected_error=True)

                self.assertIsInstance(deploy_result.exception, Exception)
                self.assertIn(
                    "Please change the experiment name to create a new experiment",
                    str(deploy_result.exception))
Ejemplo n.º 10
0
    def test_launch_with_parameters(self, *_):
        with self.project_dir:
            ws_dir = "/Shared/dbx/projects/%s" % self.project_name
            configure_result = invoke_cli_runner(
                configure,
                [
                    "--environment",
                    "test",
                    "--profile",
                    self.profile_name,
                    "--workspace-dir",
                    ws_dir,
                ],
            )
            self.assertEqual(configure_result.exit_code, 0)

            deployment_content = {"test": {"dbfs": {}, "jobs": []}}

            write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH)

            with patch(
                    "mlflow.get_experiment_by_name",
                    return_value=Experiment("id", None,
                                            f"dbfs:/dbx/{self.project_name}",
                                            None, None),
            ):
                deploy_result = invoke_cli_runner(
                    deploy,
                    ["--environment", "test", "--tags", "cake=cheesecake"])

                self.assertEqual(deploy_result.exit_code, 0)

                launch_raw = invoke_cli_runner(
                    launch,
                    [
                        "--environment",
                        "test",
                        "--job",
                        "sample",
                        "--tags",
                        "cake=cheesecake",
                        """--parameters-raw='{"key1": "value1", "key2": 2}'""",
                    ],
                )

                self.assertEqual(launch_raw.exit_code, 0)

                launch_with_params = invoke_cli_runner(
                    launch,
                    [
                        "--environment",
                        "test",
                        "--job",
                        "sample",
                        "--tags",
                        "cake=cheesecake",
                        "--parameters='cake=cheesecake'",
                    ],
                )

                self.assertEqual(launch_with_params.exit_code, 0)