Skip to content

Commit fbdd303

Browse files
authored
Merge pull request #270 from Oxid15/missing_init
Handle missing init calls for Dataset
2 parents f210f64 + f08b85d commit fbdd303

File tree

2 files changed

+47
-9
lines changed

2 files changed

+47
-9
lines changed

cascade/data/dataset.py

+13-7
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@
1313

1414
import warnings
1515
from abc import ABC, abstractmethod
16-
from typing import (Any, Generic, Iterable, Iterator, Optional, Sequence,
17-
Sized, TypeVar)
16+
from typing import Any, Generic, Iterable, Iterator, Optional, Sequence, Sized, TypeVar
1817

1918
from ..base import Meta, Traceable
2019
from .data_card import DataCard
@@ -46,8 +45,13 @@ def get_meta(self) -> Meta:
4645
"""
4746
meta = super().get_meta()
4847
meta[0]["type"] = "dataset"
49-
if self._data_card is not None:
50-
meta[0]["data_card"] = self._data_card.to_dict()
48+
49+
# Someone may've missed the __init__ call and there
50+
# will be no self._data_card
51+
data_card = getattr(self, "_data_card", None)
52+
if data_card:
53+
data_card = data_card.to_dict()
54+
meta[0]["data_card"] = data_card
5155
return meta
5256

5357

@@ -133,7 +137,9 @@ def get_meta(self) -> Meta:
133137

134138
class SizedDataset(Dataset):
135139
def __init__(self, *args: Any, **kwargs: Any) -> None:
136-
warnings.warn("SizedDataset is deprecated since 0.14.0."
137-
" Consider using older version or migrate to"
138-
" Dataset, which is sized by default now")
140+
warnings.warn(
141+
"SizedDataset is deprecated since 0.14.0."
142+
" Consider using older version or migrate to"
143+
" Dataset, which is sized by default now"
144+
)
139145
super().__init__(*args, **kwargs)

cascade/tests/data/test_dataset.py

+34-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,14 @@
2424
MODULE_PATH = os.path.dirname(os.path.abspath(os.path.dirname(__file__)))
2525
sys.path.append(os.path.dirname(MODULE_PATH))
2626

27-
from cascade.data import (BaseDataset, IteratorWrapper, Modifier, Sampler,
28-
Wrapper)
27+
from cascade.data import (
28+
BaseDataset,
29+
Dataset,
30+
IteratorWrapper,
31+
Modifier,
32+
Sampler,
33+
Wrapper,
34+
)
2935

3036

3137
class DummyDataset(BaseDataset):
@@ -131,3 +137,29 @@ def test_modifier_from_meta():
131137
def test_sampler():
132138
ds = Wrapper([1, 2, 3, 4])
133139
ds = Sampler(ds, 10)
140+
141+
assert len(ds) == 10
142+
143+
144+
class EmptyDataset(Dataset):
145+
def __init__(self):
146+
# Here we intenstionally do not call super().__init__()
147+
# which is very common in practice and I think for now
148+
# there is no need to actively forbid this
149+
...
150+
151+
def __getitem__(self, index):
152+
return None
153+
154+
def __len__(self):
155+
return 0
156+
157+
158+
def test_no_init_call():
159+
ds = EmptyDataset()
160+
161+
assert ds[0] == None
162+
163+
meta = ds.get_meta()
164+
165+
assert len(meta) == 1

0 commit comments

Comments
 (0)