Skip to content

Commit b70140a

Browse files
committed
Add some missing methods to FakePipeWrapper
- add readable, writable and seekable - see #650
1 parent 38a5589 commit b70140a

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

Diff for: CHANGES.md

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ The released versions correspond to PyPi releases.
33

44
## Version 4.6.0 (as yet unreleased)
55

6+
### Fixes
7+
* added missing mocked functions for fake pipe (see [#650](../../issues/650))
8+
9+
610
## [Version 4.5.3](https://pypi.python.org/pypi/pyfakefs/4.5.3) (2021-11-08)
711
Reverts a change in the previous release that could cause a regression.
812

Diff for: pyfakefs/fake_filesystem.py

+19-6
Original file line numberDiff line numberDiff line change
@@ -518,8 +518,7 @@ def path(self) -> AnyStr:
518518
dir_path = sep + dir_path
519519
else:
520520
dir_path = sep.join(names)
521-
dir_path = self.filesystem.absnormpath(dir_path)
522-
return dir_path
521+
return self.filesystem.absnormpath(dir_path)
523522

524523
@Deprecator('property path')
525524
def GetPath(self):
@@ -3933,10 +3932,10 @@ def write(self, fd: int, contents: bytes) -> int:
39333932

39343933
def pipe(self) -> Tuple[int, int]:
39353934
read_fd, write_fd = os.pipe()
3936-
read_wrapper = FakePipeWrapper(self.filesystem, read_fd)
3935+
read_wrapper = FakePipeWrapper(self.filesystem, read_fd, False)
39373936
file_des = self.filesystem._add_open_file(read_wrapper)
39383937
read_wrapper.filedes = file_des
3939-
write_wrapper = FakePipeWrapper(self.filesystem, write_fd)
3938+
write_wrapper = FakePipeWrapper(self.filesystem, write_fd, True)
39403939
file_des = self.filesystem._add_open_file(write_wrapper)
39413940
write_wrapper.filedes = file_des
39423941
return read_wrapper.filedes, write_wrapper.filedes
@@ -5429,9 +5428,10 @@ class FakePipeWrapper:
54295428
used in open files list.
54305429
"""
54315430

5432-
def __init__(self, filesystem: FakeFilesystem, fd: int):
5431+
def __init__(self, filesystem: FakeFilesystem, fd: int, can_write: bool):
54335432
self._filesystem = filesystem
54345433
self.fd = fd # the real file descriptor
5434+
self.can_write = can_write
54355435
self.file_object = None
54365436
self.filedes: Optional[int] = None
54375437

@@ -5475,6 +5475,18 @@ def close(self) -> None:
54755475
open_files.remove(self)
54765476
os.close(self.fd)
54775477

5478+
def readable(self) -> bool:
5479+
"""The pipe end can either be readable or writable."""
5480+
return not self.can_write
5481+
5482+
def writable(self) -> bool:
5483+
"""The pipe end can either be readable or writable."""
5484+
return self.can_write
5485+
5486+
def seekable(self) -> bool:
5487+
"""A pipe is not seekable."""
5488+
return False
5489+
54785490

54795491
Deprecator.add(FakeFileWrapper, FakeFileWrapper.get_object, 'GetObject')
54805492
Deprecator.add(FakeFileWrapper, FakeFileWrapper.size, 'Size')
@@ -5559,7 +5571,8 @@ def call(self, file_: Union[AnyStr, int],
55595571
assert wrappers is not None
55605572
existing_wrapper = wrappers[0]
55615573
assert isinstance(existing_wrapper, FakePipeWrapper)
5562-
wrapper = FakePipeWrapper(self.filesystem, existing_wrapper.fd)
5574+
wrapper = FakePipeWrapper(self.filesystem, existing_wrapper.fd,
5575+
existing_wrapper.can_write)
55635576
file_des = self.filesystem._add_open_file(wrapper)
55645577
wrapper.filedes = file_des
55655578
return wrapper

0 commit comments

Comments
 (0)