def load_and_cache_assembly(name, outfile): tmpfile = udir.join(name) arglist = SDK.runtime() + [Query.get(), name, str(tmpfile)] retcode = subprocess.call(arglist) assert retcode == 0 mydict = {} execfile(str(tmpfile), mydict) types = mydict['types'] f = outfile.open('wb') pickle.dump(types, f, pickle.HIGHEST_PROTOCOL) f.close() return types
def load_assembly(name): if name in Assemblies: return Query.get() # clear the cache if we need to recompile _cache = get_cachedir() outfile = _cache.join(name + '.pickle') if outfile.check(): f = outfile.open('rb') types = pickle.load(f) f.close() else: types = load_and_cache_assembly(name, outfile) for ttype in types: parts = ttype.split('.') ns = parts[0] Namespaces.add(ns) for part in parts[1:-1]: ns = '%s.%s' % (ns, part) Namespaces.add(ns) Assemblies.add(name) Types.update(types)