Ignore:
Timestamp:
Mar 19, 2014, 11:31:01 PM (11 years ago)
Author:
dmik
Message:

python: Merge vendor 2.7.6 to trunk.

Location:
python/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/trunk

  • python/trunk/Lib/tempfile.py

    r10 r391  
    3030# Imports.
    3131
     32import io as _io
    3233import os as _os
    3334import errno as _errno
     
    119120    def __init__(self):
    120121        self.mutex = _allocate_lock()
    121         self.rng = _Random()
    122122        self.normcase = _os.path.normcase
     123
     124    @property
     125    def rng(self):
     126        cur_pid = _os.getpid()
     127        if cur_pid != getattr(self, '_rng_pid', None):
     128            self._rng = _Random()
     129            self._rng_pid = cur_pid
     130        return self._rng
    123131
    124132    def __iter__(self):
     
    187195            filename = _os.path.join(dir, name)
    188196            try:
    189                 fd = _os.open(filename, flags, 0600)
    190                 fp = _os.fdopen(fd, 'w')
    191                 fp.write('blat')
    192                 fp.close()
    193                 _os.unlink(filename)
    194                 del fp, fd
     197                fd = _os.open(filename, flags, 0o600)
     198                try:
     199                    try:
     200                        with _io.open(fd, 'wb', closefd=False) as fp:
     201                            fp.write(b'blat')
     202                    finally:
     203                        _os.close(fd)
     204                finally:
     205                    _os.unlink(filename)
    195206                return dir
    196             except (OSError, IOError), e:
    197                 if e[0] != _errno.EEXIST:
     207            except (OSError, IOError) as e:
     208                if e.args[0] != _errno.EEXIST:
    198209                    break # no point trying more names in this directory
    199210                pass
     
    232243            if e.errno == _errno.EEXIST:
    233244                continue # try again
     245            if _os.name == 'nt' and e.errno == _errno.EACCES:
     246                # On windows, when a directory with the chosen name already
     247                # exists, EACCES error code is returned instead of EEXIST.
     248                continue
    234249            raise
    235250
     
    412427            self.close()
    413428            return result
     429    else:
     430        def __exit__(self, exc, value, tb):
     431            self.file.__exit__(exc, value, tb)
    414432
    415433
     
    537555        return self._file.closed
    538556
    539     @property
    540     def encoding(self):
    541         return self._file.encoding
    542 
    543557    def fileno(self):
    544558        self.rollover()
     
    553567    @property
    554568    def mode(self):
    555         return self._file.mode
     569        try:
     570            return self._file.mode
     571        except AttributeError:
     572            return self._TemporaryFileArgs[0]
    556573
    557574    @property
    558575    def name(self):
    559         return self._file.name
    560 
    561     @property
    562     def newlines(self):
    563         return self._file.newlines
     576        try:
     577            return self._file.name
     578        except AttributeError:
     579            return None
    564580
    565581    def next(self):
     
    601617
    602618    def xreadlines(self, *args):
    603         return self._file.xreadlines(*args)
     619        if hasattr(self._file, 'xreadlines'):  # real file
     620            return iter(self._file)
     621        else:  # StringIO()
     622            return iter(self._file.readlines(*args))
Note: See TracChangeset for help on using the changeset viewer.