def test_model(): ns = xnd.Module(xmlns) ns += xnd.Element(None, "foo", modeltype=True) ns = xnd2ns(ns) assert isinstance(ns.foo.model, sims.Any) ns = xnd.Module() ns += xnd.Element(None, "foo", modeltype=False) ns = xnd2ns(ns) assert isinstance(ns.foo.model, sims.Empty)
def test_entity(): ns = xnd.Module() ns += xnd.Entity("foo", doc="gurk") ns = xnd2ns(ns) assert issubclass(ns.foo, xsc.Entity) assert ns.foo.__doc__.strip() == "gurk" ns = xnd.Module() ns += xnd.Entity("f-o-o") ns = xnd2ns(ns) assert issubclass(ns.f_o_o, xsc.Entity) assert ns.f_o_o.xmlname == "f-o-o"
def test_charref(): ns = xnd.Module() ns += xnd.CharRef("foo", doc="gurk", codepoint=0x3042) ns = xnd2ns(ns) assert issubclass(ns.foo, xsc.CharRef) assert ns.foo.__doc__.strip() == "gurk" assert ns.foo.codepoint == 0x3042 ns = xnd.Module() ns += xnd.CharRef("f-o-o", codepoint=0x3042) ns = xnd2ns(ns) assert issubclass(ns.f_o_o, xsc.CharRef) assert ns.f_o_o.xmlname == "f-o-o"
def test_procinst(): ns = xnd.Module() ns += xnd.ProcInst("foo", doc="gurk") ns = xnd2ns(ns) assert issubclass(ns.foo, xsc.ProcInst) assert ns.foo.__doc__.strip() == "gurk" ns = xnd.Module(xmlns) ns += xnd.ProcInst("f-o-o") ns = xnd2ns(ns) assert issubclass(ns.f_o_o, xsc.ProcInst) assert ns.f_o_o.xmlname == "f-o-o"
def test_element(): ns = xnd.Module() ns += xnd.Element("http://xmlns.foo.com", "foo") ns += xnd.Element("http://xmlns.foo2.com", "foo") ns = xnd2ns(ns) assert ns.foo.xmlname == "foo" assert ns.foo.xmlns == "http://xmlns.foo.com" assert ns.foo2.xmlname == "foo" assert ns.foo2.xmlns == "http://xmlns.foo2.com"
def asxnd(self, model="simple"): ns = xnd.Module() node = misc.first(self[uri], None) xmlns = str(node[0].content) if node is not None else None node = misc.first(self[info], None) if node is not None: ns.doc = node.asxnd(model=model) for node in self[tag]: e = node.asxnd(model=model) if xmlns is not None and isinstance(e, xnd.Element): e.xmlns = xmlns ns += e return ns
def urls2xnd(urls, shareattrs=None, **kwargs): ns = xnd.Module(**kwargs) with url.Context(): if not urls: urls = [sys.stdin] for u in urls: if isinstance(u, url.URL): u = u.openread() elif isinstance(u, str): u = io.StringIO(u) adddtd2xnd(ns, u) if shareattrs == "dupes": ns.shareattrs(False) elif shareattrs == "all": ns.shareattrs(True) return ns
def makexnd(urls, parser="etree", shareattrs="dupes", model="simple", defaultxmlns=None): elements = {} # maps (name, xmlns) to content set ns = xnd.Module(defaultxmlns=defaultxmlns, model=model) with url.Context(): if not urls: urls = [sys.stdin] for u in urls: if isinstance(u, url.URL): u = u.openread() elif isinstance(u, str): u = io.BytesIO(u.encode("utf-8")) elif isinstance(u, bytes): u = io.BytesIO(u) if parser == "etree": from xml.etree import cElementTree node = cElementTree.parse(u).getroot() elif parser == "lxml": from lxml import etree node = etree.parse(u).getroot() else: raise ValueError("unknown parser {!r}".format(parser)) addetree2xnd(ns, node, elements) # Put sims info into the element definitions if model == "none": pass elif model == "simple": for (fullname, modelset) in list(elements.items()): ns.elements[fullname].modeltype = bool(modelset) elif model in ("fullall", "fullonce"): for (fullname, modelset) in list(elements.items()): element = ns.elements[fullname] if not modelset: element.modeltype = "sims.Empty" else: elements = [ el for el in modelset if isinstance(el, xnd.Element) ] if not elements: if "#text" in modelset: element.modeltype = "sims.NoElements" else: element.modeltype = "sims.NoElementsOrText" else: if "#text" in modelset: element.modeltype = "sims.ElementsOrText" else: element.modeltype = "sims.Elements" element.modelargs = elements else: raise ValueError("unknown sims mode {!r}".format(model)) if shareattrs == "dupes": ns.shareattrs(False) elif shareattrs == "all": ns.shareattrs(True) return ns
def test_xmlns(): ns = xnd.Module(xmlns) ns = xnd2ns(ns) assert ns.xsc is xsc