test_local.py
1 import datetime 2 3 import pandas as pd 4 import pytest 5 import uuid6 6 7 from evidently.core.datasets import Dataset 8 from evidently.core.report import Report 9 from evidently.core.report import Snapshot 10 from evidently.legacy.core import new_id 11 from evidently.sdk.models import DashboardModel 12 from evidently.sdk.models import DashboardPanelPlot 13 from evidently.sdk.models import ProjectModel 14 from evidently.ui.workspace import Workspace 15 from evidently.ui.workspace import WorkspaceBase 16 17 18 @pytest.fixture 19 def workspace(tmpdir): 20 return Workspace(str(tmpdir)) 21 22 23 @pytest.fixture 24 def mock_project(): 25 return ProjectModel( 26 id=uuid6.UUID(int=1, version=7), 27 name="mock project", 28 ) 29 30 31 @pytest.fixture 32 def mock_snapshot(): 33 report = Report(metrics=[]) 34 snapshot = Snapshot(report, "mock", datetime.datetime.now(), metadata={}, tags=[]) 35 snapshot._widgets = [] 36 return snapshot 37 38 39 @pytest.fixture 40 def mock_dashboard(): 41 return DashboardModel( 42 tabs=[], 43 panels=[ 44 DashboardPanelPlot(id=new_id(), title="mock panel", subtitle=None, size="full", values=[], plot_params={}) 45 ], 46 ) 47 48 49 def test_add_get_project(workspace: WorkspaceBase, mock_project: ProjectModel): 50 workspace.add_project(mock_project) 51 assert workspace.get_project(mock_project.id)._project == mock_project 52 53 54 def test_list_project(workspace: WorkspaceBase, mock_project: ProjectModel): 55 assert len(workspace.list_projects()) == 0 56 workspace.add_project(mock_project) 57 assert len(workspace.list_projects()) == 1 58 59 60 def test_delete_project(workspace: WorkspaceBase, mock_project: ProjectModel): 61 assert len(workspace.list_projects()) == 0 62 workspace.add_project(mock_project) 63 assert len(workspace.list_projects()) == 1 64 workspace.delete_project(mock_project.id) 65 assert len(workspace.list_projects()) == 0 66 67 68 def test_add_snapshot(workspace: WorkspaceBase, mock_project: ProjectModel, mock_snapshot): 69 project = workspace.add_project(mock_project) 70 workspace.add_run(project.id, mock_snapshot) 71 # todo 72 73 74 def test_list_snapshot(workspace: WorkspaceBase, mock_project: ProjectModel, mock_snapshot): 75 project = workspace.add_project(mock_project) 76 assert len(workspace.list_runs(project.id)) == 0 77 workspace.add_run(project.id, mock_snapshot) 78 assert len(workspace.list_runs(project.id)) == 1 79 80 81 def test_delete_snapshot(workspace: WorkspaceBase, mock_project: ProjectModel, mock_snapshot): 82 project = workspace.add_project(mock_project) 83 assert len(workspace.list_runs(project.id)) == 0 84 run = workspace.add_run(project.id, mock_snapshot) 85 assert len(workspace.list_runs(project.id)) == 1 86 workspace.delete_run(project.id, run.id) 87 assert len(workspace.list_runs(project.id)) == 0 88 89 90 def test_add_get_dashboard(workspace: WorkspaceBase, mock_project: ProjectModel, mock_dashboard): 91 project = workspace.add_project(mock_project) 92 workspace.save_dashboard(project.id, mock_dashboard) 93 assert workspace.get_dashboard(project.id) == mock_dashboard 94 95 96 @pytest.fixture 97 def mock_dataset(): 98 df = pd.DataFrame({"a": [1, 2, 3], "b": ["x", "y", "z"]}) 99 return Dataset.from_pandas(df, metadata={"test": "metadata"}, tags=["test_tag"]) 100 101 102 def test_list_datasets(workspace: WorkspaceBase, mock_project: ProjectModel, mock_dataset: Dataset): 103 project = workspace.add_project(mock_project) 104 105 assert len(workspace.list_datasets(project.id).datasets) == 0 106 107 dataset_id = workspace.add_dataset(project.id, mock_dataset, "test_dataset", "Test description") 108 109 datasets = workspace.list_datasets(project.id) 110 assert len(datasets.datasets) == 1 111 assert datasets.datasets[0].id == dataset_id 112 assert datasets.datasets[0].name == "test_dataset" 113 assert datasets.datasets[0].description == "Test description" 114 assert datasets.datasets[0].row_count == 3 115 assert datasets.datasets[0].column_count == 2 116 assert datasets.datasets[0].origin == "file" 117 assert "test_tag" in datasets.datasets[0].tags 118 assert datasets.datasets[0].metadata["test"] == "metadata" 119 120 121 def test_list_datasets_filter_by_origin(workspace: WorkspaceBase, mock_project: ProjectModel, mock_dataset: Dataset): 122 project = workspace.add_project(mock_project) 123 124 dataset_id = workspace.add_dataset(project.id, mock_dataset, "test_dataset", "Test description") 125 126 datasets = workspace.list_datasets(project.id, origins=["file"]) 127 assert len(datasets.datasets) == 1 128 assert datasets.datasets[0].id == dataset_id 129 130 datasets = workspace.list_datasets(project.id, origins=["tracing"]) 131 assert len(datasets.datasets) == 0 132 133 134 def test_load_dataset(workspace: WorkspaceBase, mock_project: ProjectModel, mock_dataset: Dataset): 135 project = workspace.add_project(mock_project) 136 137 dataset_id = workspace.add_dataset(project.id, mock_dataset, "test_dataset", "Test description") 138 139 loaded_dataset = workspace.load_dataset(dataset_id) 140 141 pd.testing.assert_frame_equal(loaded_dataset.as_dataframe(), mock_dataset.as_dataframe()) 142 assert loaded_dataset.data_definition == mock_dataset.data_definition 143 assert loaded_dataset.metadata == mock_dataset.metadata 144 assert loaded_dataset.tags == mock_dataset.tags