From 5d5e3805c33f0d9d09644b77e98edb0fa699285b Mon Sep 17 00:00:00 2001 From: Roel Bruggink Date: Thu, 11 Jun 2015 18:51:38 +0200 Subject: [PATCH] Added support for userid in plone.api.env.adopt_user. Refs #204 --- docs/CHANGES.rst | 3 +++ src/plone/api/env.py | 25 +++++++++++++------------ src/plone/api/tests/test_env.py | 15 +++++++++++++-- src/plone/api/user.py | 4 ++-- 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/docs/CHANGES.rst b/docs/CHANGES.rst index cfa00104..897814c7 100644 --- a/docs/CHANGES.rst +++ b/docs/CHANGES.rst @@ -4,6 +4,9 @@ Changelog 1.3.3 (unreleased) ------------------ +- plone.api.env.adopt_user now supports userid too. Refs #204. + [jaroel] + - api.plone.org docs point to docs.plone.org/external/plone.api/docs/. Refs #202 [jaroel] diff --git a/src/plone/api/env.py b/src/plone/api/env.py index 1214365e..9425e11c 100644 --- a/src/plone/api/env.py +++ b/src/plone/api/env.py @@ -18,9 +18,9 @@ IS_TEST = None -@at_least_one_of('username', 'user') -@mutually_exclusive_parameters('username', 'user') -def adopt_user(username=None, user=None): +@at_least_one_of('username', 'user', 'userid') +@mutually_exclusive_parameters('username', 'user', 'userid') +def adopt_user(username=None, user=None, userid=None): """Context manager for temporarily switching user inside a block. :param user: User object to switch to inside block. @@ -37,16 +37,17 @@ def adopt_user(username=None, user=None): plone = portal.get() acls = [plone.acl_users, plone.__parent__.acl_users] - if username is None: - for acl_users in acls: - unwrapped = acl_users.getUserById(user.getId()) - if unwrapped: - break + if username is not None: + accessor = 'getUser' # acl_users.getUser + key = username else: - for acl_users in acls: - unwrapped = acl_users.getUser(username) - if unwrapped: - break + accessor = 'getUserById' # acl_users.getUserById + key = userid or user.getId() + + for acl_users in acls: + unwrapped = getattr(acl_users, accessor)(key) + if unwrapped: + break if unwrapped is None: raise UserNotFoundError diff --git a/src/plone/api/tests/test_env.py b/src/plone/api/tests/test_env.py index 8b7712ed..c02746f2 100644 --- a/src/plone/api/tests/test_env.py +++ b/src/plone/api/tests/test_env.py @@ -419,7 +419,18 @@ def test_zope_version(self): '^(\d+\.\d+|\d+\.\d+\.\d+)(a\d+|b\d+|rc\d+)?$' ) - def test_adopt_user_different_username(self): - user = api.user.get(userid=TEST_USER_ID) + def test_adopt_user_by_userid(self): + with api.env.adopt_user(userid=TEST_USER_ID): + self.assertEqual(api.user.get_current().getId(), TEST_USER_ID) + + def test_adopt_user_by_username(self): + acl_users = api.portal.get().acl_users + user = acl_users.getUserById(TEST_USER_ID) + with api.env.adopt_user(username=user.getUserName()): + self.assertEqual(api.user.get_current().getId(), TEST_USER_ID) + + def test_adopt_user_by_user(self): + acl_users = api.portal.get().acl_users + user = acl_users.getUserById(TEST_USER_ID) with api.env.adopt_user(user=user): self.assertEqual(api.user.get_current().getId(), TEST_USER_ID) diff --git a/src/plone/api/user.py b/src/plone/api/user.py index 3270e963..81a06e34 100644 --- a/src/plone/api/user.py +++ b/src/plone/api/user.py @@ -198,8 +198,8 @@ def is_anonymous(): return bool(portal.get_tool('portal_membership').isAnonymousUser()) -@mutually_exclusive_parameters('username', 'user') -def get_roles(username=None, user=None, obj=None, inherit=True): +@mutually_exclusive_parameters('username', 'user', 'userid') +def get_roles(username=None, user=None, obj=None, inherit=True, userid=None): """Get user's site-wide or local roles. Arguments ``username`` and ``user`` are mutually exclusive. You