src/pyams_content/shared/view/reference.py
changeset 558 d9c6b1d7fefa
parent 501 3407e6940f6a
child 617 2e4dbe6fa156
equal deleted inserted replaced
557:a78ade534b97 558:d9c6b1d7fefa
    18 
    18 
    19 # import interfaces
    19 # import interfaces
    20 from hypatia.interfaces import ICatalog
    20 from hypatia.interfaces import ICatalog
    21 from pyams_content.shared.view.interfaces import IWfView, IViewSettings, IViewInternalReferencesSettings, \
    21 from pyams_content.shared.view.interfaces import IWfView, IViewSettings, IViewInternalReferencesSettings, \
    22     IViewQueryFilterExtension, VIEW_REFERENCES_SETTINGS_KEY, ALWAYS_REFERENCE_MODE
    22     IViewQueryFilterExtension, VIEW_REFERENCES_SETTINGS_KEY, ALWAYS_REFERENCE_MODE
    23 from zope.annotation.interfaces import IAnnotations
       
    24 
    23 
    25 # import packages
    24 # import packages
    26 from hypatia.catalog import CatalogQuery
    25 from hypatia.catalog import CatalogQuery
    27 from hypatia.query import Any
    26 from hypatia.query import Any
    28 from pyams_catalog.query import CatalogResultSet
    27 from pyams_catalog.query import CatalogResultSet
    29 from pyams_content.workflow import VISIBLE_STATES
    28 from pyams_content.workflow import VISIBLE_STATES
    30 from pyams_utils.adapter import adapter_config, ContextAdapter
    29 from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
    31 from pyams_utils.registry import get_utility
    30 from pyams_utils.registry import get_utility
    32 from pyramid.threadlocal import get_current_registry
       
    33 from zope.container.contained import Contained
    31 from zope.container.contained import Contained
    34 from zope.interface import implementer
    32 from zope.interface import implementer
    35 from zope.lifecycleevent import ObjectCreatedEvent
       
    36 from zope.location import locate
       
    37 from zope.schema.fieldproperty import FieldProperty
    33 from zope.schema.fieldproperty import FieldProperty
    38 
    34 
    39 
    35 
    40 @implementer(IViewInternalReferencesSettings)
    36 @implementer(IViewInternalReferencesSettings)
    41 class ViewInternalReferencesSettings(Persistent, Contained):
    37 class ViewInternalReferencesSettings(Persistent, Contained):
    51 
    47 
    52 @adapter_config(context=IWfView, provides=IViewInternalReferencesSettings)
    48 @adapter_config(context=IWfView, provides=IViewInternalReferencesSettings)
    53 @adapter_config(name='references', context=IWfView, provides=IViewSettings)
    49 @adapter_config(name='references', context=IWfView, provides=IViewSettings)
    54 def view_internal_references_settings_factory(view):
    50 def view_internal_references_settings_factory(view):
    55     """View internal references settings factory"""
    51     """View internal references settings factory"""
    56     annotations = IAnnotations(view)
    52     return get_annotation_adapter(view, VIEW_REFERENCES_SETTINGS_KEY, ViewInternalReferencesSettings,
    57     settings = annotations.get(VIEW_REFERENCES_SETTINGS_KEY)
    53                                   name='++view:references++')
    58     if settings is None:
       
    59         settings = annotations[VIEW_REFERENCES_SETTINGS_KEY] = ViewInternalReferencesSettings()
       
    60         get_current_registry().notify(ObjectCreatedEvent(settings))
       
    61         locate(settings, view, '++view:references++')
       
    62     return settings
       
    63 
    54 
    64 
    55 
    65 @adapter_config(name='references', context=IWfView, provides=IViewQueryFilterExtension)
    56 @adapter_config(name='references', context=IWfView, provides=IViewQueryFilterExtension)
    66 class ViewInternalReferencesQueryFilterExtension(ContextAdapter):
    57 class ViewInternalReferencesQueryFilterExtension(ContextAdapter):
    67     """View internal references filter extension"""
    58     """View internal references filter extension"""