Exemple #1
0
def test_push_model(ebnt: Ebonite, model: Model):
    task = ebnt.get_or_create_task("Project", "Task1")
    model.task_id = task.id  # For test purpose
    pushed_model = ebnt.push_model(model)

    assert model.name == pushed_model.name
    assert task.id == pushed_model.task_id
Exemple #2
0
def test_delete_image__not_only_meta_ok(ebnt: Ebonite, image_to_delete: Image,
                                        mock_env_params):
    assert ebnt.meta_repo.get_image_by_id(image_to_delete.id) is not None
    assert image_to_delete.builder == mock_env_params.builder
    with mock_env_params.builder.delete_image.called_within_context(times=1):
        ebnt.delete_image(image_to_delete, False)
    assert ebnt.meta_repo.get_image_by_id(image_to_delete.id) is None
Exemple #3
0
def test_delete_task_ok(ebnt: Ebonite):
    task = ebnt.get_or_create_task('Project', 'Task')

    assert ebnt.meta_repo.get_task_by_id(task.id) is not None
    ebnt.delete_task(task)

    assert ebnt.meta_repo.get_task_by_id(task.id) is None
Exemple #4
0
def test_get_model(ebnt: Ebonite):
    task = ebnt.get_or_create_task("Project", "Task")
    reg, data = train_model()
    model = task.create_and_push_model(reg, data, 'mymodel')

    assert ebnt.get_model(project='Project', task='Task',
                          model_name='mymodel') == model
Exemple #5
0
def test_push_model_with_same_name(ebnt: Ebonite, model: Model):
    task = ebnt.get_or_create_task("Project", "Task1")
    model = ebnt.push_model(model, task)

    model._id = None
    with pytest.raises(ExistingModelError):
        ebnt.push_model(model, task)
Exemple #6
0
def test_delete_project__ok(ebnt: Ebonite):
    project = ebnt.meta_repo.get_or_create_project('Project')

    assert ebnt.meta_repo.get_or_create_project('Project') is not None
    ebnt.delete_project(project)

    assert ebnt.meta_repo.get_project_by_name('Project') is None
Exemple #7
0
def test_push_model_with_same_name(ebnt: Ebonite, model: Model):
    task = ebnt.get_or_create_task("Project", "Task1")
    ebnt.push_model(model, task)

    model2 = copy.deepcopy(model)
    with pytest.raises(ExistingModelError):
        ebnt.push_model(model2, task)
Exemple #8
0
def test_push_model_with_task_and_task_argument_with_different_project(ebnt: Ebonite, model: Model):
    task = ebnt.get_or_create_task("Project", "Task1")

    task2 = ebnt.get_or_create_task("Project2", "Task1")
    model.task = task2  # For test purpose

    with pytest.raises(ValueError):
        ebnt.push_model(model, task)
Exemple #9
0
def delete_pipeline_ok(ebnt: Ebonite, task_b: Task, pipeline: Pipeline):
    task_b.add_pipeline(pipeline)

    assert ebnt.meta_repo.get_task_by_id(task_b.id) is not None
    assert ebnt.meta_repo.get_pipeline_by_id(pipeline.id) is not None
    ebnt.delete_pipeline(pipeline)

    assert ebnt.meta_repo.get_pipeline_by_id(pipeline.id) is None
Exemple #10
0
def test_delete_project_cascade_project_with_tasks(ebnt: Ebonite):
    ebnt.get_or_create_task('Project', 'Task')
    project = ebnt.meta_repo.get_project_by_name('Project')

    assert ebnt.meta_repo.get_project_by_id(project.id) is not None

    with pytest.raises(ProjectWithTasksError):
        ebnt.delete_project(project)
Exemple #11
0
def test_delete_task_with_models(ebnt: Ebonite, model: Model):
    task = ebnt.get_or_create_task('Project', 'Task')
    model = ebnt.push_model(model, task)

    assert ebnt.meta_repo.get_task_by_id(task.id) is not None
    assert ebnt.meta_repo.get_model_by_id(model.id) is not None

    with pytest.raises(TaskWithFKError):
        ebnt.delete_task(task)
Exemple #12
0
def test_push_model_project_contains_two_tasks(ebnt: Ebonite, model: Model):
    task1 = ebnt.get_or_create_task("Project", "Task1")
    ebnt.get_or_create_task("Project", "Task2")

    pushed_model = ebnt.push_model(model, task1)

    task = ebnt.meta_repo.get_task_by_id(pushed_model.task_id)
    project = ebnt.meta_repo.get_project_by_id(task.project_id)
    task1 = ebnt.get_or_create_task("Project", "Task1")
    assert project.tasks.get(task.id) == task1
Exemple #13
0
def test_delete_image__only_meta_ok(ebnt: Ebonite, image_to_delete: Image,
                                    instance: RuntimeInstance,
                                    mock_env_params):
    assert ebnt.meta_repo.get_image_by_id(image_to_delete.id) is not None
    instance.image = image_to_delete
    instance.environment = image_to_delete.environment
    ebnt.meta_repo.save_instance(instance)
    with mock_env_params.builder.delete_image.called_within_context(times=0):
        ebnt.delete_image(image_to_delete, True, True)
    assert ebnt.meta_repo.get_image_by_id(image_to_delete.id) is None
Exemple #14
0
def delete_model_ok(ebnt: Ebonite):
    task = ebnt.get_or_create_task('Project', 'Task')
    model = Model(name='Model', task_id=task.id)
    model = ebnt.meta_repo.create_model(model)

    assert ebnt.meta_repo.get_task_by_id(task.id) is not None
    assert ebnt.meta_repo.get_model_by_id(model.id) is not None
    ebnt.delete_model(model)

    assert ebnt.meta_repo.get_model_by_id(model.id) is None
Exemple #15
0
def test_delete_project_cascade__ok(ebnt: Ebonite):
    task = ebnt.get_or_create_task('Project', 'Task')
    project = ebnt.meta_repo.get_project_by_name('Project')

    assert ebnt.meta_repo.get_task_by_id(task.id) is not None
    assert ebnt.meta_repo.get_project_by_id(project.id) is not None
    ebnt.delete_project(project, cascade=True)

    assert ebnt.meta_repo.get_project_by_name('Project') is None
    assert ebnt.meta_repo.get_task_by_id(task.id) is None
Exemple #16
0
def test_push_model_exists(ebnt: Ebonite, model: Model):
    task = ebnt.get_or_create_task("Project", "Task1")

    pushed_model = ebnt.push_model(model, task)
    assert pushed_model.id is not None

    pushed_model.name = "Model2"
    pushed_model._id = None
    pushed_model2 = ebnt.push_model(pushed_model)

    assert "Model2" == pushed_model2.name
Exemple #17
0
def test_get_model(ebnt: Ebonite, regression_and_data):
    task = ebnt.get_or_create_task("Project", "Task")
    reg, data = regression_and_data
    model = task.create_and_push_model(reg, data, 'mymodel')

    get_model = ebnt.get_model(project='Project',
                               task='Task',
                               model_name='mymodel')
    assert get_model == model
    assert get_model.has_meta_repo
    assert get_model.has_artifact_repo
Exemple #18
0
def delete_image_ok(ebnt: Ebonite, model: Model):
    task = ebnt.get_or_create_task('Project', 'Task')
    model = ebnt.push_model(model, task)
    image = Image(task_id=task.id, name='Image', source=BuildableMock())
    image = ebnt.meta_repo.create_image(image)

    assert ebnt.meta_repo.get_task_by_id(task.id) is not None
    assert ebnt.meta_repo.get_model_by_id(model.id) is not None
    assert ebnt.meta_repo.get_image_by_id(image.id) is not None
    ebnt.delete_image(image)

    assert ebnt.meta_repo.get_image_by_id(image.id) is None
Exemple #19
0
def test_get_or_create_task(ebnt: Ebonite):
    task = ebnt.get_or_create_task("Project", "Task")
    project = ebnt.meta_repo.get_project_by_name('Project')
    assert task.name == "Task"
    assert task.project.name == "Project"
    assert task.id in project.tasks
    assert task.has_meta_repo
    assert task.has_artifact_repo
Exemple #20
0
def remote_ebnt(tmpdir, postgres_server, postgres_meta, s3server, s3_artifact):  # noqa
    with use_local_installation():
        # we reconstruct all objects here to ensure that config-related code is covered by tests

        ebnt = Ebonite.custom_client(
            metadata="sqlalchemy", meta_kwargs={
                "db_uri": postgres_meta.db_uri
            },
            artifact="s3", artifact_kwargs={
                "bucket_name": s3_artifact.bucket_name,
                "endpoint": s3_artifact.endpoint,
                "region": s3_artifact.region
            })

        cfg_path = os.path.join(tmpdir, 'config.json')
        ebnt.save_client_config(cfg_path)
        yield Ebonite.from_config_file(cfg_path)
Exemple #21
0
def test_delete_task_cascade_ok(ebnt: Ebonite, model: Model, mock_env,
                                image: Image, pipeline: Pipeline):
    task = ebnt.get_or_create_task('Project', 'Task')
    model = ebnt.push_model(model, task)
    image.environment = ebnt.meta_repo.create_environment(mock_env)
    task.add_pipeline(pipeline)
    task.add_image(image)
    task = ebnt.meta_repo.get_task_by_id(task.id).bind_as(task)

    assert ebnt.meta_repo.get_task_by_id(task.id) is not None
    assert ebnt.meta_repo.get_model_by_id(model.id) is not None
    assert ebnt.meta_repo.get_pipeline_by_id(pipeline.id) is not None
    assert ebnt.meta_repo.get_image_by_id(image.id) is not None
    ebnt.delete_task(task, cascade=True)

    assert ebnt.meta_repo.get_task_by_id(task.id) is None
    assert ebnt.meta_repo.get_model_by_id(model.id) is None
    assert ebnt.meta_repo.get_pipeline_by_id(pipeline.id) is None
    assert ebnt.meta_repo.get_image_by_id(image.id) is None
Exemple #22
0
    def push_model(self, model: 'Model') -> 'Model':
        """
        Push :class:`Model` instance to task repository

        :param model: :class:`Model` to push
        :return: same pushed :class:`Model`
        """
        from ebonite.client import Ebonite
        model = Ebonite(self._meta, self._art).push_model(model, self)
        self._models.add(model)
        return model
Exemple #23
0
    def delete_model(self, model: 'Model', force=False):
        """
        Remove model from this task and delete it from meta repo

        :param model: model to delete
        :param force: whether model artifacts' deletion errors should be ignored, default is false
        """
        model_id = model.id
        if model_id not in self._models:
            raise errors.NonExistingModelError(model)

        from ebonite.client import Ebonite
        Ebonite(self._meta, self._art).delete_model(model, force)
        del self._models[model_id]
Exemple #24
0
def test_build_and_run_instance(ebnt: Ebonite, regression_and_data,
                                container_name):
    reg, data = regression_and_data

    check_ebonite_port_free()

    model = ebnt.create_model('test model', reg, data)

    instance = ebnt.build_and_run_instance(container_name, model)
    time.sleep(.1)

    assert ebnt.get_environment(
        instance.environment.name) == instance.environment
    assert ebnt.get_image(instance.image.name,
                          instance.image.model) == instance.image
    assert ebnt.get_instance(instance.name, instance.image,
                             instance.environment) == instance
    assert instance.is_running()

    ebnt.stop_instance(instance)
    time.sleep(.1)

    assert not instance.is_running()
Exemple #25
0
def test_push_model_task_argument(ebnt: Ebonite, model: Model):
    task = ebnt.get_or_create_task("Project", "Task1")
    pushed_model = ebnt.push_model(model, task)

    assert model.name == pushed_model.name
    assert task.id == pushed_model.task_id
Exemple #26
0
def test_create_model(ebnt: Ebonite, regression_and_data):
    reg, data = regression_and_data

    model = ebnt.create_model(reg, data, 'sklearn_model')
    assert isinstance(model, Model)
    assert ebnt.get_model(model.name, model.task) == model
Exemple #27
0
def test_get_or_create_task_exists(ebnt: Ebonite):
    task = ebnt.get_or_create_task("Project", "Task")

    task2 = ebnt.get_or_create_task("Project", "Task")

    assert task == task2
Exemple #28
0
def test_get_or_create_task(ebnt: Ebonite):
    task = ebnt.get_or_create_task("Project", "Task")
    project = ebnt.meta_repo.get_project_by_id(task.project_id)  # FIXME
    assert task.name == "Task"
    assert project.name == "Project"
Exemple #29
0
def ebnt(tmpdir):
    with use_local_installation():
        yield Ebonite.local(str(tmpdir))
Exemple #30
0
def test_build_and_run_instance(ebnt: Ebonite, regression_and_data,
                                container_name, mock_env):
    reg, data = regression_and_data
    mock_env = ebnt.meta_repo.create_environment(mock_env)
    check_ebonite_port_free()

    model = ebnt.create_model(reg, data, 'test_model')

    p = mock_env.params
    with p.builder.build_image.called_within_context(
    ), p.runner.run.called_within_context():
        instance = ebnt.build_and_run_instance(model,
                                               container_name,
                                               environment=mock_env)

    assert ebnt.get_environment(
        instance.environment.name) == instance.environment
    assert ebnt.get_image(instance.image.name,
                          instance.image.task) == instance.image
    assert ebnt.get_instance(instance.name, instance.image,
                             instance.environment) == instance

    with pytest.raises(ImageWithInstancesError):
        ebnt.delete_image(instance.image)

    with pytest.raises(EnvironmentWithInstancesError):
        ebnt.delete_environment(instance.environment)

    with p.runner.stop.called_within_context(
    ), p.runner.remove_instance.called_within_context():
        ebnt.delete_instance(instance)