Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 15 additions & 4 deletions histolab/slide.py
Original file line number Diff line number Diff line change
Expand Up @@ -510,11 +510,16 @@ class SlideSet:
"""Slideset object. It is considered a collection of Slides."""

def __init__(
self, slides_path: str, processed_path: str, valid_extensions: list
self,
slides_path: str,
processed_path: str,
valid_extensions: List[str],
keep_slides: List[str] = None,
) -> None:
self._slides_path = slides_path
self._processed_path = processed_path
self._valid_extensions = valid_extensions
self._keep_slides = keep_slides

def __iter__(self) -> Iterator[Slide]:
"""Slides of the slideset
Expand All @@ -523,11 +528,17 @@ def __iter__(self) -> Iterator[Slide]:
-------
generator of `Slide` objects.
"""
slide_names = [
name
for name in os.listdir(self._slides_path)
if (os.path.splitext(name)[1] in self._valid_extensions)
]
if self._keep_slides is not None:
slide_names = [name for name in slide_names if name in self._keep_slides]
return iter(
[
Slide(os.path.join(self._slides_path, _path), self._processed_path)
for _path in os.listdir(self._slides_path)
if os.path.splitext(_path)[1] in self._valid_extensions
Slide(os.path.join(self._slides_path, name), self._processed_path)
for name in slide_names
]
)

Expand Down
21 changes: 17 additions & 4 deletions tests/unit/test_slide.py
Original file line number Diff line number Diff line change
Expand Up @@ -453,15 +453,22 @@ def it_constructs_from_args(self, request):
_slides_path = "/foo/bar/"
_processed_path = "/foo/bar/wsislides/processed"
_valid_extensions = [".svs", ".tiff"]
_keep_slides = ["mywsi.svs"]

slideset = SlideSet(_slides_path, _processed_path, _valid_extensions)
slideset = SlideSet(
_slides_path, _processed_path, _valid_extensions, _keep_slides
)

_init_.assert_called_once_with(
ANY, _slides_path, _processed_path, _valid_extensions
ANY,
_slides_path,
_processed_path,
_valid_extensions,
_keep_slides,
)
assert isinstance(slideset, SlideSet)

def it_can_constructs_slides(self, request, tmpdir, Slide_):
def it_can_construct_slides(self, request, tmpdir, Slide_):
tmp_path_ = tmpdir.mkdir("myslide")
slides_ = method_mock(request, SlideSet, "__iter__")
slides_.return_value = [Slide_ for _ in range(10)]
Expand All @@ -475,9 +482,15 @@ def it_can_constructs_slides(self, request, tmpdir, Slide_):
def it_knows_its_slides(self, tmpdir):
tmp_path_ = tmpdir.mkdir("myslide")
image = PILIMG.RGBA_COLOR_500X500_155_249_240
image.save(os.path.join(tmp_path_, "mywsi.svs"), "TIFF")
image.save(os.path.join(tmp_path_, "mywsi1.svs"), "TIFF")
image.save(os.path.join(tmp_path_, "mywsi2.svs"), "TIFF")
slideset = SlideSet(tmp_path_, "proc", [".svs"])

assert len(slideset) == 2

# it can keep a subset of slides
slideset = SlideSet(tmp_path_, "proc", [".svs"], keep_slides=["mywsi1.svs"])

assert len(slideset) == 1

slideset = SlideSet(None, "proc", [".svs"])
Expand Down