コード例 #1
0
    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'))
コード例 #2
0
ファイル: transform_file.py プロジェクト: chick/ast_tool_box
    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'))
コード例 #3
0
 def delete_module(module_name):
     Util.clear_classes_in_package(module_name)