Exemple #1
0
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)
Exemple #2
0
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"
Exemple #3
0
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"
Exemple #4
0
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"
Exemple #5
0
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
Exemple #8
0
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
Exemple #9
0
def test_xmlns():
    ns = xnd.Module(xmlns)
    ns = xnd2ns(ns)
    assert ns.xsc is xsc