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:48 UTC
[3/3] git commit: [#6306] ticket:368 Optimize _my_trackers()
[#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':