def reload(self): if self.source is None: return module = importlib.reload(get_module(self.source)) modsrc = ModuleSource(module) funcs = modsrc.funcs newfuncs = set(funcs) oldfuncs = { cells.formula.name for cells in self.cells.values() if cells.formula.module == module.__name__ } cells_to_add = newfuncs - oldfuncs cells_to_clear = oldfuncs - newfuncs cells_to_update = oldfuncs & newfuncs for name in cells_to_clear: self.cells[name].reload(module=modsrc) for name in cells_to_add: self.new_cells(name=name, formula=funcs[name]) for name in cells_to_update: self.cells[name].reload(module=modsrc)
def new_cells_from_module(self, module, override=True): # Outside formulas only module = get_module(module) newcells = {} for name in dir(module): func = getattr(module, name) if isinstance(func, FunctionType): # Choose only the functions defined in the module. if func.__module__ == module.__name__: if name in self.namespace_impl and override: self.cells[name].set_formula(func) newcells[name] = self.cells[name] else: newcells[name] = self.new_cells(name, func) return newcells
def new_space_from_module(self, module, recursive=False, **params): params["source"] = module = get_module(module) if "name" not in params or params["name"] is None: # xxx.yyy.zzz -> zzz name = params["name"] = module.__name__.split(".")[-1] else: name = params["name"] if "doc" not in params: params["doc"] = module.__doc__ space = self.new_space(**params) space.new_cells_from_module(module) if recursive and hasattr(module, "_spaces"): for name in module._spaces: submodule = module.__name__ + "." + name space.new_space_from_module(module=submodule, recursive=True) return space