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 |
|