示例#1
0
 def xml(self):
     """
     Get xml representation of the object.
     @return: The root node.
     @rtype: L{Element}
     """
     root = Element('Security', ns=wssens)
     root.set('mustUnderstand', str(self.mustUnderstand).lower())
     for t in self.tokens:
         root.append(t.xml())
     return root
示例#2
0
 def add(self, root):
     """
     Add an <xs:import/> to the specified schema root.
     @param root: A schema root.
     @type root: L{Element}
     """
     node = Element('import', ns=self.xsdns)
     node.set('namespace', self.ns)
     if self.location is not None:
         node.set('schemaLocation', self.location)
     log.debug('%s inserted', node)
     root.insert(node)
示例#3
0
 def body(self, content):
     """
     Build the B{<Body/>} for an soap outbound message.
     @param content: The body content.
     @type content: L{Element}
     @return: the soap body fragment.
     @rtype: L{Element}
     """
     env_ns = self.wsdl.options.envns
     body = Element('Body', ns=env_ns)
     body.append(content)
     return body
示例#4
0
 def header(self, content):
     """
     Build the B{<Body/>} for an soap outbound message.
     @param content: The header content.
     @type content: L{Element}
     @return: the soap body fragment.
     @rtype: L{Element}
     """
     env_ns = self.wsdl.options.envns
     header = Element('Header', ns=env_ns)
     header.append(content)
     return header
示例#5
0
 def xml(self):
     root = Element("Timestamp", ns=wsuns)
     created = Element('Created', ns=wsuns)
     created.setText(str(UTC(self.created)))
     expires = Element('Expires', ns=wsuns)
     expires.setText(str(UTC(self.expires)))
     root.append(created)
     root.append(expires)
     return root
示例#6
0
 def startElement(self, name, attrs):
     top = self.top()
     node = Element(unicode(name), parent=top)
     for a in attrs.getNames():
         n = unicode(a)
         v = unicode(attrs.getValue(a))
         attribute = Attribute(n,v)
         if self.mapPrefix(node, attribute):
             continue
         node.append(attribute)
     node.charbuffer = []
     top.append(node)
     self.push(node)
示例#7
0
 def node(self, content):
     #
     # Create an XML node and namespace qualify as defined
     # by the schema (elementFormDefault).
     #
     ns = content.type.namespace()
     if content.type.form_qualified:
         node = Element(content.tag, ns=ns)
         node.addPrefix(ns[0], ns[1])
     else:
         node = Element(content.tag)
     self.encode(node, content)
     log.debug('created - node:\n%s', node)
     return node
示例#8
0
 def apply(self, root):
     """
     Apply the import (rule) to the specified schema.
     If the schema does not already contain an import for the
     I{namespace} specified here, it is added.
     @param root: A schema root.
     @type root: L{Element}
     """
     if not self.filter.match(root, self.ns):
         return
     if self.exists(root):
         return
     node = Element('import', ns=self.xsdns)
     node.set('namespace', self.ns)
     if self.location is not None:
         node.set('schemaLocation', self.location)
     log.debug('inserting: %s', node)
     root.insert(node)
示例#9
0
 def autoblend(self):
     """
     Ensure that all schemas within the collection
     import each other which has a blending effect.
     @return: self
     @rtype: L{SchemaCollection}
     """
     namespaces = self.namespaces.keys()
     for s in self.children:
         for ns in namespaces:
             tns = s.root.get('targetNamespace')
             if  tns == ns:
                 continue
             for imp in s.root.getChildren('import'):
                 if imp.get('namespace') == ns:
                     continue
             imp = Element('import', ns=Namespace.xsdns)
             imp.set('namespace', ns)
             s.root.append(imp)
     return self
示例#10
0
 def build_schema(self):
     """ Process L{Types} objects and create the schema collection """
     container = SchemaCollection(self)
     for t in [t for t in self.types if t.local()]:
         for root in t.contents():
             schema = Schema(root, self.url, self.options, container)
             container.add(schema)
     if not len(container): # empty
         root = Element.buildPath(self.root, 'types/schema')
         schema = Schema(root, self.url, self.options, container)
         container.add(schema)
     self.schema = yield container.load(self.options)
     for s in [t.schema() for t in self.types if t.imported()]:
         self.schema.merge(s)
     defer.returnValue(self.schema)
示例#11
0
 def envelope(self, header, body):
     """
     Build the B{<Envelope/>} for an soap outbound message.
     @param header: The soap message B{header}.
     @type header: L{Element}
     @param body: The soap message B{body}.
     @type body: L{Element}
     @return: The soap envelope containing the body and header.
     @rtype: L{Element}
     """
     env_ns = self.wsdl.options.envns
     env = Element('Envelope', ns=env_ns)
     env.addPrefix(Namespace.xsins[0], Namespace.xsins[1])
     env.append(header)
     env.append(body)
     return env
示例#12
0
 def add_operations(self, root, definitions):
     """ Add <operation/> children """
     dsop = Element('operation', ns=soapns)
     for c in root.getChildren('operation'):
         op = Facade('Operation')
         op.name = c.get('name')
         sop = c.getChild('operation', default=dsop)
         soap = Facade('soap')
         soap.action = '"%s"' % sop.get('soapAction', default='')
         soap.style = sop.get('style', default=self.soap.style)
         soap.input = Facade('Input')
         soap.input.body = Facade('Body')
         soap.input.headers = []
         soap.output = Facade('Output')
         soap.output.body = Facade('Body')
         soap.output.headers = []
         op.soap = soap
         input = c.getChild('input')
         if input is None:
             input = Element('input', ns=wsdlns)
         body = input.getChild('body')
         self.body(definitions, soap.input.body, body)
         for header in input.getChildren('header'):
             self.header(definitions, soap.input, header)
         output = c.getChild('output')
         if output is None:
             output = Element('output', ns=wsdlns)
         body = output.getChild('body')
         self.body(definitions, soap.output.body, body)
         for header in output.getChildren('header'):
             self.header(definitions, soap.output, header)
         faults = []
         for fault in c.getChildren('fault'):
             sf = fault.getChild('fault')
             if sf is None:
                 continue
             fn = fault.get('name')
             f = Facade('Fault')
             f.name = sf.get('name', default=fn)
             f.use = sf.get('use', default='literal')
             faults.append(f)
         soap.faults = faults
         self.operations[op.name] = op
示例#13
0
def basic():
    xml = "<a>Me &amp;&amp; &lt;b&gt;my&lt;/b&gt; shadow&apos;s &lt;i&gt;dog&lt;/i&gt; love to &apos;play&apos; and sing &quot;la,la,la&quot;;</a>"
    p = Parser()
    d = p.parse(string=xml)
    a = d.root()
    print 'A(parsed)=\n%s' % a
    assert str(a) == xml
    b = Element('a')
    b.setText('Me &&amp; &lt;b>my</b> shadow\'s <i>dog</i> love to \'play\' and sing "la,la,la";')
    print 'B(encoded)=\n%s' % b
    assert str(b) == xml
    print 'A(text-decoded)=\n%s' % a.getText()
    print 'B(text-decoded)=\n%s' % b.getText()
    assert a.getText() == b.getText()
    print 'test pruning'
    j = Element('A')
    j.set('n', 1)
    j.append(Element('B'))
    print j
    j.prune()
    print j
示例#14
0
 def __init__(self, content):
     Element.__init__(self, content.name, content.parent)
     self.__content = content
示例#15
0
 def __init__(self, root=None):
     Element.__init__(self, 'document')
     if root is not None:
         self.append(root)
示例#16
0
 def xml(self):
     """
     Get xml representation of the object.
     @return: The root node.
     @rtype: L{Element}
     """
     root = Element('UsernameToken', ns=wssens)
     u = Element('Username', ns=wssens)
     u.setText(self.username)
     root.append(u)
     p = Element('Password', ns=wssens)
     p.setText(self.password)
     root.append(p)
     if self.nonce is not None:
         n = Element('Nonce', ns=wssens)
         n.setText(self.nonce)
         root.append(n)
     if self.created is not None:
         n = Element('Created', ns=wsuns)
         n.setText(str(UTC(self.created)))
         root.append(n)
     return root