[pypy-commit] pypy py3.6: test, add posix.getgrouplist (part of issue 2375)

mattip pypy.commits at gmail.com
Sun Dec 1 14:58:33 EST 2019


Author: Matti Picus <matti.picus at gmail.com>
Branch: py3.6
Changeset: r98205:95e1a6902283
Date: 2019-12-01 21:53 +0200
http://bitbucket.org/pypy/pypy/changeset/95e1a6902283/

Log:	test, add posix.getgrouplist (part of issue 2375)

diff --git a/pypy/module/posix/interp_posix.py b/pypy/module/posix/interp_posix.py
--- a/pypy/module/posix/interp_posix.py
+++ b/pypy/module/posix/interp_posix.py
@@ -1813,6 +1813,23 @@
     except OSError as e:
         raise wrap_oserror(space, e, eintr_retry=False)
 
+ at unwrap_spec(username='text', gid=c_gid_t)
+def getgrouplist(space, username, gid):
+    """
+    getgrouplist(user, group) -> list of groups to which a user belongs
+
+    Returns a list of groups to which a user belongs.
+
+    user: username to lookup
+    group: base group id of the user
+    """
+    try:
+        groups = rposix.getgrouplist(username, gid)
+        return space.newlist([space.newint(g) for g in groups])
+    except OSError as e:
+        raise wrap_oserror(space, e)
+
+
 def getpgrp(space):
     """ getpgrp() -> pgrp
 
diff --git a/pypy/module/posix/moduledef.py b/pypy/module/posix/moduledef.py
--- a/pypy/module/posix/moduledef.py
+++ b/pypy/module/posix/moduledef.py
@@ -207,6 +207,7 @@
         interpleveldefs['sync'] = 'interp_posix.sync'
         interpleveldefs['get_blocking'] = 'interp_posix.get_blocking'
         interpleveldefs['set_blocking'] = 'interp_posix.set_blocking'
+        interpleveldefs['getgrouplist'] = 'interp_posix.getgrouplist'
 
     if hasattr(rposix, 'getpriority'):
         interpleveldefs['getpriority'] = 'interp_posix.getpriority'
diff --git a/pypy/module/posix/test/test_posix2.py b/pypy/module/posix/test/test_posix2.py
--- a/pypy/module/posix/test/test_posix2.py
+++ b/pypy/module/posix/test/test_posix2.py
@@ -1369,7 +1369,6 @@
             raises(OSError, posix.get_blocking, 1234567)
             raises(OSError, posix.set_blocking, 1234567, True)
 
-    if sys.platform != 'win32':
         def test_sendfile(self):
             import _socket, posix
             s1, s2 = _socket.socketpair()
@@ -1393,6 +1392,13 @@
             fd = posix.open(memoryview(pdir), posix.O_RDONLY)
             posix.close(fd)
 
+        def test_getgrouplist(self):
+            import posix, getpass
+            gid = posix.getgid()
+            user = getpass.getuser()
+            groups = posix.getgrouplist(user, gid)
+            assert gid in groups
+
     if sys.platform.startswith('linux'):
         def test_sendfile_no_offset(self):
             import _socket, posix


More information about the pypy-commit mailing list