src/pyams_content/profile/admin.py
changeset 558 d9c6b1d7fefa
parent 501 3407e6940f6a
child 966 a3d8d83fb6f0
equal deleted inserted replaced
557:a78ade534b97 558:d9c6b1d7fefa
    17 
    17 
    18 # import interfaces
    18 # import interfaces
    19 from pyams_content.profile.interfaces import IAdminProfile, ADMIN_PROFILE_KEY
    19 from pyams_content.profile.interfaces import IAdminProfile, ADMIN_PROFILE_KEY
    20 from pyams_security.interfaces import IPrincipalInfo
    20 from pyams_security.interfaces import IPrincipalInfo
    21 from pyams_utils.interfaces import PUBLIC_PERMISSION
    21 from pyams_utils.interfaces import PUBLIC_PERMISSION
    22 from zope.annotation.interfaces import IAnnotations, IAttributeAnnotatable
       
    23 
    22 
    24 # import packages
    23 # import packages
    25 from persistent import Persistent
    24 from persistent import Persistent
    26 from pyams_utils.adapter import adapter_config
    25 from pyams_utils.adapter import adapter_config, get_annotation_adapter
    27 from pyams_utils.request import check_request, query_request
    26 from pyams_utils.request import check_request, query_request
    28 from pyramid.security import Allow, ALL_PERMISSIONS, Everyone
    27 from pyramid.security import Allow, ALL_PERMISSIONS, Everyone
    29 from pyramid.threadlocal import get_current_registry
       
    30 from zope.lifecycleevent import ObjectCreatedEvent
       
    31 from zope.interface import implementer, Interface
    28 from zope.interface import implementer, Interface
    32 from zope.schema.fieldproperty import FieldProperty
    29 from zope.schema.fieldproperty import FieldProperty
    33 
    30 
    34 
    31 
    35 @implementer(IAdminProfile, IAttributeAnnotatable)
    32 @implementer(IAdminProfile)
    36 class AdminProfile(Persistent):
    33 class AdminProfile(Persistent):
    37     """Admin profile persistent class"""
    34     """Admin profile persistent class"""
    38 
    35 
    39     favorites = FieldProperty(IAdminProfile['favorites'])
    36     favorites = FieldProperty(IAdminProfile['favorites'])
    40     table_page_length = FieldProperty(IAdminProfile['table_page_length'])
    37     table_page_length = FieldProperty(IAdminProfile['table_page_length'])
    55 
    52 
    56 
    53 
    57 @adapter_config(context=IPrincipalInfo, provides=IAdminProfile)
    54 @adapter_config(context=IPrincipalInfo, provides=IAdminProfile)
    58 def principal_admin_profile_factory(principal):
    55 def principal_admin_profile_factory(principal):
    59     """Principal admin profile factory adapter"""
    56     """Principal admin profile factory adapter"""
    60     annotations = IAnnotations(principal)
    57     return get_annotation_adapter(principal, ADMIN_PROFILE_KEY, AdminProfile)
    61     profile = annotations.get(ADMIN_PROFILE_KEY)
       
    62     if profile is None:
       
    63         profile = annotations[ADMIN_PROFILE_KEY] = AdminProfile()
       
    64         get_current_registry().notify(ObjectCreatedEvent(profile))
       
    65     return profile