Changeset - c4ec645b42ce
[Not reviewed]
default
0 1 0
Mads Kiilerich - 10 years ago 2016-03-14 16:17:46
madski@unity3d.com
helpers: cache user_or_none results in beaker long_term cache

Avoids repeated expensive 'LIKE' lookup on email addresses extracted from
changeset authors.

This information is only used for display of changelog information.

The cache will never expire - only when the server process expires. That is ok
for this very static information and the way it is used.
1 file changed with 6 insertions and 1 deletions:
0 comments (0 inline, 0 general)
kallithea/lib/helpers.py
Show inline comments
 
@@ -22,12 +22,13 @@ import StringIO
 
import math
 
import logging
 
import re
 
import urlparse
 
import textwrap
 

	
 
from beaker.cache import cache_region
 
from pygments.formatters.html import HtmlFormatter
 
from pygments import highlight as code_highlight
 
from pylons import url
 
from pylons.i18n.translation import _, ungettext
 

	
 
from webhelpers.html import literal, HTML, escape
 
@@ -474,21 +475,25 @@ def is_hg(repository):
 
        _type = repository.repo_type
 
    else:
 
        _type = repository
 
    return _type == 'hg'
 

	
 

	
 
@cache_region('long_term', 'user_or_none')
 
def user_or_none(author):
 
    """Try to match email part of VCS committer string with a local user - or return None"""
 
    email = author_email(author)
 
    if email:
 
        user = User.get_by_email(email, cache=True)
 
        user = User.get_by_email(email, cache=True) # cache will only use sql_cache_short
 
        if user is not None:
 
            return user
 
    return None
 

	
 
def email_or_none(author):
 
    """Try to match email part of VCS committer string with a local user.
 
    Return primary email of user, email part of the specified author name, or None."""
 
    if not author:
 
        return None
 
    user = user_or_none(author)
 
    if user is not None:
 
        return user.email # always use main email address - not necessarily the one used to find user
 

	
0 comments (0 inline, 0 general)