diff -r 905e30f5467b -r 07229ac2497b src/pyams_security/utility.py --- a/src/pyams_security/utility.py Wed May 20 12:31:27 2015 +0200 +++ b/src/pyams_security/utility.py Wed Jun 17 09:59:18 2015 +0200 @@ -17,6 +17,8 @@ import logging logger = logging.getLogger('PyAMS (security)') +from functools import lru_cache + # import interfaces from pyams_security.interfaces import ISecurityManager, ICredentialsPlugin, IAuthenticationPlugin, \ IDirectoryPlugin, AuthenticatedPrincipalEvent, IProtectedObject, IGroupsAwareDirectoryPlugin @@ -162,12 +164,13 @@ return principals # IDirectoryPlugin interface methods - def get_principal(self, principal_id): + @lru_cache(maxsize=100) + def get_principal(self, principal_id, info=True): if not principal_id: return UnknownPrincipal for plugin in self.get_directory_plugins(): try: - principal = plugin.get_principal(principal_id) + principal = plugin.get_principal(principal_id, info) except: logging.debug("Can't get principal {0}!".format(principal_id), exc_info=True) continue