You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by tv...@apache.org on 2013/06/27 16:06:46 UTC

[1/3] git commit: [#6306] Make conditional safer; tweak doc string

Updated Branches:
  refs/heads/master 2641ebb3f -> f0ae88909


[#6306] Make conditional safer; tweak doc string

Signed-off-by: Tim Van Steenburgh <tv...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/f0ae8890
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/f0ae8890
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/f0ae8890

Branch: refs/heads/master
Commit: f0ae88909c3fa38d9c7673ea2db798320993c931
Parents: 3b1e142
Author: Tim Van Steenburgh <tv...@gmail.com>
Authored: Thu Jun 27 14:03:06 2013 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Thu Jun 27 14:05:41 2013 +0000

----------------------------------------------------------------------
 Allura/allura/model/auth.py | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/f0ae8890/Allura/allura/model/auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index d54db16..da0b164 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -650,10 +650,12 @@ class User(MappedClass, ActivityNode, ActivityObject):
         return '/u/' + self.username + '/'
 
     def my_projects(self, role_name=None):
-        '''Find the projects for which this user has a named role.
+        """Return projects to which this user belongs.
 
-        If role_name is given returns only projects for which user has a role with given name.
-        '''
+        If ``role_name`` is provided, return only projects for which user has
+        that role.
+
+        """
         reaching_role_ids = g.credentials.user_roles(user_id=self._id).reaching_ids_set
         reaching_roles = [ProjectRole.query.get(_id=i) for i in reaching_role_ids]
         if not role_name:
@@ -661,7 +663,7 @@ class User(MappedClass, ActivityNode, ActivityObject):
                            if r.name and r.project and not r.project.deleted]
         else:
             named_roles = [r for r in reaching_roles
-                           if r.name == role_name and not r.project.deleted]
+                           if r.name == role_name and r.project and not r.project.deleted]
         seen_project_ids = set()
         for r in named_roles:
             if r.project_id in seen_project_ids: continue


[3/3] git commit: [#6306] ticket:368 Optimize _my_trackers()

Posted by tv...@apache.org.
[#6306] ticket:368 Optimize _my_trackers()

User.my_projects() now takes an optional role_name, which is used in
_my_trackers() to prevent a lot of has_access() calls, which can be heavy.


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/e1b23c3a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/e1b23c3a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/e1b23c3a

Branch: refs/heads/master
Commit: e1b23c3af4a49c2ee604061fcf79d6e420b61e62
Parents: 2641ebb
Author: Igor Bondarenko <je...@gmail.com>
Authored: Thu Jun 20 10:48:26 2013 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Thu Jun 27 14:05:41 2013 +0000

----------------------------------------------------------------------
 Allura/allura/model/auth.py               | 21 ++++++++++++++-------
 ForgeTracker/forgetracker/tracker_main.py |  3 +--
 2 files changed, 15 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/e1b23c3a/Allura/allura/model/auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index e7f045b..d54db16 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -364,7 +364,7 @@ class User(MappedClass, ActivityNode, ActivityObject):
             if self.stats_id:
                 return UserStats.query.get(_id=self.stats_id)
             return UserStats.create(self)
-        else: 
+        else:
             return None
 
     def get_pref(self, pref_name):
@@ -649,12 +649,19 @@ class User(MappedClass, ActivityNode, ActivityObject):
     def script_name(self):
         return '/u/' + self.username + '/'
 
-    def my_projects(self):
-        '''Find the projects for which this user has a named role.'''
-        reaching_role_ids = list(g.credentials.user_roles(user_id=self._id).reaching_ids_set)
-        reaching_roles = ProjectRole.query.find({'_id': {'$in': reaching_role_ids}}).all()
-        named_roles = [ r for r in reaching_roles
-                                if r.name and r.project and not r.project.deleted ]
+    def my_projects(self, role_name=None):
+        '''Find the projects for which this user has a named role.
+
+        If role_name is given returns only projects for which user has a role with given name.
+        '''
+        reaching_role_ids = g.credentials.user_roles(user_id=self._id).reaching_ids_set
+        reaching_roles = [ProjectRole.query.get(_id=i) for i in reaching_role_ids]
+        if not role_name:
+            named_roles = [r for r in reaching_roles
+                           if r.name and r.project and not r.project.deleted]
+        else:
+            named_roles = [r for r in reaching_roles
+                           if r.name == role_name and not r.project.deleted]
         seen_project_ids = set()
         for r in named_roles:
             if r.project_id in seen_project_ids: continue

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/e1b23c3a/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 0a50878..5476596 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -147,8 +147,7 @@ def _my_trackers(user, current_tracker_app_config):
     Returns list of 3-tuples (<tracker_id>, '<project>/<mount_point>', <is current tracker?>)
     '''
     trackers = []
-    projects = user.my_projects()
-    projects = ifilter(lambda p: has_access(p, 'admin')(), projects)
+    projects = user.my_projects('Admin')
     for p in projects:
         for ac in p.app_configs:
             if ac.tool_name.lower() == 'tickets':


[2/3] git commit: [#6306] ticket:368 Add test for User.my_projects() with given role

Posted by tv...@apache.org.
[#6306] ticket:368 Add test for User.my_projects() with given role


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/3b1e1425
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/3b1e1425
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/3b1e1425

Branch: refs/heads/master
Commit: 3b1e1425a3a4e6f22fe9e9052c54ed0f6d75c32a
Parents: e1b23c3
Author: Igor Bondarenko <je...@gmail.com>
Authored: Thu Jun 20 16:28:15 2013 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Thu Jun 27 14:05:41 2013 +0000

----------------------------------------------------------------------
 Allura/allura/tests/model/test_auth.py | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/3b1e1425/Allura/allura/tests/model/test_auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/model/test_auth.py b/Allura/allura/tests/model/test_auth.py
index ea160fe..c157b2e 100644
--- a/Allura/allura/tests/model/test_auth.py
+++ b/Allura/allura/tests/model/test_auth.py
@@ -189,3 +189,21 @@ def test_email_address_claimed_by_user():
     c.user.disabled = True
     ThreadLocalORMSession.flush_all()
     assert addr.claimed_by_user() is None
+
+
+@td.with_user_project('test-admin')
+@with_setup(setUp)
+def test_user_projects_by_role():
+    assert_equal(set(p.shortname for p in c.user.my_projects()), set(['test', 'test2', 'u/test-admin', 'adobe-1', '--init--']))
+    assert_equal(set(p.shortname for p in c.user.my_projects('Admin')), set(['test', 'test2', 'u/test-admin', 'adobe-1', '--init--']))
+    # Remove admin access from c.user to test2 project
+    project = M.Project.query.get(shortname='test2')
+    admin_role = M.ProjectRole.by_name('Admin', project)
+    developer_role = M.ProjectRole.by_name('Developer', project)
+    user_role = c.user.project_role(project)
+    user_role.roles.remove(admin_role._id)
+    user_role.roles.append(developer_role._id)
+    ThreadLocalORMSession.flush_all()
+    g.credentials.clear()
+    assert_equal(set(p.shortname for p in c.user.my_projects()), set(['test', 'test2', 'u/test-admin', 'adobe-1', '--init--']))
+    assert_equal(set(p.shortname for p in c.user.my_projects('Admin')), set(['test', 'u/test-admin', 'adobe-1', '--init--']))