You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2012/10/02 23:30:28 UTC
[26/34] git commit: [#5007] don't run private_project() more than
necessary
[#5007] don't run private_project() more than necessary
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/9667df06
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/9667df06
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/9667df06
Branch: refs/heads/db/4968
Commit: 9667df0647564c545b94df746235418e0d656cd5
Parents: 7309b4b
Author: Dave Brondsema <db...@geek.net>
Authored: Thu Sep 27 19:10:32 2012 +0000
Committer: Cory Johns <jo...@geek.net>
Committed: Fri Sep 28 13:47:14 2012 +0000
----------------------------------------------------------------------
Allura/allura/lib/decorators.py | 27 +++++++++++++++++++++++++++
Allura/allura/model/auth.py | 6 +++++-
2 files changed, 32 insertions(+), 1 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9667df06/Allura/allura/lib/decorators.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/decorators.py b/Allura/allura/lib/decorators.py
index e710ee2..bd26b1e 100644
--- a/Allura/allura/lib/decorators.py
+++ b/Allura/allura/lib/decorators.py
@@ -3,6 +3,8 @@ import json
import logging
from collections import defaultdict
from urllib import unquote
+
+from decorator import decorator
from tg.decorators import before_validate
from tg import request, redirect
@@ -169,3 +171,28 @@ def Property(function):
sys.settrace(probeFunc)
function()
return property(**func_locals)
+
+
+def getattr_(obj, name, default_thunk):
+ "Similar to .setdefault in dictionaries."
+ try:
+ return getattr(obj, name)
+ except AttributeError:
+ default = default_thunk()
+ setattr(obj, name, default)
+ return default
+
+
+@decorator
+def memoize(func, *args):
+ """
+ Cache the method's result, for the given args
+ """
+ dic = getattr_(func, "memoize_dic", dict)
+ # memoize_dic is created at the first call
+ if args in dic:
+ return dic[args]
+ else:
+ result = func(*args)
+ dic[args] = result
+ return result
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9667df06/Allura/allura/model/auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index 737877c..c12ff9e 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -24,6 +24,7 @@ from ming.orm.declarative import MappedClass
import allura.tasks.mail_tasks
from allura.lib import helpers as h
from allura.lib import plugin
+from allura.lib.decorators import memoize
from .session import main_orm_session, main_doc_session
from .session import project_orm_session
@@ -272,6 +273,7 @@ class AuthGlobals(MappedClass):
new=True)
return g.next_uid
+
class User(MappedClass, ActivityNode, ActivityObject):
SALT_LEN=8
class __mongometa__:
@@ -309,9 +311,11 @@ class User(MappedClass, ActivityNode, ActivityObject):
def url(self):
return plugin.AuthenticationProvider.get(request).project_url(self)
+ @memoize
def icon_url(self):
icon_url = None
- if self.private_project() and self.private_project().icon:
+ private_project = self.private_project()
+ if private_project and private_project.icon:
icon_url = self.url()+'user_icon'
elif self.preferences.email_address:
icon_url = g.gravatar(self.preferences.email_address)