def testConstructor (self): ln = 'local' ns_uri = 'urn:ns' en = ExpandedName(ln) self.assertEqual(en.namespace(), None) self.assertEqual(en.localName(), ln) en2 = ExpandedName(en) self.assertEqual(en2, en) dom = pyxb.utils.domutils.StringToDOM('<ns1:%s xmlns:ns1="%s" attr="52">content</ns1:%s>' % (ln, ns_uri, ln)) en = ExpandedName(dom.documentElement) ns = pyxb.namespace.NamespaceForURI(ns_uri) self.assertTrue(ns is not None) self.assertEqual(ns, en.namespace()) self.assertEqual(ln, en.localName()) en2 = ExpandedName(ns, ln) self.assertEqual(en, en2) attr = dom.documentElement.getAttributeNodeNS(None, 'attr') self.assertTrue(attr is not None) en = ExpandedName(attr) self.assertEqual(xml.dom.EMPTY_NAMESPACE, en.namespaceURI()) self.assertEqual('attr', en.localName()) child = dom.documentElement.firstChild self.assertTrue(child is not None) self.assertEqual(xml.dom.Node.TEXT_NODE, child.nodeType) self.assertRaises(pyxb.LogicError, ExpandedName, child)
def testEquivalence (self): an1 = ExpandedName(None, 'string') en1 = ExpandedName(xsd, 'string') en2 = ExpandedName(xsd, 'string') en3 = ExpandedName(xsd, 'notString') self.assertEqual(en1, en2) self.assertEqual(en1, ( en1.namespace(), en1.localName() )) self.assertTrue(en1 == en2) self.assertFalse(en1 == en3) self.assertTrue(en1 != en3) self.assertTrue(an1 == an1.localName()) self.assertFalse(an1 == en3.localName()) self.assertTrue(an1 != en3.localName()) self.assertFalse(an1 != an1.localName())
def testMapping (self): an1 = ExpandedName(None, 'string') en1 = ExpandedName(xsd, 'string') en2 = ExpandedName(xsd, 'string') mymap = { } mymap[en1] = 'Yes' mymap[an1] = 'No' mymap['key'] = 'Key' self.assertEqual(mymap[en2], 'Yes') self.assertEqual(mymap[an1], 'No') self.assertEqual(mymap[an1.localName()], 'No') self.assertNotEqual(mymap[en2.localName()], 'Yes') self.assertEqual(mymap['key'], 'Key') self.assertEqual(mymap[ExpandedName(None, 'key')], 'Key') self.assertEqual(None, mymap.get('nokey')) del mymap[en2] self.assertEqual(None, mymap.get(en1))
def get_attribute_value(self, att_name): """ This function is a handy extension that allows us to easily look up attribute values regardless whether they are local or namespaced attribute names. I did not find its equivalent in PyXB. :param att_name: :return: """ attr_en = ExpandedName(*att_name.split(':')) # NOTE: At this point we should go to attribute map locate the attribute but for that the namespace has to be # located too because its fully qualified name is required... etc. cutting corners here as we don't mix local # and namespaced attributes of the same name so fairly safe to just take the localname bit. But this # is not a fully XML compliant way to support all possibilities in all cases. return getattr(self, attr_en.localName())
def fulluri(n: ExpandedName) -> URIRef: """ Return the full uri of the expanded name :param n: expanded name :return: full URI """ return URIRef(nsuri(n) + n.localName())