def _create_renderables(self, child, view): cls = "" if child.tag in XMLFormFactory.controlClasses: cls = XMLFormFactory.controlClasses[child.tag] elif Registry.get_renderable(child.tag): cls = Registry.get_renderable(child.tag) else: cls = eval(child.tag.capitalize()) kwargs = {} for elt in child.xpath("./property"): kwargs[elt.get("name")] = elt.text for elt in ["hint", "help", "alert"]: if child.xpath("./%s" % elt): kwargs[elt] = child.xpath("./%s" % elt)[0].text or '' if cls == Text: ctrl = cls(child.get("id"), child.text, bind=child.get("bind"), **kwargs) elif cls.__name__ == "Hidden": ctrl = cls(child.get("id"), bind=child.get("bind"), **kwargs) elif cls == Submit: ctrl = cls(child.get("id"), child.find("label").text, **kwargs) elif cls == Group: cls = eval("%sGroup" % child.get("layout", "flow").capitalize()) label = '' try: label = child.find("label").text except: pass ctrl = cls(child.get("id"), label, **kwargs) else: label = '' try: label = child.find("label").text except: pass ctrl = cls(child.get("id"), label, bind=child.get("bind"), **kwargs) if hasattr(ctrl, "addOption"): for subchild in child.xpath("option"): ctrl.addOption( Option(subchild.get("value"), subchild.text or '')) for subchild in child.xpath("|".join( Registry.get_registered_renderables())): self._create_renderables(subchild, ctrl) view.addRenderable(ctrl)
def _create_renderables(self, child, view): cls = "" if child.tag in XMLFormFactory.controlClasses: cls = XMLFormFactory.controlClasses[child.tag] elif Registry.get_renderable(child.tag): cls = Registry.get_renderable(child.tag) else: cls = eval(child.tag.capitalize()) kwargs = {} for attrib in child.keys(): if attrib in kwargs_attrs: kwargs[attrib] = child.get(attrib) for elt in child.xpath("./property"): kwargs[elt.get("name")] = elt.text for elt in ["hint", "help", "alert", "placeholder"]: if child.xpath("./%s" % elt): kwargs[elt] = child.xpath("./%s" % elt)[0].text or '' if cls == Text: ctrl = cls(child.get("id"), ''.join(child.xpath("./text()")), **kwargs) elif cls == Hidden: ctrl = cls(child.get("id"), **kwargs) elif cls == Submit: ctrl = cls(child.get("id"), child.find("label").text, **kwargs) elif cls == Group: layout_class = "%sGroup" % child.get("layout", "flow").capitalize() if Registry.get_renderable(layout_class.lower()): cls = Registry.get_renderable(layout_class.lower()) else: cls = eval(layout_class) label = '' try: label = child.find("label").text except: pass ctrl = cls(child.get("id"), label, **kwargs) else: label = '' try: label = child.find("label").text except: pass ctrl = cls(child.get("id"), label, **kwargs) if hasattr(ctrl, "addOption") and getattr(ctrl, "addOption"): for subchild in child.xpath("option"): if subchild.xpath("label"): # assume only one text = subchild.xpath("label")[0].text else: text = subchild.text or '' ctrl.addOption(Option(subchild.get("value"), text)) for subchild in child.xpath("|".join( Registry.get_registered_renderables())): self._create_renderables(subchild, ctrl) view.addRenderable(ctrl)