src/pyams_form/form.py
changeset 142 5a6990958cb3
parent 118 0d462137f10d
child 149 d26223a00c51
equal deleted inserted replaced
141:d83e8f9a9885 142:5a6990958cb3
    10 # FOR A PARTICULAR PURPOSE.
    10 # FOR A PARTICULAR PURPOSE.
    11 #
    11 #
    12 
    12 
    13 __docformat__ = 'restructuredtext'
    13 __docformat__ = 'restructuredtext'
    14 
    14 
    15 
       
    16 # import standard library
       
    17 import json
       
    18 import logging
    15 import logging
    19 logger = logging.getLogger('PyAMS (form)')
    16 logger = logging.getLogger('PyAMS (form)')
    20 
    17 
       
    18 import json
    21 import transaction
    19 import transaction
    22 import venusian
    20 import venusian
    23 
    21 from persistent import IPersistent
    24 # import interfaces
       
    25 from pyams_form.interfaces.form import IFormLayer, IForm, IAJAXForm, IInnerSubForm, IInnerTabForm, \
       
    26     ICustomUpdateSubForm, IFormCreatedEvent, FormCreatedEvent, IInnerForm, IFormContextPermissionChecker
       
    27 from pyams_form.interfaces.form import IAddFormButtons, IModalAddFormButtons, IEditFormButtons, \
       
    28     IModalEditFormButtons, IModalDisplayFormButtons
       
    29 from pyams_form.interfaces import get_form_weight
       
    30 from pyams_form.interfaces.form import FormObjectCreatedEvent, FormObjectModifiedEvent
       
    31 from pyams_i18n.interfaces import II18n
       
    32 from pyams_skin.interfaces import IDialog, ISkinnable, IContentTitle
       
    33 from pyams_template.interfaces import IContentTemplate, ILayoutTemplate
       
    34 from pyams_utils.interfaces import FORBIDDEN_PERMISSION, ICacheKeyValue
       
    35 from pyramid_chameleon.interfaces import IChameleonTranslate
       
    36 from z3c.form.interfaces import DISPLAY_MODE, IErrorViewSnippet, IMultipleErrors
       
    37 from zope.publisher.interfaces.browser import IBrowserRequest
       
    38 from zope.schema.interfaces import ValidationError
       
    39 
       
    40 # import packages
       
    41 from pyams_form.group import GroupsBasedForm
       
    42 from pyams_pagelet.interfaces import PageletCreatedEvent
       
    43 from pyams_skin.skin import apply_skin
       
    44 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
       
    45 from pyams_utils.url import absolute_url
       
    46 from pyramid.decorator import reify
    22 from pyramid.decorator import reify
    47 from pyramid.events import subscriber
    23 from pyramid.events import subscriber
    48 from pyramid.response import Response
    24 from pyramid.response import Response
    49 from pyramid_zope_request import PyramidToPublisher, PyramidPublisherRequest
    25 from pyramid_chameleon.interfaces import IChameleonTranslate
       
    26 from pyramid_zope_request import PyramidPublisherRequest, PyramidToPublisher
    50 from z3c.form.button import Buttons
    27 from z3c.form.button import Buttons
    51 from z3c.form.form import applyChanges, \
    28 from z3c.form.form import AddForm as BaseAddForm, DisplayForm as BaseDisplayForm, EditForm as BaseEditForm, Form, \
    52     Form, AddForm as BaseAddForm, EditForm as BaseEditForm, DisplayForm as BaseDisplayForm
    29     applyChanges
       
    30 from z3c.form.interfaces import DISPLAY_MODE, IErrorViewSnippet, IMultipleErrors
    53 from zope.component import queryUtility
    31 from zope.component import queryUtility
    54 from zope.interface import implementer, classImplements, alsoProvides, Interface
    32 from zope.interface import Interface, alsoProvides, classImplements, implementer
    55 from zope.lifecycleevent import Attributes, ObjectCreatedEvent
    33 from zope.lifecycleevent import Attributes, ObjectCreatedEvent
    56 from zope.location import locate
    34 from zope.location import locate
       
    35 from zope.publisher.interfaces.browser import IBrowserRequest
    57 from zope.schema.fieldproperty import FieldProperty
    36 from zope.schema.fieldproperty import FieldProperty
       
    37 from zope.schema.interfaces import ValidationError
       
    38 
       
    39 from pyams_form.group import GroupsBasedForm
       
    40 from pyams_form.interfaces import get_form_weight
       
    41 from pyams_form.interfaces.form import FormCreatedEvent, IAJAXForm, ICustomUpdateSubForm, IForm, \
       
    42     IFormContextPermissionChecker, IFormCreatedEvent, IFormLayer, IInnerForm, IInnerSubForm, IInnerTabForm
       
    43 from pyams_form.interfaces.form import FormObjectCreatedEvent, FormObjectModifiedEvent
       
    44 from pyams_form.interfaces.form import IAddFormButtons, IEditFormButtons, IModalAddFormButtons, \
       
    45     IModalDisplayFormButtons, IModalEditFormButtons
       
    46 from pyams_i18n.interfaces import II18n
       
    47 from pyams_pagelet.interfaces import PageletCreatedEvent
       
    48 from pyams_skin.interfaces import IContentTitle, IDialog, ISkinnable
       
    49 from pyams_skin.skin import apply_skin
       
    50 from pyams_template.interfaces import IContentTemplate, ILayoutTemplate
       
    51 from pyams_utils.adapter import ContextRequestViewAdapter, adapter_config
       
    52 from pyams_utils.interfaces import FORBIDDEN_PERMISSION, ICacheKeyValue
       
    53 from pyams_utils.url import absolute_url
    58 
    54 
    59 from pyams_form import _
    55 from pyams_form import _
    60 
    56 
    61 
    57 
    62 REDIRECT_STATUS_CODES = (300, 301, 302, 303, 304, 305, 307)
    58 REDIRECT_STATUS_CODES = (300, 301, 302, 303, 304, 305, 307)
   360 
   356 
   361     def createAndAdd(self, data):
   357     def createAndAdd(self, data):
   362         registry = self.request.registry
   358         registry = self.request.registry
   363         # create object
   359         # create object
   364         object = self.create(data.get(self, data))
   360         object = self.create(data.get(self, data))
   365         if object is not None:
   361         if IPersistent.providedBy(object):
   366             registry.notify(ObjectCreatedEvent(object))
   362             registry.notify(ObjectCreatedEvent(object))
   367             # set parent temporarily to avoid NotYet exceptions
   363             # set parent temporarily to avoid NotYet exceptions
   368             locate(object, self.context)
   364             locate(object, self.context)
   369             # update object properties before adding it
   365             # update object properties before adding it
   370             self.update_content(object, data)
   366             self.update_content(object, data)
   744                 pass
   740                 pass
   745 
   741 
   746             if 'implementer' in settings:
   742             if 'implementer' in settings:
   747                 implementer = settings.pop('implementer')
   743                 implementer = settings.pop('implementer')
   748                 if not isinstance(implementer, (list, tuple, set)):
   744                 if not isinstance(implementer, (list, tuple, set)):
   749                     implementer = (implementer, )
   745                     implementer = (implementer,)
   750                 classImplements(new_class, *implementer)
   746                 classImplements(new_class, *implementer)
   751 
   747 
   752             logger.debug('Registering AJAX view "{0}" for {1} ({2})'.format(settings.get('name'),
   748             logger.debug('Registering AJAX view "{0}" for {1} ({2})'.format(settings.get('name'),
   753                                                                             str(settings.get('context', Interface)),
   749                                                                             str(settings.get('context', Interface)),
   754                                                                             str(new_class)))
   750                                                                             str(new_class)))