17 |
17 |
18 # import interfaces |
18 # import interfaces |
19 from pyams_content.component.theme.interfaces import IThemesManagerTarget, IThemesManager, THEMES_MANAGER_KEY, \ |
19 from pyams_content.component.theme.interfaces import IThemesManagerTarget, IThemesManager, THEMES_MANAGER_KEY, \ |
20 IThemesTarget, IThemesInfo, THEMES_INFO_KEY |
20 IThemesTarget, IThemesInfo, THEMES_INFO_KEY |
21 from pyams_content.features.checker.interfaces import IContentChecker, ERROR_VALUE |
21 from pyams_content.features.checker.interfaces import IContentChecker, ERROR_VALUE |
22 from zope.annotation.interfaces import IAnnotations |
|
23 |
22 |
24 # import packages |
23 # import packages |
25 from persistent import Persistent |
24 from persistent import Persistent |
26 from pyams_content.features.checker import BaseContentChecker |
25 from pyams_content.features.checker import BaseContentChecker |
27 from pyams_utils.adapter import adapter_config |
26 from pyams_utils.adapter import adapter_config, get_annotation_adapter |
28 from pyramid.threadlocal import get_current_registry |
|
29 from zope.container.contained import Contained |
27 from zope.container.contained import Contained |
30 from zope.interface import implementer |
28 from zope.interface import implementer |
31 from zope.lifecycleevent import ObjectCreatedEvent |
|
32 from zope.location import locate |
|
33 from zope.schema.fieldproperty import FieldProperty |
29 from zope.schema.fieldproperty import FieldProperty |
34 |
30 |
35 from pyams_content import _ |
31 from pyams_content import _ |
36 |
32 |
37 |
33 |
44 |
40 |
45 |
41 |
46 @adapter_config(context=IThemesManagerTarget, provides=IThemesManager) |
42 @adapter_config(context=IThemesManagerTarget, provides=IThemesManager) |
47 def themes_manager_factory(target): |
43 def themes_manager_factory(target): |
48 """Themes manager factory""" |
44 """Themes manager factory""" |
49 annotations = IAnnotations(target) |
45 return get_annotation_adapter(target, THEMES_MANAGER_KEY, ThemesManager, name='++themes-manager++') |
50 manager = annotations.get(THEMES_MANAGER_KEY) |
|
51 if manager is None: |
|
52 manager = annotations[THEMES_MANAGER_KEY] = ThemesManager() |
|
53 get_current_registry().notify(ObjectCreatedEvent(manager)) |
|
54 locate(manager, target, '++themes-manager++') |
|
55 return manager |
|
56 |
46 |
57 |
47 |
58 @implementer(IThemesInfo) |
48 @implementer(IThemesInfo) |
59 class ThemesInfo(Persistent, Contained): |
49 class ThemesInfo(Persistent, Contained): |
60 """Themes info persistent class""" |
50 """Themes info persistent class""" |
63 |
53 |
64 |
54 |
65 @adapter_config(context=IThemesTarget, provides=IThemesInfo) |
55 @adapter_config(context=IThemesTarget, provides=IThemesInfo) |
66 def themes_info_factory(target): |
56 def themes_info_factory(target): |
67 """Themes info factory""" |
57 """Themes info factory""" |
68 annotations = IAnnotations(target) |
58 return get_annotation_adapter(target, THEMES_INFO_KEY, ThemesInfo, name='++themes++') |
69 info = annotations.get(THEMES_INFO_KEY) |
|
70 if info is None: |
|
71 info = annotations[THEMES_INFO_KEY] = ThemesInfo() |
|
72 get_current_registry().notify(ObjectCreatedEvent(info)) |
|
73 locate(info, target, '++themes++') |
|
74 return info |
|
75 |
59 |
76 |
60 |
77 @adapter_config(name='themes', context=IThemesTarget, provides=IContentChecker) |
61 @adapter_config(name='themes', context=IThemesTarget, provides=IContentChecker) |
78 class ThemesContentChecker(BaseContentChecker): |
62 class ThemesContentChecker(BaseContentChecker): |
79 """Themes info content checker""" |
63 """Themes info content checker""" |