def validate(self, node=None): #print repr(node) #re-validate all constraints, not just this one (interlocking constraints will likely be coming in future) if node: #Check all constraints for constraint in self.constraints: constraint.validate(node) #Make sure all known element types have corresponding properties on the node class for (ns, local), (pname, default) in self.element_types.iteritems(): if not hasattr(node, pname): from amara.bindery.nodes import node setattr(node.__class__, pname, bound_element(ns, local)) else: for d in self.entities: subtree = element_subtree_iter(d, include_root=True) for e in subtree: if e.xml_model == self: self.validate(e) return
#Note: Moin for somereason seems to give 403 errors on some URLs in response to Curl's UA if e.code == 403 or e.code == 404: raise MoinMustAuthenticateError(url=request.get_full_url(),target=wiki_id) else: raise UnexpectedResponseError(url=request.get_full_url(),code=e.code,error=str(e)) try: form = doc.html.body.xml_select(u'.//*[@id="editor"]')[0] except Exception as ex: #XXX There seems to be a crazy XPath bug that only manifests here #Use non-XPath as a hack-around :( #open('/tmp/foo.html', 'w').write(x) logger.debug('Stupid XPath bug. Working around... ' + repr(ex)) from amara.lib.util import element_subtree_iter form = [ e for e in element_subtree_iter(doc.html.body) if e.xml_attributes.get(u'id') == u'editor' ][0] #logger.debug('GRIPPO ' + repr(doc.html.body.xml_select(u'.//form'))) #logger.debug('GRIPPO ' + repr((form.xml_namespace, form.xml_local, form.xml_qname, form.xml_name, dict(form.xml_attributes)))) form_vars = {} #form / fieldset / input form_vars["action"] = [ e for e in element_subtree_iter(form) if e.xml_attributes.get(u'name') == u'action' ][0].xml_attributes[u'value'] form_vars["rev"] = [ e for e in element_subtree_iter(form) if e.xml_attributes.get(u'name') == u'rev' ][0].xml_attributes[u'value'] form_vars["ticket"] = [ e for e in element_subtree_iter(form) if e.xml_attributes.get(u'name') == u'ticket' ][0].xml_attributes[u'value'] form_vars["editor"] = [ e for e in element_subtree_iter(form) if e.xml_attributes.get(u'name') == u'editor' ][0].xml_attributes[u'value'] #logger.debug('Edit form vars ' + repr(form_vars)) return form_vars form_vars = {} #form / fieldset / input form_vars["action"] = unicode(form.xml_select(u'string(*/*[@name="action"]/@value)')) form_vars["rev"] = unicode(form.xml_select(u'string(*/*[@name="rev"]/@value)')) form_vars["ticket"] = unicode(form.xml_select(u'string(*/*[@name="ticket"]/@value)'))
target=wiki_id) else: raise UnexpectedResponseError(url=request.get_full_url(), code=e.code, error=str(e)) try: form = doc.html.body.xml_select(u'.//*[@id="editor"]')[0] except Exception as ex: #XXX There seems to be a crazy XPath bug that only manifests here #Use non-XPath as a hack-around :( #open('/tmp/foo.html', 'w').write(x) logger.debug('Stupid XPath bug. Working around... ' + repr(ex)) from amara.lib.util import element_subtree_iter form = [ e for e in element_subtree_iter(doc.html.body) if e.xml_attributes.get(u'id') == u'editor' ][0] #logger.debug('GRIPPO ' + repr(doc.html.body.xml_select(u'.//form'))) #logger.debug('GRIPPO ' + repr((form.xml_namespace, form.xml_local, form.xml_qname, form.xml_name, dict(form.xml_attributes)))) form_vars = {} #form / fieldset / input form_vars["action"] = [ e for e in element_subtree_iter(form) if e.xml_attributes.get(u'name') == u'action' ][0].xml_attributes[u'value'] form_vars["rev"] = [ e for e in element_subtree_iter(form) if e.xml_attributes.get(u'name') == u'rev' ][0].xml_attributes[u'value'] form_vars["ticket"] = [