Ejemplo n.º 1
0
 def get_pymodule(self):
     """Get a `PyModule`"""
     msg = None
     code = self.code
     tries = 0
     while True:
         try:
             if (
                 tries == 0
                 and self.resource is not None
                 and self.resource.read() == code
             ):
                 return self.project.get_pymodule(self.resource, force_errors=True)
             return libutils.get_string_module(
                 self.project, code, resource=self.resource, force_errors=True
             )
         except exceptions.ModuleSyntaxError as e:
             if msg is None:
                 msg = "%s:%s %s" % (e.filename, e.lineno, e.message_)
             if tries < self.maxfixes:
                 tries += 1
                 self.commenter.comment(e.lineno)
                 code = "\n".join(self.commenter.lines)
             else:
                 raise exceptions.ModuleSyntaxError(
                     e.filename, e.lineno, "Failed to fix error: {0}".format(msg)
                 )
Ejemplo n.º 2
0
 def get_pymodule(self):
     """Get a `PyModule`"""
     errors = []
     code = self.code
     tries = 0
     while True:
         try:
             if tries == 0 and self.resource is not None and \
                self.resource.read() == code:
                 return self.pycore.resource_to_pyobject(self.resource,
                                                         force_errors=True)
             return self.pycore.get_string_module(code,
                                                  resource=self.resource,
                                                  force_errors=True)
         except exceptions.ModuleSyntaxError, e:
             if tries < self.maxfixes:
                 tries += 1
                 self.commenter.comment(e.lineno)
                 code = '\n'.join(self.commenter.lines)
                 errors.append('  * line %s: %s ... fixed' %
                               (e.lineno, e.message_))
             else:
                 errors.append('  * line %s: %s ... raised!' %
                               (e.lineno, e.message_))
                 new_message = ('\nSyntax errors in file %s:\n' % e.filename) \
                                + '\n'.join(errors)
                 raise exceptions.ModuleSyntaxError(e.filename, e.lineno,
                                                    new_message)
Ejemplo n.º 3
0
 def _init_source(self, pycore, source_code, resource):
     filename = 'string'
     if resource:
         filename = resource.path
     try:
         if source_code is None:
             source_bytes = resource.read_bytes()
             source_code = fscommands.file_data_to_unicode(source_bytes)
         else:
             if isinstance(source_code, unicode):
                 source_bytes = fscommands.unicode_to_file_data(source_code)
             else:
                 source_bytes = source_code
         ast_node = ast.parse(source_bytes, filename=filename)
     except SyntaxError as e:
         raise exceptions.ModuleSyntaxError(filename, e.lineno, e.msg)
     except UnicodeDecodeError as e:
         raise exceptions.ModuleSyntaxError(filename, 1, '%s' % (e.reason))
     return source_code, ast_node
Ejemplo n.º 4
0
class PyModule(pyobjects.PyModule):

    def __init__(self, pycore, source=None,
                 resource=None, force_errors=False):
        ignore = pycore.project.prefs.get('ignore_syntax_errors', False)
        syntax_errors = force_errors or not ignore
        self.has_errors = False
        try:
            source, node = self._init_source(pycore, source, resource)
        except exceptions.ModuleSyntaxError:
            self.has_errors = True
            if syntax_errors:
                raise
            else:
                source = '\n'
                node = ast.parse('\n')
        self.source_code = source
        self.star_imports = []
        self.visitor_class = _GlobalVisitor
        self.coding = fscommands.read_str_coding(self.source_code)
        super(PyModule, self).__init__(pycore, node, resource)

    def _init_source(self, pycore, source_code, resource):
        filename = 'string'
        if resource:
            filename = resource.path
        try:
            if source_code is None:
                source_bytes = resource.read_bytes()
                source_code = fscommands.file_data_to_unicode(source_bytes)
            else:
                if isinstance(source_code, unicode):
                    source_bytes = fscommands.unicode_to_file_data(source_code)
                else:
                    source_bytes = source_code
            ast_node = ast.parse(source_bytes, filename=filename)
        except SyntaxError, e:
            raise exceptions.ModuleSyntaxError(filename, e.lineno, e.msg)
        except UnicodeDecodeError, e:
            raise exceptions.ModuleSyntaxError(filename, 1, '%s' % (e.reason))
Ejemplo n.º 5
0
 def get_pymodule(self):
     """Get a `PyModule`"""
     msg = None
     code = self.code
     tries = 0
     while True:
         try:
             if tries == 0 and self.resource is not None and \
                self.resource.read() == code:
                 return self.pycore.resource_to_pyobject(self.resource,
                                                         force_errors=True)
             return self.pycore.get_string_module(
                 code, resource=self.resource, force_errors=True)
         except exceptions.ModuleSyntaxError, e:
             if msg is None:
                 msg = '%s:%s %s' % (e.filename, e.lineno, e.message_)
             if tries < self.maxfixes:
                 tries += 1
                 self.commenter.comment(e.lineno)
                 code = '\n'.join(self.commenter.lines)
             else:
                 raise exceptions.ModuleSyntaxError(e.filename, e.lineno, msg)