Coverage for bioimageio/spec/dataset/v0_3.py: 98%

48 statements  

« prev     ^ index     » next       coverage.py v7.10.3, created at 2025-08-12 17:44 +0000

1from typing import TYPE_CHECKING, Any, ClassVar, Dict, Literal, Optional, cast 

2 

3from pydantic import model_validator 

4 

5from .._internal.common_nodes import InvalidDescr 

6from .._internal.io import FileDescr as FileDescr 

7from .._internal.io_basics import Sha256 as Sha256 

8from .._internal.types import FAIR 

9from .._internal.url import HttpUrl as HttpUrl 

10from ..generic.v0_3 import VALID_COVER_IMAGE_EXTENSIONS as VALID_COVER_IMAGE_EXTENSIONS 

11from ..generic.v0_3 import Author as Author 

12from ..generic.v0_3 import BadgeDescr as BadgeDescr 

13from ..generic.v0_3 import BioimageioConfig as BioimageioConfig 

14from ..generic.v0_3 import CiteEntry as CiteEntry 

15from ..generic.v0_3 import Config as Config 

16from ..generic.v0_3 import DeprecatedLicenseId as DeprecatedLicenseId 

17from ..generic.v0_3 import Doi as Doi 

18from ..generic.v0_3 import ( 

19 GenericDescrBase, 

20 LinkedResourceBase, 

21 _author_conv, # pyright: ignore[reportPrivateUsage] 

22 _maintainer_conv, # pyright: ignore[reportPrivateUsage] 

23) 

24from ..generic.v0_3 import LicenseId as LicenseId 

25from ..generic.v0_3 import LinkedResource as LinkedResource 

26from ..generic.v0_3 import Maintainer as Maintainer 

27from ..generic.v0_3 import OrcidId as OrcidId 

28from ..generic.v0_3 import RelativeFilePath as RelativeFilePath 

29from ..generic.v0_3 import ResourceId as ResourceId 

30from ..generic.v0_3 import Uploader as Uploader 

31from ..generic.v0_3 import Version as Version 

32from .v0_2 import DatasetDescr as DatasetDescr02 

33 

34 

35class DatasetId(ResourceId): 

36 pass 

37 

38 

39class DatasetDescr(GenericDescrBase): 

40 """A bioimage.io dataset resource description file (dataset RDF) describes a dataset relevant to bioimage 

41 processing. 

42 """ 

43 

44 implemented_type: ClassVar[Literal["dataset"]] = "dataset" 

45 if TYPE_CHECKING: 

46 type: Literal["dataset"] = "dataset" 

47 else: 

48 type: Literal["dataset"] 

49 

50 id: Optional[DatasetId] = None 

51 """bioimage.io-wide unique resource identifier 

52 assigned by bioimage.io; version **un**specific.""" 

53 

54 parent: Optional[DatasetId] = None 

55 """The description from which this one is derived""" 

56 

57 source: FAIR[Optional[HttpUrl]] = None 

58 """"URL to the source of the dataset.""" 

59 

60 @model_validator(mode="before") 

61 @classmethod 

62 def _convert(cls, data: Dict[str, Any], /) -> Dict[str, Any]: 

63 if ( 

64 data.get("type") == "dataset" 

65 and isinstance(fv := data.get("format_version"), str) 

66 and fv.startswith("0.2.") 

67 ): 

68 old = DatasetDescr02.load(data) 

69 if isinstance(old, InvalidDescr): 

70 return data 

71 

72 return cast( 

73 Dict[str, Any], 

74 (cls if TYPE_CHECKING else dict)( 

75 attachments=( 

76 [] 

77 if old.attachments is None 

78 else [FileDescr(source=f) for f in old.attachments.files] 

79 ), 

80 authors=[ 

81 _author_conv.convert_as_dict(a) for a in old.authors 

82 ], # 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=old.covers, 

89 description=old.description, 

90 documentation=old.documentation, 

91 format_version="0.3.0", 

92 git_repo=old.git_repo, # pyright: ignore[reportArgumentType] 

93 icon=old.icon, 

94 id=None if old.id is None else DatasetId(old.id), 

95 license=old.license, # type: ignore 

96 links=old.links, 

97 maintainers=[ 

98 _maintainer_conv.convert_as_dict(m) for m in old.maintainers 

99 ], # pyright: ignore[reportArgumentType] 

100 name=old.name, 

101 source=old.source, 

102 tags=old.tags, 

103 type=old.type, 

104 uploader=old.uploader, 

105 version=old.version, 

106 **(old.model_extra or {}), 

107 ), 

108 ) 

109 

110 return data 

111 

112 

113class LinkedDataset(LinkedResourceBase): 

114 """Reference to a bioimage.io dataset.""" 

115 

116 id: DatasetId 

117 """A valid dataset `id` from the bioimage.io collection."""