Return-Path: X-Original-To: apmail-incubator-allura-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-allura-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9D505DB54 for ; Fri, 28 Sep 2012 13:47:40 +0000 (UTC) Received: (qmail 94071 invoked by uid 500); 28 Sep 2012 13:47:40 -0000 Delivered-To: apmail-incubator-allura-commits-archive@incubator.apache.org Received: (qmail 94027 invoked by uid 500); 28 Sep 2012 13:47:40 -0000 Mailing-List: contact allura-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: allura-dev@incubator.apache.org Delivered-To: mailing list allura-commits@incubator.apache.org Received: (qmail 94007 invoked by uid 99); 28 Sep 2012 13:47:40 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 28 Sep 2012 13:47:40 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id CF33E39D1D; Fri, 28 Sep 2012 13:47:39 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: johnsca@apache.org To: allura-commits@incubator.apache.org X-Mailer: ASF-Git Admin Mailer Subject: [2/3] git commit: [#5007] don't run private_project() more than necessary Message-Id: <20120928134739.CF33E39D1D@tyr.zones.apache.org> Date: Fri, 28 Sep 2012 13:47:39 +0000 (UTC) [#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/master Commit: 9667df0647564c545b94df746235418e0d656cd5 Parents: 7309b4b Author: Dave Brondsema Authored: Thu Sep 27 19:10:32 2012 +0000 Committer: Cory Johns 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)