Example #1
0
 def cb(self, sw, pyobj, name=None, **kw):
     if not self.mutable and sw.Known(pyobj): return
     objid = _get_object_id(pyobj)
     n = name or self.oname or ('E' + objid)
     if self.inline:
         print >>sw, '<%s>' % n
     else:
         if kw.get('typed', self.typed):
             attrtext = ' xmlns="%s" xsi:type="%s" ' % (self.type[0], self.type[1])
         else:
             attrtext = ''
         print >>sw, '<%s %sid="%s">' % (n, attrtext, objid)
     if self.pyclass:
         d = pyobj.__dict__
     else:
         d = pyobj
         if TypeCode.typechecks and type(d) != types.DictType:
             raise TypeError("Classless struct didn't get dictionary")
     for what in self.ofwhat:
         v = d.get(what.aname)
         if v is None:
             v = d.get(what.aname.lower())
         if what.optional and v is None: continue
         try:
             if what.repeatable and type(v) in _seqtypes:
                 for v2 in v: what.serialize(sw, v2)
             else:
                 what.serialize(sw, v)
         except Exception, e:
             raise Exception('Serializing %s.%s, %s %s' %
                     (n, what.aname or '?', e.__class__.__name__, str(e)))
Example #2
0
 def serialize(self, sw, pyobj, inline=None, name=None, attrtext='', **kw):
     if inline or self.inline:
         self.cb(sw, pyobj, name=name, **kw)
     else:
         objid = _get_object_id(pyobj)
         n = name or self.oname or ('E' + objid)
         print >>sw, '<%s%s href="#%s"/>' % (n, attrtext, objid)
         sw.AddCallback(self.cb, pyobj)
Example #3
0
    def serialize(self, sw, pyobj, name=None, attrtext='', childnames=None,
    **kw):
        if not self.mutable and sw.Known(pyobj): return
        objid = _get_object_id(pyobj)
        n = name or self.oname or ('E' + objid)
        offsettext = ''
        if not self.sparse and not self.nooffset:
            offset, end = 0, len(pyobj)
            while offset < end and pyobj[offset] == self.fill:
                offset += 1
            if offset: offsettext = ' SOAP-ENC:offset="[%d]"' % offset
        if self.unique:
            idtext = ''
        else:
            idtext = ' id="%s"' % objid
        if self.undeclared:
            print >>sw, '<%s%s%s%s>' % \
                    (n, attrtext, offsettext, idtext)
        else:
            print >>sw, '<%s%s%s%s SOAP-ENC:arrayType="%s">' % \
                    (n, attrtext, offsettext, idtext, self.atype)
        d = {}
        kn = childnames or self.childnames
        if kn:
            d['name'] = kn
        elif not self.ofwhat.aname:
            d['name'] = 'element'
        if not self.sparse:
            for e in pyobj[offset:]: self.ofwhat.serialize(sw, e, **d)
        else:
            position = 0
            for pos, v in pyobj:
                if pos != position:
                    d['attrtext'] = ' SOAP-ENC:position="[%d]"' % pos
                    position = pos
                else:
                    d['attrtext'] = ''
                self.ofwhat.serialize(sw, v, **d)
                position += 1

        i = n.find('xmlns')
        if i > 0:
            print >>sw, '</%s>' % n[:i - 1]
        else:
            print >>sw, '</%s>' % n