src/pyams_content/shared/form/field.py
changeset 558 d9c6b1d7fefa
parent 501 3407e6940f6a
child 788 88c885042341
equal deleted inserted replaced
557:a78ade534b97 558:d9c6b1d7fefa
    18 
    18 
    19 # import interfaces
    19 # import interfaces
    20 from pyams_content.shared.form.interfaces import IFormFieldFactory, IFormField, IFormFieldContainer, \
    20 from pyams_content.shared.form.interfaces import IFormFieldFactory, IFormField, IFormFieldContainer, \
    21     IFormFieldContainerTarget, FORM_FIELD_CONTAINER_KEY
    21     IFormFieldContainerTarget, FORM_FIELD_CONTAINER_KEY
    22 from pyams_i18n.interfaces import II18n
    22 from pyams_i18n.interfaces import II18n
    23 from zope.annotation.interfaces import IAnnotations
       
    24 from zope.location.interfaces import ISublocations
    23 from zope.location.interfaces import ISublocations
    25 from zope.traversing.interfaces import ITraversable
    24 from zope.traversing.interfaces import ITraversable
    26 
    25 
    27 # import packages
    26 # import packages
    28 from persistent import Persistent
    27 from persistent import Persistent
    29 from pyams_utils.adapter import adapter_config, ContextAdapter
    28 from pyams_utils.adapter import adapter_config, ContextAdapter, get_annotation_adapter
    30 from pyams_utils.registry import utility_config, get_global_registry
    29 from pyams_utils.registry import utility_config, get_global_registry
    31 from pyams_utils.request import check_request
    30 from pyams_utils.request import check_request
    32 from pyams_utils.schema import MailAddressField
    31 from pyams_utils.schema import MailAddressField
    33 from pyams_utils.vocabulary import vocabulary_config
    32 from pyams_utils.vocabulary import vocabulary_config
    34 from pyramid.threadlocal import get_current_registry
       
    35 from zope.container.contained import Contained
    33 from zope.container.contained import Contained
    36 from zope.container.ordered import OrderedContainer
    34 from zope.container.ordered import OrderedContainer
    37 from zope.interface import implementer
    35 from zope.interface import implementer
    38 from zope.lifecycleevent import ObjectCreatedEvent
       
    39 from zope.location import locate
       
    40 from zope.schema import TextLine, Text, Bool, Int, Decimal, URI, Date, Choice, List
    36 from zope.schema import TextLine, Text, Bool, Int, Decimal, URI, Date, Choice, List
    41 from zope.schema.fieldproperty import FieldProperty
    37 from zope.schema.fieldproperty import FieldProperty
    42 from zope.componentvocabulary.vocabulary import UtilityVocabulary, UtilityTerm
    38 from zope.componentvocabulary.vocabulary import UtilityVocabulary, UtilityTerm
    43 
    39 
    44 from pyams_content import _
    40 from pyams_content import _
    75 
    71 
    76 
    72 
    77 @adapter_config(context=IFormFieldContainerTarget, provides=IFormFieldContainer)
    73 @adapter_config(context=IFormFieldContainerTarget, provides=IFormFieldContainer)
    78 def form_field_container_factory(context):
    74 def form_field_container_factory(context):
    79     """Form fields container factory"""
    75     """Form fields container factory"""
    80     annotations = IAnnotations(context)
    76     return get_annotation_adapter(context, FORM_FIELD_CONTAINER_KEY, FormFieldContainer, name='++fields++')
    81     container = annotations.get(FORM_FIELD_CONTAINER_KEY)
       
    82     if container is None:
       
    83         container = annotations[FORM_FIELD_CONTAINER_KEY] = FormFieldContainer()
       
    84         get_current_registry().notify(ObjectCreatedEvent(container))
       
    85         locate(container, context, '++fields++')
       
    86     return container
       
    87 
    77 
    88 
    78 
    89 @adapter_config(name='fields', context=IFormFieldContainerTarget, provides=ITraversable)
    79 @adapter_config(name='fields', context=IFormFieldContainerTarget, provides=ITraversable)
    90 class FormFieldContainerNamespace(ContextAdapter):
    80 class FormFieldContainerNamespace(ContextAdapter):
    91     """Form fields container ++fields++ namespace"""
    81     """Form fields container ++fields++ namespace"""