Skip to content

Commit dd01b9b

Browse files
authored
chore: descritpion.md are now optional (#417)
Signed-off-by: ThibaultFy <[email protected]>
1 parent d9961cc commit dd01b9b

File tree

4 files changed

+42
-2
lines changed

4 files changed

+42
-2
lines changed

changes/417.changed

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
`description.md` are now `Optional` in `DatasampleSpec`. If no description file is given, `Substra` will generate a template indicating how to add a custom description file during dataset registration.

references/sdk_schemas.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,12 @@ the 'paths' field.
3333
Specification for creating a dataset
3434

3535
note : metadata field does not accept strings containing '__' as dict key
36+
37+
note : If no description markdown file is given, create an empty one on the data_opener folder.
3638
```text
3739
- name: <class 'str'>
3840
- data_opener: <class 'pathlib.Path'>
39-
- description: <class 'pathlib.Path'>
41+
- description: typing.Optional[pathlib.Path]
4042
- permissions: <class 'substra.sdk.schemas.Permissions'>
4143
- metadata: typing.Optional[typing.Dict[str, str]]
4244
- logs_permission: <class 'substra.sdk.schemas.Permissions'>

substra/sdk/schemas.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@
1919
"summary_task": "task",
2020
}
2121

22+
GENERATED_DESCRIPTION_CONTENT = """
23+
# No description given
24+
25+
To add a dataset description, create a markdown file and pass it to your
26+
`substra.sdk.schemas.DatasetSpec` on your dataset opener registration.
27+
"""
28+
2229

2330
class BackendType(str, enum.Enum):
2431
REMOTE = "remote"
@@ -278,17 +285,30 @@ class DatasetSpec(_Spec):
278285
"""Specification for creating a dataset
279286
280287
note : metadata field does not accept strings containing '__' as dict key
288+
289+
note : If no description markdown file is given, create an empty one on the data_opener folder.
281290
"""
282291

283292
name: str
284293
data_opener: pathlib.Path # Path to the data opener
285-
description: pathlib.Path # Path to the description file
294+
description: Optional[pathlib.Path] = None # Path to the description file
286295
permissions: Permissions
287296
metadata: Optional[Dict[str, str]] = None
288297
logs_permission: Permissions
289298

290299
type_: typing.ClassVar[Type] = Type.Dataset
291300

301+
@pydantic.model_validator(mode="before")
302+
@classmethod
303+
def _check_description(cls, values):
304+
if "description" not in values:
305+
parent_path = pathlib.Path(values["data_opener"]).parent
306+
description_path = parent_path / "generated_description.md"
307+
with description_path.open("w", encoding="utf-8") as f:
308+
f.write(GENERATED_DESCRIPTION_CONTENT)
309+
values["description"] = description_path
310+
return values
311+
292312
class Meta:
293313
file_attributes = (
294314
"data_opener",

tests/sdk/test_schemas.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import pytest
55

66
from substra.sdk.schemas import DataSampleSpec
7+
from substra.sdk.schemas import DatasetSpec
8+
from substra.sdk.schemas import Permissions
79

810

911
@pytest.mark.parametrize("path", [pathlib.Path() / "data", "./data", pathlib.Path().cwd() / "data"])
@@ -38,3 +40,18 @@ def test_datasample_spec_paths_set_to_none():
3840
def test_datasample_spec_path_set_to_none():
3941
with pytest.raises(ValueError):
4042
DataSampleSpec(path=None, data_manager_keys=[str(uuid.uuid4())])
43+
44+
45+
def test_dataset_spec_no_description(tmpdir):
46+
47+
opener_path = tmpdir / "fake_opener.py"
48+
permissions = Permissions(public=True, authorized_ids=[])
49+
50+
DatasetSpec(
51+
name="Fake Dataset",
52+
data_opener=str(opener_path),
53+
permissions=permissions,
54+
logs_permission=permissions,
55+
)
56+
57+
assert (pathlib.Path(opener_path).parent / "generated_description.md").exists

0 commit comments

Comments
 (0)