Mercurial > hgrepos > Python > apps > py-cutils
changeset 274:224725fd9f2f
WalkDirEntry: add support for special files (character and block special, FIFO, socket, door, whiteout, event port, ...)
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Wed, 19 Feb 2025 16:42:44 +0100 |
| parents | c02a57df2a29 |
| children | c72f5b2dbc6f |
| files | cutils/util/walk.py tests/test_walk.py |
| diffstat | 2 files changed, 65 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/cutils/util/walk.py Wed Feb 19 09:12:30 2025 +0100 +++ b/cutils/util/walk.py Wed Feb 19 16:42:44 2025 +0100 @@ -236,6 +236,58 @@ return self._is_dir @property + def is_chr(self): + return (stat.S_ISCHR(self._stat_result.st_mode) + if self._stat_result is not None + else False) + + @property + def is_blk(self): + return (stat.S_ISBLK(self._stat_result.st_mode) + if self._stat_result is not None + else False) + + @property + def is_fifo(self): + return (stat.S_ISFIFO(self._stat_result.st_mode) + if self._stat_result is not None + else False) + + @property + def is_socket(self): + return (stat.S_ISSOCK(self._stat_result.st_mode) + if self._stat_result is not None + else False) + + @property + def is_door(self): + test = getattr(stat, "S_ISDOOR", None) + return (test(self._stat_result.st_mode) + if test and (self._stat_result is not None) + else False) + + @property + def is_eventport(self): + test = getattr(stat, "S_ISPORT", None) + return (test(self._stat_result.st_mode) + if test and (self._stat_result is not None) + else False) + + @property + def is_whiteout(self): + test = getattr(stat, "S_ISWHT", None) + return (test(self._stat_result.st_mode) + if test and (self._stat_result is not None) + else False) + + @property + def is_special(self): + """Anything besides a regular file and a directory""" + if self._stat_result is None: + return False + return not (self.is_reg or self.is_dir) + + @property def stat(self): return self._stat_result
--- a/tests/test_walk.py Wed Feb 19 09:12:30 2025 +0100 +++ b/tests/test_walk.py Wed Feb 19 16:42:44 2025 +0100 @@ -210,6 +210,7 @@ self.assertFalse(entry.is_reg) self.assertTrue(entry.is_dir) self.assertIsNotNone(entry.stat) + self.assertFalse(entry.is_special) def test_broken_symlink_to_directory(self): entry = walk.WalkDirEntry.from_path_name( @@ -218,6 +219,7 @@ self.assertFalse(entry.is_reg) self.assertFalse(entry.is_dir) self.assertIsNone(entry.stat) + self.assertFalse(entry.is_special) def test_real_directory(self): entry = walk.WalkDirEntry.from_path_name( @@ -226,6 +228,7 @@ self.assertFalse(entry.is_reg) self.assertTrue(entry.is_dir) self.assertIsNotNone(entry.stat) + self.assertFalse(entry.is_special) def test_symlink_to_file(self): entry = walk.WalkDirEntry.from_path_name( @@ -234,6 +237,7 @@ self.assertTrue(entry.is_reg) self.assertFalse(entry.is_dir) self.assertIsNotNone(entry.stat) + self.assertFalse(entry.is_special) def test_broken_symlink_to_file(self): entry = walk.WalkDirEntry.from_path_name( @@ -242,6 +246,7 @@ self.assertFalse(entry.is_reg) self.assertFalse(entry.is_dir) self.assertIsNone(entry.stat) + self.assertFalse(entry.is_special) def test_real_file(self): entry = walk.WalkDirEntry.from_path_name( @@ -250,6 +255,7 @@ self.assertTrue(entry.is_reg) self.assertFalse(entry.is_dir) self.assertIsNotNone(entry.stat) + self.assertFalse(entry.is_special) def test_real_file_via_dir_symlink(self): entry = walk.WalkDirEntry.from_path_name( @@ -258,6 +264,7 @@ self.assertTrue(entry.is_reg) self.assertFalse(entry.is_dir) self.assertIsNotNone(entry.stat) + self.assertFalse(entry.is_special) @unittest.skipIf(not hasattr(os, "mkfifo"), "Needs os.mkfifo()") @@ -279,6 +286,8 @@ self.assertFalse(entry.is_reg) self.assertFalse(entry.is_dir) self.assertIsNotNone(entry.stat) + self.assertTrue(entry.is_fifo) + self.assertTrue(entry.is_special) def test_symlink_to_mkfifo(self): fifopath = os.path.join(TMPDIR, "test.fifo") @@ -290,6 +299,8 @@ self.assertFalse(entry.is_reg) self.assertFalse(entry.is_dir) self.assertIsNotNone(entry.stat) + self.assertTrue(entry.is_fifo) + self.assertTrue(entry.is_special) def test_broken_symlink_to_mkfifo(self): fifopath = os.path.join(TMPDIR, "test.fifo") @@ -302,6 +313,8 @@ self.assertFalse(entry.is_reg) self.assertFalse(entry.is_dir) self.assertIsNone(entry.stat) + self.assertFalse(entry.is_fifo) + self.assertFalse(entry.is_special) if __name__ == "__main__":
