diff pylons_app/lib/auth.py @ 343:6484963056cd

implemented cache for repeated queries in simplehg mercurial requests
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 14 Jul 2010 12:31:11 +0200
parents 5d517bbf0a0d
children 664a5b8c551a
line wrap: on
line diff
--- a/pylons_app/lib/auth.py	Wed Jul 14 02:28:51 2010 +0200
+++ b/pylons_app/lib/auth.py	Wed Jul 14 12:31:11 2010 +0200
@@ -22,18 +22,18 @@
 
 @author: marcink
 """
-
+from beaker.cache import cache_region
 from functools import wraps
-from pylons import session, url, request
+from pylons import config, session, url, request
 from pylons.controllers.util import abort, redirect
+from pylons_app.lib.utils import get_repo_slug
 from pylons_app.model import meta
 from pylons_app.model.db import User, Repo2Perm, Repository, Permission
-from pylons_app.lib.utils import get_repo_slug
 from sqlalchemy.exc import OperationalError
 from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
 import crypt
 import logging
-from pylons import config
+
 log = logging.getLogger(__name__) 
 
 def get_crypt_password(password):
@@ -43,11 +43,17 @@
     """
     return crypt.crypt(password, '6a')
 
+
+@cache_region('super_short_term', 'cached_user')
+def get_user_cached(username):
+    sa = meta.Session
+    user = sa.query(User).filter(User.username == username).one()
+    return user
+
 def authfunc(environ, username, password):
-    sa = meta.Session
     password_crypt = get_crypt_password(password)
     try:
-        user = sa.query(User).filter(User.username == username).one()
+        user = get_user_cached(username)
     except (NoResultFound, MultipleResultsFound, OperationalError) as e:
         log.error(e)
         user = None