class INewAction(Interface):

    title = zope.schema.TextLine(title=__(u"Title"), required=True)

    __name__ = zope.schema.ASCIILine(
        title=__(u"Short Name"),
        description=__(u"Used for programmatic access to the field."),
        required=True,
        constraint=isValidFieldName,
    )

    description = zope.schema.Text(
        title=__(u"Help Text"),
        description=__(u"Shows up in the form as help text for the field."),
        required=False,
    )

    factory = zope.schema.Choice(title=_(u"Action type"),
                                 vocabulary="EasyFormActions",
                                 required=True)

    @zope.interface.invariant
    def checkTitleAndDescriptionTypes(data):  # NOQA
        if data.__name__ is not None and data.factory is not None:
            if (data.__name__ == "title"
                    and data.factory.fieldcls is not zope.schema.TextLine):
                raise zope.interface.Invalid(
                    __(u"The 'title' field must be a Text line (string) "
                       u"field."))
            if (data.__name__ == "description"
                    and data.factory.fieldcls is not zope.schema.Text):
                raise zope.interface.Invalid(
                    __(u"The 'description' field must be a Text field."))
Exemple #2
0
class INewAction(Interface):

    title = TextLine(title=__(u'Title'), required=True)

    __name__ = ASCIILine(
        title=__(u'Short Name'),
        description=__(u'Used for programmatic access to the field.'),
        required=True,
        constraint=isValidFieldName,
    )

    description = Text(
        title=__(u'Help Text'),
        description=__(u'Shows up in the form as help text for the field.'),
        required=False)

    factory = Choice(
        title=_(u'Action type'),
        vocabulary='EasyFormActions',
        required=True,
    )

    @invariant
    def checkTitleAndDescriptionTypes(data):
        if data.__name__ is not None and data.factory is not None:
            if data.__name__ == 'title' and data.factory.fieldcls is not TextLine:
                raise Invalid(
                    __(u"The 'title' field must be a Text line (string) field."
                       ))
            if data.__name__ == 'description' and data.factory.fieldcls is not Text:
                raise Invalid(
                    __(u"The 'description' field must be a Text field."))
 def checkTitleAndDescriptionTypes(data):
     if data.__name__ is not None and data.factory is not None:
         if data.__name__ == 'title' and data.factory.fieldcls is not TextLine:
             raise Invalid(
                 __(u"The 'title' field must be a Text line (string) field."))
         if data.__name__ == 'description' and data.factory.fieldcls is not Text:
             raise Invalid(
                 __(u"The 'description' field must be a Text field."))
 def checkTitleAndDescriptionTypes(data):
     if data.__name__ is not None and data.factory is not None:
         if data.__name__ == 'title' and data.factory.fieldcls is not TextLine:
             raise Invalid(
                 __(u"The 'title' field must be a Text line (string) field."))
         if data.__name__ == 'description' and data.factory.fieldcls is not Text:
             raise Invalid(
                 __(u"The 'description' field must be a Text field."))
    def __call__(self):
        """ handle AJAX save post """

        if not self.authorized():
            raise Unauthorized

        source = self.request.form.get("source")
        if source:
            # Is it valid XML?
            try:
                root = etree.fromstring(source)
            except etree.XMLSyntaxError as e:
                return dumps({
                    "success":
                    False,
                    "message":
                    "XMLSyntaxError: {0}".format(e.message.encode("utf8")),
                })

            # a little more sanity checking, look at first two element levels
            basens = "{http://namespaces.plone.org/supermodel/schema}"
            if root.tag != basens + "model":
                return dumps({
                    "success": False,
                    "message": __(u"Error: root tag must be 'model'"),
                })
            for element in root.getchildren():
                if element.tag != basens + "schema":
                    return dumps({
                        "success":
                        False,
                        "message":
                        __(u"Error: all model elements must be 'schema'"),
                    })

            # can supermodel parse it?
            # This is mainly good for catching bad dotted names.
            try:
                loadString(source)
            except SupermodelParseError as e:
                message = e.args[0].replace('\n  File "<unknown>"', "")
                return dumps({
                    "success":
                    False,
                    "message":
                    u"SuperModelParseError: {0}".format(message),
                })

            # clean up formatting sins
            source = etree.tostring(root,
                                    pretty_print=True,
                                    xml_declaration=True,
                                    encoding="utf8")
            # and save
            self.save(source)

            self.request.response.setHeader("Content-Type", "application/json")
            return dumps({"success": True, "message": __(u"Saved")})
 def checkTitleAndDescriptionTypes(data):  # NOQA
     if data.__name__ is not None and data.factory is not None:
         if (data.__name__ == "title"
                 and data.factory.fieldcls is not zope.schema.TextLine):
             raise zope.interface.Invalid(
                 __(u"The 'title' field must be a Text line (string) "
                    u"field."))
         if (data.__name__ == "description"
                 and data.factory.fieldcls is not zope.schema.Text):
             raise zope.interface.Invalid(
                 __(u"The 'description' field must be a Text field."))
Exemple #7
0
    def __call__(self):
        """ handle AJAX save post """

        if not self.authorized():
            raise Unauthorized

        source = self.request.form.get('source')
        if source:
            # Is it valid XML?
            try:
                root = etree.fromstring(source)
            except etree.XMLSyntaxError, e:
                return dumps({
                    'success':
                    False,
                    'message':
                    "XMLSyntaxError: {0}".format(e.message.encode('utf8'))
                })

            # a little more sanity checking, look at first two element levels
            basens = '{http://namespaces.plone.org/supermodel/schema}'
            if root.tag != basens + 'model':
                return dumps({
                    'success': False,
                    'message': __(u"Error: root tag must be 'model'")
                })
            for element in root.getchildren():
                if element.tag != basens + 'schema':
                    return dumps({
                        'success':
                        False,
                        'message':
                        __(u"Error: all model elements must be 'schema'")
                    })

            # can supermodel parse it?
            # This is mainly good for catching bad dotted names.
            try:
                loadString(source)
            except SupermodelParseError, e:
                message = e.args[0].replace('\n  File "<unknown>"', '')
                return dumps({
                    'success':
                    False,
                    'message':
                    u"SuperModelParseError: {0}".format(message)
                })
Exemple #8
0
 def checkTitleAndDescriptionTypes(data):  # NOQA
     if data.__name__ is not None and data.factory is not None:
         if (
             data.__name__ == 'title' and
             data.factory.fieldcls is not zope.schema.TextLine
         ):
             raise zope.interface.Invalid(
                 __(
                     u"The 'title' field must be a Text line (string) "
                     u"field."
                 )
             )
         if (
             data.__name__ == 'description' and
             data.factory.fieldcls is not zope.schema.Text
         ):
             raise zope.interface.Invalid(
                 __(u"The 'description' field must be a Text field."))
Exemple #9
0
class AjaxSaveHandler(BrowserView):
    """ handle AJAX save posts """
    def authorized(self):
        authenticator = queryMultiAdapter((self.context, self.request),
                                          name=u'authenticator')
        return authenticator and authenticator.verify()

    def save(self, source):
        self.context.aq_parent.fields_model = source

    def __call__(self):
        """ handle AJAX save post """

        if not self.authorized():
            raise Unauthorized

        source = self.request.form.get('source')
        if source:
            # Is it valid XML?
            try:
                root = etree.fromstring(source)
            except etree.XMLSyntaxError, e:
                return dumps({
                    'success':
                    False,
                    'message':
                    "XMLSyntaxError: {0}".format(e.message.encode('utf8'))
                })

            # a little more sanity checking, look at first two element levels
            basens = '{http://namespaces.plone.org/supermodel/schema}'
            if root.tag != basens + 'model':
                return dumps({
                    'success': False,
                    'message': __(u"Error: root tag must be 'model'")
                })
            for element in root.getchildren():
                if element.tag != basens + 'schema':
                    return dumps({
                        'success':
                        False,
                        'message':
                        __(u"Error: all model elements must be 'schema'")
                    })

            # can supermodel parse it?
            # This is mainly good for catching bad dotted names.
            try:
                loadString(source)
            except SupermodelParseError, e:
                message = e.args[0].replace('\n  File "<unknown>"', '')
                return dumps({
                    'success':
                    False,
                    'message':
                    u"SuperModelParseError: {0}".format(message)
                })

            # clean up formatting sins
            source = etree.tostring(root,
                                    pretty_print=True,
                                    xml_declaration=True,
                                    encoding='utf8')
            # and save
            self.save(source)

            self.request.response.setHeader('Content-Type', 'application/json')
            return dumps({'success': True, 'message': __(u"Saved")})
def isValidFieldName(value):
    if not ID_RE.match(value):
        raise Invalid(__(u'Please use only letters, numbers and '
                         u'the following characters: _.'))
    return True
Exemple #11
0
def isValidFieldName(value):
    if not ID_RE.match(value):
        raise Invalid(
            __(u'Please use only letters, numbers and '
               u'the following characters: _.'))
    return True
Exemple #12
0
class IActionFactory(IField):
    """ A component that instantiates a action when called.
    """
    title = TextLine(title=__(u'Title'))
class IActionFactory(zope.schema.interfaces.IField):
    """ A component that instantiates a action when called.
    """

    title = zope.schema.TextLine(title=__(u"Title"))
def isValidFieldName(value):
    if not ID_RE.match(value):
        raise zope.interface.Invalid(
            __(u"Please use only letters, numbers and "
               u"the following characters: _."))
    return True
    def __call__(self):
        """ handle AJAX save post """

        if not self.authorized():
            raise Unauthorized

        source = self.request.form.get("source")
        if source:
            # Is it valid XML?
            try:
                root = etree.fromstring(source)
            except etree.XMLSyntaxError, e:
                return dumps({"success": False, "message": "XMLSyntaxError: {0}".format(e.message.encode("utf8"))})

            # a little more sanity checking, look at first two element levels
            basens = "{http://namespaces.plone.org/supermodel/schema}"
            if root.tag != basens + "model":
                return dumps({"success": False, "message": __(u"Error: root tag must be 'model'")})
            for element in root.getchildren():
                if element.tag != basens + "schema":
                    return dumps({"success": False, "message": __(u"Error: all model elements must be 'schema'")})

            # can supermodel parse it?
            # This is mainly good for catching bad dotted names.
            try:
                loadString(source)
            except SupermodelParseError, e:
                message = e.args[0].replace('\n  File "<unknown>"', "")
                return dumps({"success": False, "message": u"SuperModelParseError: {0}".format(message)})