Skip to content

Commit

Permalink
added api endpoint for test data transform history
Browse files Browse the repository at this point in the history
  • Loading branch information
Kolea PLESCO authored and Kolea PLESCO committed Jan 16, 2025
1 parent 7018d7b commit 3c1e667
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
from mapping_workbench.backend.security.models.security import AccessToken
from mapping_workbench.backend.shacl_test_suite.models.entity import SHACLTestSuite, SHACLTestFileResource
from mapping_workbench.backend.sparql_test_suite.models.entity import SPARQLTestSuite, SPARQLTestFileResource
from mapping_workbench.backend.test_data_suite.models.entity import TestDataSuite, TestDataFileResource
from mapping_workbench.backend.test_data_suite.models.entity import TestDataSuite, TestDataFileResource, \
TestDataManifestationHistory
from mapping_workbench.backend.triple_map_fragment.models.entity import SpecificTripleMapFragment, \
GenericTripleMapFragment
from mapping_workbench.backend.triple_map_registry.models.entity import TripleMapRegistry
Expand Down Expand Up @@ -58,6 +59,7 @@ async def init_project_models(mongodb_database: AsyncIOMotorDatabase):
ResourceFile,
TestDataSuite,
TestDataFileResource,
TestDataManifestationHistory,
MappingPackage,
MappingPackageStateGate,
MappingRuleRegistry,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
from mapping_workbench.backend.task_manager.services.task_wrapper import add_task
from mapping_workbench.backend.test_data_suite.adapters.rml_mapper import RMLMapperException
from mapping_workbench.backend.test_data_suite.models.entity import TestDataSuite, TestDataFileResource, \
TestDataFileResourceUpdateIn, TestDataFileResourceCreateIn
TestDataFileResourceUpdateIn, TestDataFileResourceCreateIn, TestDataManifestationHistory, \
TestDataManifestationHistoryOut
from mapping_workbench.backend.test_data_suite.models.entity_api_response import \
APIListTestDataSuitesPaginatedResponse, APIListTestDataFileResourcesPaginatedResponse
from mapping_workbench.backend.test_data_suite.services import tasks
Expand All @@ -27,7 +28,7 @@
list_test_data_suite_file_resources,
create_test_data_suite_file_resource,
get_test_data_file_resource,
delete_test_data_file_resource, update_test_data_file_resource
delete_test_data_file_resource, update_test_data_file_resource, get_test_data_transform_history
)
from mapping_workbench.backend.test_data_suite.services.import_test_data_suite import \
import_test_data_suites_from_archive
Expand Down Expand Up @@ -416,3 +417,15 @@ async def route_task_import_test_data_suites(
):
await import_test_data_suites_from_archive(project, file, user)
return APIEmptyContentResponse()


@router.get(
"/file_resources/{id}/transform/history",
description=f"Get Test Data Transform History",
name=f"{FILE_RESOURCE_NAME_FOR_ONE}:get_transform_history",
)
async def route_get_test_data_file_resource_transform_history(
project: PydanticObjectId,
test_data_file_resource: TestDataFileResource = Depends(get_test_data_file_resource)
) -> List[TestDataManifestationHistoryOut]:
return await get_test_data_transform_history(test_data_file_resource, project)
25 changes: 23 additions & 2 deletions mapping_workbench/backend/test_data_suite/models/entity.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
from datetime import datetime
from enum import Enum
from typing import Optional, List

import pymongo
from beanie import Link, PydanticObjectId
from pydantic import BaseModel
from dateutil.tz import tzlocal
from pydantic import BaseModel, Field
from pymongo import IndexModel

from mapping_workbench.backend.core.models.base_entity import BaseEntityOutSchema
from mapping_workbench.backend.core.models.base_mapping_package_resource_entity import \
BaseMappingPackagesResourceSchemaTrait
from mapping_workbench.backend.core.models.base_project_resource_entity import BaseProjectResourceEntity
from mapping_workbench.backend.core.models.base_project_resource_entity import BaseProjectResourceEntity, \
BaseProjectAbleResourceEntity
from mapping_workbench.backend.file_resource.models.file_resource import FileResource, FileResourceCollection, \
FileResourceIn, FileResourceFormat, FileResourceState
from mapping_workbench.backend.package_validator.models.shacl_validation import SHACLTestDataValidationResult
Expand Down Expand Up @@ -61,6 +65,23 @@ class TestDataState(TestDataValidation, ObjectState):
rdf_manifestation: Optional[FileResourceState] = None


class TestDataManifestationHistory(BaseProjectAbleResourceEntity):
test_data_id: PydanticObjectId
in_manifestation: Optional[str] = None
out_manifestation: Optional[str] = None
created_at: Optional[datetime] = Field(default_factory=lambda: datetime.now(tzlocal()))

class Settings(FileResource.Settings):
name = "test_data_manifestation_history"


class TestDataManifestationHistoryOut(BaseEntityOutSchema):
test_data_id: PydanticObjectId
in_manifestation: Optional[str] = None
out_manifestation: Optional[str] = None
created_at: Optional[datetime] = Field(default_factory=lambda: datetime.now(tzlocal()))


class TestDataFileResource(FileResource, StatefulObjectABC):
identifier: Optional[str] = None
format: Optional[TestDataFileResourceFormat] = None
Expand Down
21 changes: 20 additions & 1 deletion mapping_workbench/backend/test_data_suite/services/api.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from typing import List

import pymongo
from beanie import PydanticObjectId

from mapping_workbench.backend.core.models.base_entity import BaseEntityFiltersSchema
Expand All @@ -9,8 +10,10 @@
from mapping_workbench.backend.mapping_package.models.entity import MappingPackage
from mapping_workbench.backend.mapping_package.services.link import unassign_resources_from_mapping_packages, \
ResourceField
from mapping_workbench.backend.project.models.entity import Project
from mapping_workbench.backend.test_data_suite.models.entity import TestDataSuite, TestDataFileResource, \
TestDataFileResourceUpdateIn, TestDataFileResourceCreateIn
TestDataFileResourceUpdateIn, TestDataFileResourceCreateIn, TestDataManifestationHistory, \
TestDataManifestationHistoryOut
from mapping_workbench.backend.test_data_suite.services.transform_test_data import transform_test_data_file_resource
from mapping_workbench.backend.user.models.user import User

Expand Down Expand Up @@ -136,3 +139,19 @@ async def get_test_data_file_resource(id: PydanticObjectId) -> TestDataFileResou

async def delete_test_data_file_resource(test_data_file_resource: TestDataFileResource):
return await test_data_file_resource.delete()


async def get_test_data_transform_history(
test_data_file_resource: TestDataFileResource,
project_id: PydanticObjectId
) -> List[TestDataManifestationHistoryOut]:
Project.link_from_id(project_id)
items: List[TestDataManifestationHistoryOut] = await TestDataManifestationHistory.find(
TestDataManifestationHistory.project == Project.link_from_id(project_id),
TestDataManifestationHistory.test_data_id == test_data_file_resource.id,
projection_model=TestDataManifestationHistoryOut,
fetch_links=False,
sort=[(str(TestDataManifestationHistory.created_at), pymongo.DESCENDING)]
).to_list()

return items
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from beanie import PydanticObjectId

from mapping_workbench.backend.project.models.entity import Project
from mapping_workbench.backend.test_data_suite.models.entity import TestDataFileResource, TestDataManifestationHistory


async def add_test_data_transform_to_history(
test_data_file_resource: TestDataFileResource,
project_id: PydanticObjectId
):
history_item = TestDataManifestationHistory(
project=Project.link_from_id(project_id),
test_data_id=test_data_file_resource.id,
in_manifestation=test_data_file_resource.content,
out_manifestation=test_data_file_resource.rdf_manifestation
)
await history_item.create()
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
TestDataSuiteState
from mapping_workbench.backend.test_data_suite.services import DATA_SOURCE_PATH_NAME, \
TRANSFORMATION_PATH_NAME, MAPPINGS_PATH_NAME, RESOURCES_PATH_NAME
from mapping_workbench.backend.test_data_suite.services.test_data_transform_history import \
add_test_data_transform_to_history
from mapping_workbench.backend.test_data_suite.services.data import get_test_data_file_resources_for_project, \
get_test_data_file_resources_for_package
from mapping_workbench.backend.triple_map_fragment.models.entity import TripleMapFragment, TripleMapFragmentState, \
Expand Down Expand Up @@ -119,7 +121,6 @@ async def transform_test_data_file_resource(
if not isinstance(rml_mapper, RMLMapperABC):
rml_mapper: RMLMapper = RMLMapper(rml_mapper_path=Path(settings.RML_MAPPER_PATH))


test_data_file_resource.rdf_manifestation = await transform_test_data_file_resource_content(
content=test_data_file_resource.content,
mappings=mappings,
Expand All @@ -137,6 +138,11 @@ async def transform_test_data_file_resource(
if save:
await test_data_file_resource.save()

await add_test_data_transform_to_history(
test_data_file_resource=test_data_file_resource,
project_id=project_id
)

return test_data_file_resource


Expand Down

0 comments on commit 3c1e667

Please sign in to comment.