def deserialize(f, **kwargs): #st=time.time() if not type(f) in [str, unicode]: f=f.read() l=struct.unpack('<I', f[:4])[0] doc=zlib.decompress(f[4:l+4]) doc=StringIO(doc) doc=xm.readTree(doc) from mien.parsers.nmpml import elements as dialect doc=xm.assignClasses(doc, dialect) f=f[l+4:] try: if f: from mien.parsers.datahash import readMD try: f2=StringIO(f) f=readMD(f2, return_raw_hash=True) except: f=zlib.decompress(f) f2=StringIO(f) f=readMD(f2, return_raw_hash=True) del(f2) des=doc.getElements('Data') for de in des: try: d, h=f[de.upath()] except: print "can't find data for element %s" % (de.upath(),) d, h=(zeros(0), {}) de.datinit(d, h) except: print "cant load data" #print time.time()-st;st=time.time() return doc