Esempio n. 1
0
def test_get_project(
    db: DBInterface,
    db_session: sqlalchemy.orm.Session,
):
    project_name = "project-name"
    project_description = "some description"
    project_labels = {
        "some-label": "some-label-value",
    }
    db.create_project(
        db_session,
        mlrun.api.schemas.Project(
            metadata=mlrun.api.schemas.ProjectMetadata(name=project_name,
                                                       labels=project_labels),
            spec=mlrun.api.schemas.ProjectSpec(
                description=project_description),
        ),
    )

    project_output = db.get_project(db_session, project_name)
    assert project_output.metadata.name == project_name
    assert project_output.spec.description == project_description
    assert (deepdiff.DeepDiff(
        project_labels,
        project_output.metadata.labels,
        ignore_order=True,
    ) == {})
Esempio n. 2
0
def test_store_project_update(
    db: DBInterface,
    db_session: sqlalchemy.orm.Session,
):
    project_name = "project-name"
    project_description = "some description"
    project_labels = {
        "some-label": "some-label-value",
    }
    project_created = datetime.datetime.utcnow()
    db.create_project(
        db_session,
        mlrun.api.schemas.Project(
            metadata=mlrun.api.schemas.ProjectMetadata(
                name=project_name,
                created=project_created,
                labels=project_labels,
            ),
            spec=mlrun.api.schemas.ProjectSpec(
                description=project_description),
        ),
    )

    db.store_project(
        db_session,
        project_name,
        mlrun.api.schemas.Project(
            metadata=mlrun.api.schemas.ProjectMetadata(name=project_name), ),
    )
    project_output = db.get_project(db_session, project_name)
    assert project_output.metadata.name == project_name
    assert project_output.spec.description is None
    assert project_output.metadata.labels is None
    # Created in request body should be ignored and set by the DB layer
    assert project_output.metadata.created != project_created
Esempio n. 3
0
def test_list_project_names_filter(
    db: DBInterface,
    db_session: sqlalchemy.orm.Session,
):

    project_names = [
        "project-1", "project-2", "project-3", "project-4", "project-5"
    ]
    for project in project_names:
        db.create_project(
            db_session,
            mlrun.api.schemas.Project(
                metadata=mlrun.api.schemas.ProjectMetadata(name=project), ),
        )
    filter_names = [project_names[0], project_names[3], project_names[4]]
    projects_output = db.list_projects(
        db_session,
        format_=mlrun.api.schemas.ProjectsFormat.name_only,
        names=filter_names,
    )

    assert (deepdiff.DeepDiff(
        filter_names,
        projects_output.projects,
        ignore_order=True,
    ) == {})
Esempio n. 4
0
def test_get_project(
    db: DBInterface,
    db_session: sqlalchemy.orm.Session,
):
    project_name = "project-name"
    project_description = "some description"
    db.create_project(
        db_session,
        mlrun.api.schemas.Project(name=project_name,
                                  description=project_description),
    )

    project_output = db.get_project(db_session, project_name)
    assert project_output.name == project_name
    assert project_output.description == project_description
Esempio n. 5
0
def test_delete_project(
    db: DBInterface,
    db_session: sqlalchemy.orm.Session,
):
    project_name = "project-name"
    project_description = "some description"
    db.create_project(
        db_session,
        mlrun.api.schemas.Project(name=project_name,
                                  description=project_description),
    )
    db.delete_project(db_session, project_name)

    with pytest.raises(mlrun.errors.MLRunNotFoundError):
        db.get_project(db_session, project_name)
Esempio n. 6
0
def test_list_project(
    db: DBInterface,
    db_session: sqlalchemy.orm.Session,
):
    expected_projects = [
        {
            "name": "project-name-1"
        },
        {
            "name": "project-name-2",
            "description": "project-description-2"
        },
        {
            "name": "project-name-3",
            "labels": {
                "key": "value"
            }
        },
        {
            "name": "project-name-4",
            "description": "project-description-4",
            "labels": {
                "key2": "value2"
            },
        },
    ]
    for project in expected_projects:
        db.create_project(
            db_session,
            mlrun.api.schemas.Project(
                metadata=mlrun.api.schemas.ProjectMetadata(
                    name=project["name"], labels=project.get("labels")),
                spec=mlrun.api.schemas.ProjectSpec(
                    description=project.get("description")),
            ),
        )
    projects_output = db.list_projects(db_session)
    for index, project in enumerate(projects_output.projects):
        assert project.metadata.name == expected_projects[index]["name"]
        assert project.spec.description == expected_projects[index].get(
            "description")
        assert (deepdiff.DeepDiff(
            expected_projects[index].get("labels"),
            project.metadata.labels,
            ignore_order=True,
        ) == {})
Esempio n. 7
0
def test_patch_project(
    db: DBInterface,
    db_session: sqlalchemy.orm.Session,
):
    project_name = "project-name"
    project_description = "some description"
    project_created = datetime.datetime.utcnow()
    db.create_project(
        db_session,
        mlrun.api.schemas.Project(
            metadata=mlrun.api.schemas.ProjectMetadata(name=project_name),
            spec=mlrun.api.schemas.ProjectSpec(
                description=project_description),
        ),
    )

    patched_project_description = "some description 2"
    patched_project_labels = {
        "some-label": "some-label-value",
    }
    db.patch_project(
        db_session,
        project_name,
        {
            "metadata": {
                "created": project_created,
                "labels": patched_project_labels
            },
            "spec": {
                "description": patched_project_description
            },
        },
    )
    project_output = db.get_project(db_session, project_name)
    assert project_output.metadata.name == project_name
    assert project_output.spec.description == patched_project_description
    # Created in request body should be ignored and set by the DB layer
    assert project_output.metadata.created != project_created
    assert (deepdiff.DeepDiff(
        patched_project_labels,
        project_output.metadata.labels,
        ignore_order=True,
    ) == {})
Esempio n. 8
0
def test_create_project(
    db: DBInterface,
    db_session: sqlalchemy.orm.Session,
):
    project_name = "project-name"
    project_description = "some description"
    project_created = datetime.datetime.utcnow()

    db.create_project(
        db_session,
        mlrun.api.schemas.Project(name=project_name,
                                  description=project_description,
                                  created=project_created),
    )

    project_output = db.get_project(db_session, project_name)
    assert project_output.name == project_name
    assert project_output.description == project_description
    # Created in request body should be ignored and set by the DB layer
    assert project_output.created != project_created