Skip to content

Commit

Permalink
Remove "instance" field in serialization of linkml validation errors
Browse files Browse the repository at this point in the history
  • Loading branch information
candleindark committed Sep 16, 2024
1 parent d66d9ca commit 1063dde
Showing 1 changed file with 32 additions and 10 deletions.
42 changes: 32 additions & 10 deletions src/dandisets_linkml_status_tools/cli/models.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,11 @@
from datetime import datetime
from typing import Any
from typing import Annotated, Any

from dandi.dandiapi import VersionStatus
from linkml.validator.report import ValidationResult
from pydantic import BaseModel, Json, TypeAdapter
from pydantic import BaseModel, Json, PlainSerializer, TypeAdapter
from typing_extensions import TypedDict # Required for Python < 3.12 by Pydantic

DandisetMetadataType = dict[str, Any]
PydanticValidationErrsType = list[dict[str, Any]]
LinkmlValidationErrsType = list[ValidationResult]

dandiset_metadata_adapter = TypeAdapter(DandisetMetadataType)
pydantic_validation_errs_adapter = TypeAdapter(PydanticValidationErrsType)
linkml_validation_errs_adapter = TypeAdapter(LinkmlValidationErrsType)

# A `TypedDict` that has a key corresponding to each field in `ValidationResult`
# except for the `instance` field
TrimmedValidationResult = TypedDict(
Expand All @@ -26,6 +18,36 @@
)


def trim_validation_results(
errs: list[ValidationResult],
) -> list[TrimmedValidationResult]:
"""
Trim the `ValidationResult` objects in a list to exclude their `instance` field.
:param errs: The list of `ValidationResult` objects to be trimmed.
:return: The list of `TrimmedValidationResult` objects representing the trimmed
`ValidationResult` objects.
"""
trimmed_errs = []
for err in errs:
err_as_dict = err.model_dump()
del err_as_dict["instance"]
trimmed_errs.append(err_as_dict)
return trimmed_errs


DandisetMetadataType = dict[str, Any]
PydanticValidationErrsType = list[dict[str, Any]]
LinkmlValidationErrsType = Annotated[
list[ValidationResult], PlainSerializer(trim_validation_results)
]

dandiset_metadata_adapter = TypeAdapter(DandisetMetadataType)
pydantic_validation_errs_adapter = TypeAdapter(PydanticValidationErrsType)
linkml_validation_errs_adapter = TypeAdapter(LinkmlValidationErrsType)


class DandisetValidationReport(BaseModel):
"""
A report of validation results of a dandiset (metadata) against the
Expand Down

0 comments on commit 1063dde

Please sign in to comment.