src/pyams_security/utility.py
changeset 42 07229ac2497b
parent 12 f227ffa9e824
child 55 5713898178f3
equal deleted inserted replaced
41:905e30f5467b 42:07229ac2497b
    14 
    14 
    15 
    15 
    16 # import standard library
    16 # import standard library
    17 import logging
    17 import logging
    18 logger = logging.getLogger('PyAMS (security)')
    18 logger = logging.getLogger('PyAMS (security)')
       
    19 
       
    20 from functools import lru_cache
    19 
    21 
    20 # import interfaces
    22 # import interfaces
    21 from pyams_security.interfaces import ISecurityManager, ICredentialsPlugin, IAuthenticationPlugin, \
    23 from pyams_security.interfaces import ISecurityManager, ICredentialsPlugin, IAuthenticationPlugin, \
    22     IDirectoryPlugin, AuthenticatedPrincipalEvent, IProtectedObject, IGroupsAwareDirectoryPlugin
    24     IDirectoryPlugin, AuthenticatedPrincipalEvent, IProtectedObject, IGroupsAwareDirectoryPlugin
    23 from pyramid.interfaces import IAuthenticationPolicy
    25 from pyramid.interfaces import IAuthenticationPolicy
   160                     if not protection.inherit_parent_roles:
   162                     if not protection.inherit_parent_roles:
   161                         break
   163                         break
   162         return principals
   164         return principals
   163 
   165 
   164     # IDirectoryPlugin interface methods
   166     # IDirectoryPlugin interface methods
   165     def get_principal(self, principal_id):
   167     @lru_cache(maxsize=100)
       
   168     def get_principal(self, principal_id, info=True):
   166         if not principal_id:
   169         if not principal_id:
   167             return UnknownPrincipal
   170             return UnknownPrincipal
   168         for plugin in self.get_directory_plugins():
   171         for plugin in self.get_directory_plugins():
   169             try:
   172             try:
   170                 principal = plugin.get_principal(principal_id)
   173                 principal = plugin.get_principal(principal_id, info)
   171             except:
   174             except:
   172                 logging.debug("Can't get principal {0}!".format(principal_id), exc_info=True)
   175                 logging.debug("Can't get principal {0}!".format(principal_id), exc_info=True)
   173                 continue
   176                 continue
   174             else:
   177             else:
   175                 if principal is not None:
   178                 if principal is not None: