def update(self): self.load_error_info = None self.load_error_line_number = None if self.package_name in sys.modules: Util.clear_classes_in_package(self.package_name) self.source_text = '' with open(self.file_name, "r") as f: self.source_text = f.read() self.class_def_nodes = {} self.node_transforms = [] self.code_generators = [] self.ast_tree = ast.parse(self.source_text) for node in ast.walk(self.ast_tree): if isinstance(node, ast.ClassDef): self.class_def_nodes[node.name] = node print("transform file %s %s" % (self.path, self.package_name)) if not self.path in sys.path: sys.path.append(self.path) try: __import__(self.package_name) except Exception as exception: exc_type, exc_obj, exc_tb = sys.exc_info() message = "Exception: %s" % exception.message message += "\nWhile loading file %s" % self.file_name if hasattr(exc_tb, 'tb_lineno'): message += "\nAt line number %s" % exc_tb.tb_lineno print("cannot load %s message %s" % (self.package_name, exception.message)) self.load_error_info = message self.load_error_line_number = exc_tb.tb_lineno return module = sys.modules[self.package_name] for key in module.__dict__: thing = module.__dict__[key] new_transform = TransformFactory.get(thing, file_name=self.file_name, transform_collection=self) if isinstance(new_transform, AstTransformItem): self.node_transforms.append(new_transform) elif isinstance(new_transform, CodeGeneratorItem): self.code_generators.append(new_transform) self.node_transforms.sort(key=methodcaller('name')) self.code_generators.sort(key=methodcaller('name'))
def delete_module(module_name): Util.clear_classes_in_package(module_name)