Coverage for src/bioimageio/spec/dataset/v0_3.py: 98%
49 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-18 09:17 +0000
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-18 09:17 +0000
1from __future__ import annotations
3from typing import TYPE_CHECKING, Any, ClassVar, Dict, Literal, cast
5from pydantic import model_validator
7from .._internal.common_nodes import InvalidDescr
8from .._internal.io import FileDescr as FileDescr
9from .._internal.io_basics import Sha256 as Sha256
10from .._internal.types import FAIR
11from .._internal.url import HttpUrl as HttpUrl
12from ..generic.v0_3 import VALID_COVER_IMAGE_EXTENSIONS as VALID_COVER_IMAGE_EXTENSIONS
13from ..generic.v0_3 import Author as Author
14from ..generic.v0_3 import BadgeDescr as BadgeDescr
15from ..generic.v0_3 import BioimageioConfig as BioimageioConfig
16from ..generic.v0_3 import CiteEntry as CiteEntry
17from ..generic.v0_3 import Config as Config
18from ..generic.v0_3 import DeprecatedLicenseId as DeprecatedLicenseId
19from ..generic.v0_3 import Doi as Doi
20from ..generic.v0_3 import (
21 GenericDescrBase,
22 LinkedResourceBase,
23 _author_conv, # pyright: ignore[reportPrivateUsage]
24 _maintainer_conv, # pyright: ignore[reportPrivateUsage]
25)
26from ..generic.v0_3 import LicenseId as LicenseId
27from ..generic.v0_3 import LinkedResource as LinkedResource
28from ..generic.v0_3 import Maintainer as Maintainer
29from ..generic.v0_3 import OrcidId as OrcidId
30from ..generic.v0_3 import RelativeFilePath as RelativeFilePath
31from ..generic.v0_3 import ResourceId as ResourceId
32from ..generic.v0_3 import Uploader as Uploader
33from ..generic.v0_3 import Version as Version
34from .v0_2 import DatasetDescr as DatasetDescr02
37class DatasetId(ResourceId):
38 pass
41class DatasetDescr(GenericDescrBase):
42 """A bioimage.io dataset resource description file (dataset RDF) describes a dataset relevant to bioimage
43 processing.
44 """
46 implemented_type: ClassVar[Literal["dataset"]] = "dataset"
47 if TYPE_CHECKING:
48 type: Literal["dataset"] = "dataset"
49 else:
50 type: Literal["dataset"]
52 id: DatasetId | None = None
53 """bioimage.io-wide unique resource identifier
54 assigned by bioimage.io; version **un**specific."""
56 parent: DatasetId | None = None
57 """The description from which this one is derived"""
59 source: FAIR[HttpUrl | None] = None
60 """"URL to the source of the dataset."""
62 @model_validator(mode="before")
63 @classmethod
64 def _convert(cls, data: dict[str, Any], /) -> dict[str, Any]:
65 if (
66 data.get("type") == "dataset"
67 and isinstance(fv := data.get("format_version"), str)
68 and fv.startswith("0.2.")
69 ):
70 old = DatasetDescr02.load(data)
71 if isinstance(old, InvalidDescr):
72 return data
74 return cast(
75 Dict[str, Any],
76 (cls if TYPE_CHECKING else dict)(
77 attachments=(
78 []
79 if old.attachments is None
80 else [FileDescr(source=f) for f in old.attachments.files]
81 ),
82 authors=[_author_conv.convert_as_dict(a) for a in old.authors], # pyright: ignore[reportArgumentType]
83 badges=old.badges,
84 cite=[
85 {"text": c.text, "doi": c.doi, "url": c.url} for c in old.cite
86 ], # pyright: ignore[reportArgumentType]
87 config=old.config, # pyright: ignore[reportArgumentType]
88 covers=[{"source": c} for c in old.covers], # pyright: ignore[reportArgumentType]
89 description=old.description,
90 documentation={"source": old.documentation}
91 if old.documentation
92 else None, # pyright: ignore[reportArgumentType]
93 format_version="0.3.4",
94 git_repo=old.git_repo, # pyright: ignore[reportArgumentType]
95 icon={"source": old.icon} if old.icon else None, # pyright: ignore[reportArgumentType]
96 id=None if old.id is None else DatasetId(old.id),
97 license=old.license, # type: ignore
98 links=old.links,
99 maintainers=[
100 _maintainer_conv.convert_as_dict(m) for m in old.maintainers
101 ], # pyright: ignore[reportArgumentType]
102 name=old.name,
103 source=old.source,
104 tags=old.tags,
105 type=old.type,
106 uploader=old.uploader,
107 version=old.version,
108 **(old.model_extra or {}),
109 ),
110 )
112 return data
115class LinkedDataset(LinkedResourceBase):
116 """Reference to a bioimage.io dataset."""
118 id: DatasetId
119 """A valid dataset `id` from the bioimage.io collection."""