From 22386bb4ef740ee92d34c87b8cb90d681423a853 Mon Sep 17 00:00:00 2001 From: Barney Gale Date: Fri, 17 Apr 2020 17:41:07 +0100 Subject: [PATCH] bpo-39901: Move `pathlib.Path.owner()` and `group()` implementations into the path accessor. (GH-18844) --- Lib/pathlib.py | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 96b8b59530c..d2053e62845 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -447,6 +447,20 @@ class _NormalAccessor(_Accessor): def readlink(self, path): return os.readlink(path) + def owner(self, path): + try: + import pwd + return pwd.getpwuid(self.stat(path).st_uid).pw_name + except ImportError: + raise NotImplementedError("Path.owner() is unsupported on this system") + + def group(self, path): + try: + import grp + return grp.getgrgid(self.stat(path).st_gid).gr_name + except ImportError: + raise NotImplementedError("Path.group() is unsupported on this system") + _normal_accessor = _NormalAccessor() @@ -1202,15 +1216,13 @@ class Path(PurePath): """ Return the login name of the file owner. """ - import pwd - return pwd.getpwuid(self.stat().st_uid).pw_name + return self._accessor.owner(self) def group(self): """ Return the group name of the file gid. """ - import grp - return grp.getgrgid(self.stat().st_gid).gr_name + return self._accessor.group(self) def open(self, mode='r', buffering=-1, encoding=None, errors=None, newline=None): @@ -1544,11 +1556,5 @@ class WindowsPath(Path, PureWindowsPath): """ __slots__ = () - def owner(self): - raise NotImplementedError("Path.owner() is unsupported on this system") - - def group(self): - raise NotImplementedError("Path.group() is unsupported on this system") - def is_mount(self): raise NotImplementedError("Path.is_mount() is unsupported on this system")