eric6/Globals/compatibility_fixes.py

branch
without_py2_and_pyqt4
changeset 7197
331569d44b19
parent 7196
ab0a91b82b37
child 7198
684261ef2165
--- a/eric6/Globals/compatibility_fixes.py	Sun Sep 01 17:43:03 2019 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,289 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2013 - 2015 Tobias Rzepka <tobias.rzepka@gmail.com>
-#
-
-"""
-Module implementing some workarounds to let eric6 run under Python 2.
-"""
-
-
-import __builtin__      # __IGNORE_EXCEPTION__
-import codecs
-import imp
-import locale
-import os
-import sys
-
-# convert all command line arguments to unicode
-sys.argv = [arg.decode(locale.getpreferredencoding()) for arg in sys.argv]
-
-"""
-Improvement for the os.path.join function because the original join doesn't
-use the correct encoding.
-"""
-# Save original function for use in joinAsUnicode
-__join = os.path.join
-# Flag to disable unicode conversion of join function
-os.path.join_unicode = True
-
-
-def joinAsUnicode(*args):
-    """
-    Convert none unicode parameter of the os.path.join into unicode.
-    
-    @param args paths which should be joined (str, unicode)
-    @return unicode str of the path (unicode)
-    """
-    if os.path.join_unicode:
-        convArgs = []
-        for arg in args:
-            if isinstance(arg, str):
-                arg = arg.decode(locale.getpreferredencoding(), 'replace')
-            convArgs.append(arg)
-        return __join(*convArgs)
-    else:
-        return __join(*args)
-
-# Replace os.path.join with unicode aware version
-os.path.join = joinAsUnicode
-
-"""
-Improvement for the imp.load_source and imp.find_module functions because the
-originals doesn't use the correct encoding.
-"""
-# Save original function for use in load_sourceAsStr and find_moduleAsStr
-__load_source = imp.load_source
-__find_module = imp.find_module
-
-
-def load_sourceAsStr(*args):
-    """
-    Convert none str parameter of the imp.load_source into str.
-    
-    @param args  (str, unicode)
-    @return list of args converted to str (list)
-    """
-    convArgs = []
-    for arg in args:
-        if isinstance(arg, unicode):
-            arg = arg.encode(sys.getfilesystemencoding(), 'strict')
-        convArgs.append(arg)
-    return __load_source(*convArgs)
-
-
-def find_moduleAsStr(*args):
-    """
-    Convert none str parameter of the imp.find_module into str.
-    
-    @param args  (str, unicode)
-    @return list of args converted to str (list)
-    """
-    convArgs = []
-    for arg in args:
-        if isinstance(arg, unicode):
-            arg = arg.encode(sys.getfilesystemencoding(), 'strict')
-        convArgs.append(arg)
-    return __find_module(*convArgs)
-    
-# Replace imp.load_source and imp.find_module with unicode aware version
-imp.load_source = load_sourceAsStr
-imp.find_module = find_moduleAsStr
-
-"""
-Improvement for the sys.path list because some other functions doesn't expect
-unicode in the sys.path list.
-"""
-
-
-class PlainStrList(list):
-    """
-    Keep track that all added paths to sys.path are str.
-    """
-    def __init__(self, *args):
-        """
-        Constructor
-        
-        @param args list of paths to start with (list)
-        """
-        super(PlainStrList, self).__init__()
-        self.extend(list(args))
-
-    def __convert(self, element):
-        """
-        Private method to convert unicode to file system encoding.
-        
-        @param element to convert from unicode to file system encoding (any)
-        @return converted element
-        """
-        if isinstance(element, unicode):
-            # Throw exception if it can't be converted, otherwise exception
-            # could occur somewhere else
-            element = element.encode(sys.getfilesystemencoding(), 'strict')
-        return element
-
-    def __setitem__(self, idx, value):
-        """
-        Special method to overwrite a specific list item.
-        
-        @param idx index of the item (int)
-        @param value the new value (any)
-        """
-        super(PlainStrList, self).__setitem__(idx, self.__convert(value))
-
-    def insert(self, idx, value):
-        """
-        Public method to insert a specific list item.
-        
-        @param idx index of the item (int)
-        @param value the new value (any)
-        """
-        super(PlainStrList, self).insert(idx, self.__convert(value))
-
-
-# insert a conversion function from unicode to str at sys.path access
-sys.path = PlainStrList(*sys.path)
-
-"""
-The open function and File class simulates the open behaviour of Python3.
-
-The Eric6 used features are emulated only. The not emulated features
-should throw a NotImplementedError exception.
-"""
-
-
-def open(filein, mode='r', buffering=-1, encoding=None,
-         errors=None, newline=None, closefd=True):
-    """
-    Replacement for the build in open function.
-    
-    @param filein filename or file descriptor (string)
-    @keyparam mode access mode (string)
-    @keyparam buffering size of the read buffer (string)
-    @keyparam encoding character encoding for reading/ writing (string)
-    @keyparam errors behavior for the character encoding ('strict',
-        'explicit', ...) (string)
-    @keyparam newline controls how universal newlines works (string)
-    @keyparam closefd close underlying file descriptor if given as file
-        parameter (boolean)
-    @return Returns the new file object
-    """
-    return File(filein, mode, buffering, encoding, errors, newline, closefd)
-
-
-class File(file):   # __IGNORE_WARNING__
-    """
-    Facade for the original file class.
-    """
-    def __init__(self, filein, mode='r', buffering=-1,
-                 encoding=None, errors=None, newline=None, closefd=True):
-        """
-        Constructor
-        
-        It checks for unimplemented parameters.
-        
-        @param filein filename or file descriptor (string)
-        @keyparam mode access mode (string)
-        @keyparam buffering size of the read buffer (string)
-        @keyparam encoding character encoding for reading/ writing (string)
-        @keyparam errors behavior for the character encoding ('strict',
-            'explicit', ...) (string)
-        @keyparam newline controls how universal newlines works (string)
-        @keyparam closefd close underlying file descriptor if given as file
-            parameter (boolean)
-        @exception NotImplementedError for not implemented method parameters
-        """
-        self.__encoding = encoding
-        self.__newline = str(newline)
-        self.__closefd = closefd
-        if newline is not None:
-            if 'r' in mode:
-                raise NotImplementedError
-            else:
-                mode = mode.replace('t', 'b')
-                if 'b' not in mode:
-                    mode = mode + 'b'
-
-        if closefd is False:
-            raise NotImplementedError
-
-        if errors is None:
-            self.__errors = 'strict'
-        else:
-            self.__errors = errors
-
-        file.__init__(self, filein, mode, buffering)    # __IGNORE_WARNING__
-
-    def read(self, n=-1):
-        """
-        Public method to read n bytes or all if n=-1 from file.
-        
-        @keyparam n bytecount or all if n=-1 (int)
-        @return decoded bytes read
-        """
-        txt = super(File, self).read(n)
-        if self.__encoding is None:
-            return txt
-        else:
-            return codecs.decode(txt, self.__encoding)
-
-    def readline(self, limit=-1):
-        """
-        Public method to read one line from file.
-        
-        @keyparam limit maximum bytes to read or all if limit=-1 (int)
-        @return decoded line read
-        """
-        txt = super(File, self).readline(limit)
-        if self.__encoding is None:
-            return txt
-        else:
-            return codecs.decode(txt, self.__encoding)
-
-    def readlines(self, hint=-1):
-        """
-        Public method to read all lines from file.
-        
-        @keyparam hint maximum bytes to read or all if hint=-1 (int)
-        @return decoded lines read
-        """
-        if self.__encoding is None:
-            return super(File, self).readlines(hint)
-        else:
-            return [codecs.decode(txt, self.__encoding)
-                    for txt in super(File, self).readlines(hint)]
-
-    def write(self, txt):
-        """
-        Public method to write given data to file and encode if needed.
-        
-        @param txt data to write. (str, bytes)
-        """
-        if self.__encoding is not None:
-            txt = codecs.encode(txt, self.__encoding, self.__errors)
-        elif isinstance(txt, unicode):
-            txt = codecs.encode(txt, 'utf-8', self.__errors)
-
-        if self.__newline in ['\r\n', '\r']:
-            txt = txt.replace('\n', self.__newline)
-
-        super(File, self).write(txt)
-
-    def next(self):
-        """
-        Public method used in an iterator.
-        
-        @return decoded data read
-        """
-        txt = super(File, self).next()
-        if self.__encoding is None:
-            return txt
-        else:
-            return codecs.decode(txt, self.__encoding)
-
-# Inject into the __builtin__ dictionary
-__builtin__.open = open
-
-#
-# eflag: FileType = Python2
-# eflag: noqa = M702

eric ide

mercurial