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

47 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-06-27 09:20 +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.url import HttpUrl as HttpUrl 

9from ..generic.v0_3 import VALID_COVER_IMAGE_EXTENSIONS as VALID_COVER_IMAGE_EXTENSIONS 

10from ..generic.v0_3 import Author as Author 

11from ..generic.v0_3 import BadgeDescr as BadgeDescr 

12from ..generic.v0_3 import BioimageioConfig as BioimageioConfig 

13from ..generic.v0_3 import CiteEntry as CiteEntry 

14from ..generic.v0_3 import Config as Config 

15from ..generic.v0_3 import DeprecatedLicenseId as DeprecatedLicenseId 

16from ..generic.v0_3 import Doi as Doi 

17from ..generic.v0_3 import ( 

18 GenericDescrBase, 

19 LinkedResourceBase, 

20 _author_conv, # pyright: ignore[reportPrivateUsage] 

21 _maintainer_conv, # pyright: ignore[reportPrivateUsage] 

22) 

23from ..generic.v0_3 import LicenseId as LicenseId 

24from ..generic.v0_3 import LinkedResource as LinkedResource 

25from ..generic.v0_3 import Maintainer as Maintainer 

26from ..generic.v0_3 import OrcidId as OrcidId 

27from ..generic.v0_3 import RelativeFilePath as RelativeFilePath 

28from ..generic.v0_3 import ResourceId as ResourceId 

29from ..generic.v0_3 import Uploader as Uploader 

30from ..generic.v0_3 import Version as Version 

31from .v0_2 import DatasetDescr as DatasetDescr02 

32 

33 

34class DatasetId(ResourceId): 

35 pass 

36 

37 

38class DatasetDescr(GenericDescrBase): 

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

40 processing. 

41 """ 

42 

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

44 if TYPE_CHECKING: 

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

46 else: 

47 type: Literal["dataset"] 

48 

49 id: Optional[DatasetId] = None 

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

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

52 

53 parent: Optional[DatasetId] = None 

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

55 

56 source: Optional[HttpUrl] = None 

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

58 

59 @model_validator(mode="before") 

60 @classmethod 

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

62 if ( 

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

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

65 and fv.startswith("0.2.") 

66 ): 

67 old = DatasetDescr02.load(data) 

68 if isinstance(old, InvalidDescr): 

69 return data 

70 

71 return cast( 

72 Dict[str, Any], 

73 (cls if TYPE_CHECKING else dict)( 

74 attachments=( 

75 [] 

76 if old.attachments is None 

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

78 ), 

79 authors=[ 

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

81 ], # pyright: ignore[reportArgumentType] 

82 badges=old.badges, 

83 cite=[ 

84 {"text": c.text, "doi": c.doi, "url": c.url} for c in old.cite 

85 ], # pyright: ignore[reportArgumentType] 

86 config=old.config, # pyright: ignore[reportArgumentType] 

87 covers=old.covers, 

88 description=old.description, 

89 documentation=old.documentation, 

90 format_version="0.3.0", 

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

92 icon=old.icon, 

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

94 license=old.license, # type: ignore 

95 links=old.links, 

96 maintainers=[ 

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

98 ], # pyright: ignore[reportArgumentType] 

99 name=old.name, 

100 source=old.source, 

101 tags=old.tags, 

102 type=old.type, 

103 uploader=old.uploader, 

104 version=old.version, 

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

106 ), 

107 ) 

108 

109 return data 

110 

111 

112class LinkedDataset(LinkedResourceBase): 

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

114 

115 id: DatasetId 

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