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."))
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 __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."))
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) })
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."))
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
def isValidFieldName(value): if not ID_RE.match(value): raise Invalid( __(u'Please use only letters, numbers and ' u'the following characters: _.')) return True
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)})