#import MkWrap import imputil import strop import zlib import os import marshal class MkImporter: def __init__(self, db, viewnm='pylib'): self.db = db self.view = db.getas(viewnm+'[name:S, ispkg:I, code:M]') # an MkWrap view object def setImportHooks(self): imputil.FuncImporter(self.get_code).install() def get_code(self, parent, modname, fqname): if self.view is None: return None ndx = self.view.search(name=fqname) if ndx < len(self.view): row = self.view[ndx] if row.name == fqname: return (row.ispkg, marshal.loads(zlib.decompress(row.code))) return None def build(self, lTOC): for entry in lTOC: nm, fnm = entry[0], entry[1] ispkg = os.path.splitext(os.path.basename(fnm))[0] == '__init__' ndx = self.view.search(name=nm) if ndx < len(self.view): row = self.view[ndx] if row.name != nm: self.view.insert(ndx, {}) row = self.view[ndx] else: ndx = self.view.append({}) row = self.view[ndx] row.name = nm row.ispkg = ispkg f = open(fnm, 'rb') f.seek(8) obj = zlib.compress(f.read(), 9) row.code = obj self.db.commit()