home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / Calibre / calibre-0.8.18.msi / file_262 / _pyio.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-09-09  |  41.9 KB  |  1,497 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.7)
  3.  
  4. from __future__ import print_function, unicode_literals
  5. import os
  6. import abc
  7. import codecs
  8. import warnings
  9.  
  10. try:
  11.     from thread import allocate_lock as Lock
  12. except ImportError:
  13.     from dummy_thread import allocate_lock as Lock
  14.  
  15. import io
  16. from io import __all__, SEEK_SET, SEEK_CUR, SEEK_END
  17. __metaclass__ = type
  18. DEFAULT_BUFFER_SIZE = 8 * 1024
  19.  
  20. class BlockingIOError(IOError):
  21.     
  22.     def __init__(self, errno, strerror, characters_written = 0):
  23.         super(IOError, self).__init__(errno, strerror)
  24.         if not isinstance(characters_written, (int, long)):
  25.             raise TypeError('characters_written must be a integer')
  26.         self.characters_written = characters_written
  27.  
  28.  
  29.  
  30. def open(file, mode = 'r', buffering = -1, encoding = None, errors = None, newline = None, closefd = True):
  31.     if not isinstance(file, (basestring, int, long)):
  32.         raise TypeError('invalid file: %r' % file)
  33.     if not isinstance(mode, basestring):
  34.         raise TypeError('invalid mode: %r' % mode)
  35.     if not isinstance(buffering, (int, long)):
  36.         raise TypeError('invalid buffering: %r' % buffering)
  37.     if encoding is not None and not isinstance(encoding, basestring):
  38.         raise TypeError('invalid encoding: %r' % encoding)
  39.     if errors is not None and not isinstance(errors, basestring):
  40.         raise TypeError('invalid errors: %r' % errors)
  41.     modes = set(mode)
  42.     if modes - set('arwb+tU') or len(mode) > len(modes):
  43.         raise ValueError('invalid mode: %r' % mode)
  44.     reading = 'r' in modes
  45.     writing = 'w' in modes
  46.     appending = 'a' in modes
  47.     updating = '+' in modes
  48.     text = 't' in modes
  49.     binary = 'b' in modes
  50.     if 'U' in modes:
  51.         if writing or appending:
  52.             raise ValueError("can't use U and writing mode at once")
  53.         reading = True
  54.     if text and binary:
  55.         raise ValueError("can't have text and binary mode at once")
  56.     if reading + writing + appending > 1:
  57.         raise ValueError("can't have read/write/append mode at once")
  58.     if not reading and writing or appending:
  59.         raise ValueError('must have exactly one of read/write/append mode')
  60.     if binary and encoding is not None:
  61.         raise ValueError("binary mode doesn't take an encoding argument")
  62.     if binary and errors is not None:
  63.         raise ValueError("binary mode doesn't take an errors argument")
  64.     if binary and newline is not None:
  65.         raise ValueError("binary mode doesn't take a newline argument")
  66.     if not reading or 'r':
  67.         pass
  68.     if not writing or 'w':
  69.         pass
  70.     if not appending or 'a':
  71.         pass
  72.     if not updating or '+':
  73.         pass
  74.     raw = FileIO(file, '' + '' + '' + '', closefd)
  75.     line_buffering = False
  76.     if (buffering == 1 or buffering < 0) and raw.isatty():
  77.         buffering = -1
  78.         line_buffering = True
  79.     if buffering < 0:
  80.         buffering = DEFAULT_BUFFER_SIZE
  81.         
  82.         try:
  83.             bs = os.fstat(raw.fileno()).st_blksize
  84.         except (os.error, AttributeError):
  85.             pass
  86.  
  87.         if bs > 1:
  88.             buffering = bs
  89.         
  90.     if buffering < 0:
  91.         raise ValueError('invalid buffering size')
  92.     if buffering == 0:
  93.         if binary:
  94.             return raw
  95.         raise None("can't have unbuffered text I/O")
  96.     if updating:
  97.         buffer = BufferedRandom(raw, buffering)
  98.     elif writing or appending:
  99.         buffer = BufferedWriter(raw, buffering)
  100.     elif reading:
  101.         buffer = BufferedReader(raw, buffering)
  102.     else:
  103.         raise ValueError('unknown mode: %r' % mode)
  104.     if None:
  105.         return buffer
  106.     text = None(buffer, encoding, errors, newline, line_buffering)
  107.     text.mode = mode
  108.     return text
  109.  
  110.  
  111. class DocDescriptor:
  112.     
  113.     def __get__(self, obj, typ):
  114.         return "open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True)\n\n" + open.__doc__
  115.  
  116.  
  117.  
  118. class OpenWrapper:
  119.     __doc__ = DocDescriptor()
  120.     
  121.     def __new__(cls, *args, **kwargs):
  122.         return open(*args, **kwargs)
  123.  
  124.  
  125.  
  126. class UnsupportedOperation(ValueError, IOError):
  127.     pass
  128.  
  129.  
  130. class IOBase:
  131.     __metaclass__ = abc.ABCMeta
  132.     
  133.     def _unsupported(self, name):
  134.         raise UnsupportedOperation('%s.%s() not supported' % (self.__class__.__name__, name))
  135.  
  136.     
  137.     def seek(self, pos, whence = 0):
  138.         self._unsupported('seek')
  139.  
  140.     
  141.     def tell(self):
  142.         return self.seek(0, 1)
  143.  
  144.     
  145.     def truncate(self, pos = None):
  146.         self._unsupported('truncate')
  147.  
  148.     
  149.     def flush(self):
  150.         self._checkClosed()
  151.  
  152.     __closed = False
  153.     
  154.     def close(self):
  155.         if not self._IOBase__closed:
  156.             self.flush()
  157.             self._IOBase__closed = True
  158.  
  159.     
  160.     def __del__(self):
  161.         
  162.         try:
  163.             self.close()
  164.         except:
  165.             pass
  166.  
  167.  
  168.     
  169.     def seekable(self):
  170.         return False
  171.  
  172.     
  173.     def _checkSeekable(self, msg = None):
  174.         if not self.seekable():
  175.             raise IOError('File or stream is not seekable.' if msg is None else msg)
  176.  
  177.     
  178.     def readable(self):
  179.         return False
  180.  
  181.     
  182.     def _checkReadable(self, msg = None):
  183.         if not self.readable():
  184.             raise IOError('File or stream is not readable.' if msg is None else msg)
  185.  
  186.     
  187.     def writable(self):
  188.         return False
  189.  
  190.     
  191.     def _checkWritable(self, msg = None):
  192.         if not self.writable():
  193.             raise IOError('File or stream is not writable.' if msg is None else msg)
  194.  
  195.     
  196.     def closed(self):
  197.         return self._IOBase__closed
  198.  
  199.     closed = property(closed)
  200.     
  201.     def _checkClosed(self, msg = None):
  202.         if self.closed:
  203.             raise ValueError('I/O operation on closed file.' if msg is None else msg)
  204.  
  205.     
  206.     def __enter__(self):
  207.         self._checkClosed()
  208.         return self
  209.  
  210.     
  211.     def __exit__(self, *args):
  212.         self.close()
  213.  
  214.     
  215.     def fileno(self):
  216.         self._unsupported('fileno')
  217.  
  218.     
  219.     def isatty(self):
  220.         self._checkClosed()
  221.         return False
  222.  
  223.     
  224.     def readline(self, limit = -1):
  225.         if limit is None:
  226.             limit = -1
  227.         elif not isinstance(limit, (int, long)):
  228.             raise TypeError('limit must be an integer')
  229.         res = bytearray()
  230.         while limit < 0 or len(res) < limit:
  231.             b = self.read(nreadahead())
  232.             if not b:
  233.                 break
  234.             res += b
  235.             if res.endswith(b'\n'):
  236.                 break
  237.                 continue
  238.             return bytes(res)
  239.  
  240.     
  241.     def __iter__(self):
  242.         self._checkClosed()
  243.         return self
  244.  
  245.     
  246.     def next(self):
  247.         line = self.readline()
  248.         if not line:
  249.             raise StopIteration
  250.         return line
  251.  
  252.     
  253.     def readlines(self, hint = None):
  254.         if hint is not None and not isinstance(hint, (int, long)):
  255.             raise TypeError('integer or None expected')
  256.         if hint is None or hint <= 0:
  257.             return list(self)
  258.         n = None
  259.         lines = []
  260.         for line in self:
  261.             lines.append(line)
  262.             n += len(line)
  263.             if n >= hint:
  264.                 break
  265.                 continue
  266.         return lines
  267.  
  268.     
  269.     def writelines(self, lines):
  270.         self._checkClosed()
  271.         for line in lines:
  272.             self.write(line)
  273.         
  274.  
  275.  
  276. io.IOBase.register(IOBase)
  277.  
  278. class RawIOBase(IOBase):
  279.     
  280.     def read(self, n = -1):
  281.         if n is None:
  282.             n = -1
  283.         if n < 0:
  284.             return self.readall()
  285.         b = None(n.__index__())
  286.         n = self.readinto(b)
  287.         if n is None:
  288.             return None
  289.         del None[n:]
  290.         return bytes(b)
  291.  
  292.     
  293.     def readall(self):
  294.         res = bytearray()
  295.         while True:
  296.             data = self.read(DEFAULT_BUFFER_SIZE)
  297.             if not data:
  298.                 break
  299.             res += data
  300.         return bytes(res)
  301.  
  302.     
  303.     def readinto(self, b):
  304.         self._unsupported('readinto')
  305.  
  306.     
  307.     def write(self, b):
  308.         self._unsupported('write')
  309.  
  310.  
  311. io.RawIOBase.register(RawIOBase)
  312. from _io import FileIO
  313. RawIOBase.register(FileIO)
  314.  
  315. class BufferedIOBase(IOBase):
  316.     
  317.     def read(self, n = None):
  318.         self._unsupported('read')
  319.  
  320.     
  321.     def read1(self, n = None):
  322.         self._unsupported('read1')
  323.  
  324.     
  325.     def readinto(self, b):
  326.         data = self.read(len(b))
  327.         n = len(data)
  328.         
  329.         try:
  330.             b[:n] = data
  331.         except TypeError:
  332.             err = None
  333.             import array
  334.             if not isinstance(b, array.array):
  335.                 raise err
  336.             b[:n] = array.array(b'b', data)
  337.  
  338.         return n
  339.  
  340.     
  341.     def write(self, b):
  342.         self._unsupported('write')
  343.  
  344.     
  345.     def detach(self):
  346.         self._unsupported('detach')
  347.  
  348.  
  349. io.BufferedIOBase.register(BufferedIOBase)
  350.  
  351. class _BufferedIOMixin(BufferedIOBase):
  352.     
  353.     def __init__(self, raw):
  354.         self.raw = raw
  355.  
  356.     
  357.     def seek(self, pos, whence = 0):
  358.         new_position = self.raw.seek(pos, whence)
  359.         if new_position < 0:
  360.             raise IOError('seek() returned an invalid position')
  361.         return new_position
  362.  
  363.     
  364.     def tell(self):
  365.         pos = self.raw.tell()
  366.         if pos < 0:
  367.             raise IOError('tell() returned an invalid position')
  368.         return pos
  369.  
  370.     
  371.     def truncate(self, pos = None):
  372.         self.flush()
  373.         if pos is None:
  374.             pos = self.tell()
  375.         return self.raw.truncate(pos)
  376.  
  377.     
  378.     def flush(self):
  379.         if self.closed:
  380.             raise ValueError('flush of closed file')
  381.         self.raw.flush()
  382.  
  383.     
  384.     def close(self):
  385.         if self.raw is not None and not (self.closed):
  386.             self.flush()
  387.             self.raw.close()
  388.  
  389.     
  390.     def detach(self):
  391.         if self.raw is None:
  392.             raise ValueError('raw stream already detached')
  393.         self.flush()
  394.         raw = self.raw
  395.         self.raw = None
  396.         return raw
  397.  
  398.     
  399.     def seekable(self):
  400.         return self.raw.seekable()
  401.  
  402.     
  403.     def readable(self):
  404.         return self.raw.readable()
  405.  
  406.     
  407.     def writable(self):
  408.         return self.raw.writable()
  409.  
  410.     
  411.     def closed(self):
  412.         return self.raw.closed
  413.  
  414.     closed = property(closed)
  415.     
  416.     def name(self):
  417.         return self.raw.name
  418.  
  419.     name = property(name)
  420.     
  421.     def mode(self):
  422.         return self.raw.mode
  423.  
  424.     mode = property(mode)
  425.     
  426.     def __repr__(self):
  427.         clsname = self.__class__.__name__
  428.         
  429.         try:
  430.             name = self.name
  431.         except AttributeError:
  432.             return '<_pyio.{0}>'.format(clsname)
  433.  
  434.         return '<_pyio.{0} name={1!r}>'.format(clsname, name)
  435.  
  436.     
  437.     def fileno(self):
  438.         return self.raw.fileno()
  439.  
  440.     
  441.     def isatty(self):
  442.         return self.raw.isatty()
  443.  
  444.  
  445.  
  446. class BytesIO(BufferedIOBase):
  447.     
  448.     def __init__(self, initial_bytes = None):
  449.         buf = bytearray()
  450.         if initial_bytes is not None:
  451.             buf.extend(initial_bytes)
  452.         self._buffer = buf
  453.         self._pos = 0
  454.  
  455.     
  456.     def __getstate__(self):
  457.         if self.closed:
  458.             raise ValueError('__getstate__ on closed file')
  459.         return self.__dict__.copy()
  460.  
  461.     
  462.     def getvalue(self):
  463.         if self.closed:
  464.             raise ValueError('getvalue on closed file')
  465.         return bytes(self._buffer)
  466.  
  467.     
  468.     def read(self, n = None):
  469.         if self.closed:
  470.             raise ValueError('read from closed file')
  471.         if n is None:
  472.             n = -1
  473.         if not isinstance(n, (int, long)):
  474.             raise TypeError('integer argument expected, got {0!r}'.format(type(n)))
  475.         if n < 0:
  476.             n = len(self._buffer)
  477.         if len(self._buffer) <= self._pos:
  478.             return b''
  479.         newpos = None(len(self._buffer), self._pos + n)
  480.         b = self._buffer[self._pos:newpos]
  481.         self._pos = newpos
  482.         return bytes(b)
  483.  
  484.     
  485.     def read1(self, n):
  486.         return self.read(n)
  487.  
  488.     
  489.     def write(self, b):
  490.         if self.closed:
  491.             raise ValueError('write to closed file')
  492.         if isinstance(b, unicode):
  493.             raise TypeError("can't write unicode to binary stream")
  494.         n = len(b)
  495.         if n == 0:
  496.             return 0
  497.         pos = None._pos
  498.         if pos > len(self._buffer):
  499.             padding = b'\x00' * (pos - len(self._buffer))
  500.             self._buffer += padding
  501.         self._buffer[pos:pos + n] = b
  502.         self._pos += n
  503.         return n
  504.  
  505.     
  506.     def seek(self, pos, whence = 0):
  507.         if self.closed:
  508.             raise ValueError('seek on closed file')
  509.         
  510.         try:
  511.             pos.__index__
  512.         except AttributeError:
  513.             raise TypeError('an integer is required')
  514.  
  515.         if whence == 0:
  516.             if pos < 0:
  517.                 raise ValueError('negative seek position %r' % (pos,))
  518.             self._pos = pos
  519.         elif whence == 1:
  520.             self._pos = max(0, self._pos + pos)
  521.         elif whence == 2:
  522.             self._pos = max(0, len(self._buffer) + pos)
  523.         else:
  524.             raise ValueError('invalid whence value')
  525.         return None._pos
  526.  
  527.     
  528.     def tell(self):
  529.         if self.closed:
  530.             raise ValueError('tell on closed file')
  531.         return self._pos
  532.  
  533.     
  534.     def truncate(self, pos = None):
  535.         if self.closed:
  536.             raise ValueError('truncate on closed file')
  537.         if pos is None:
  538.             pos = self._pos
  539.         else:
  540.             
  541.             try:
  542.                 pos.__index__
  543.             except AttributeError:
  544.                 raise TypeError('an integer is required')
  545.  
  546.             if pos < 0:
  547.                 raise ValueError('negative truncate position %r' % (pos,))
  548.         del self._buffer[pos:]
  549.         return pos
  550.  
  551.     
  552.     def readable(self):
  553.         return True
  554.  
  555.     
  556.     def writable(self):
  557.         return True
  558.  
  559.     
  560.     def seekable(self):
  561.         return True
  562.  
  563.  
  564.  
  565. class BufferedReader(_BufferedIOMixin):
  566.     
  567.     def __init__(self, raw, buffer_size = DEFAULT_BUFFER_SIZE):
  568.         if not raw.readable():
  569.             raise IOError('"raw" argument must be readable.')
  570.         _BufferedIOMixin.__init__(self, raw)
  571.         if buffer_size <= 0:
  572.             raise ValueError('invalid buffer size')
  573.         self.buffer_size = buffer_size
  574.         self._reset_read_buf()
  575.         self._read_lock = Lock()
  576.  
  577.     
  578.     def _reset_read_buf(self):
  579.         self._read_buf = b''
  580.         self._read_pos = 0
  581.  
  582.     
  583.     def read(self, n = None):
  584.         if n is not None and n < -1:
  585.             raise ValueError('invalid number of bytes to read')
  586.         with self._read_lock:
  587.             return self._read_unlocked(n)
  588.  
  589.     
  590.     def _read_unlocked(self, n = None):
  591.         nodata_val = b''
  592.         empty_values = (b'', None)
  593.         buf = self._read_buf
  594.         pos = self._read_pos
  595.         if n is None or n == -1:
  596.             self._reset_read_buf()
  597.             chunks = [
  598.                 buf[pos:]]
  599.             current_size = 0
  600.             while True:
  601.                 chunk = self.raw.read()
  602.                 if chunk in empty_values:
  603.                     nodata_val = chunk
  604.                     break
  605.                 current_size += len(chunk)
  606.                 chunks.append(chunk)
  607.             if not b''.join(chunks):
  608.                 pass
  609.             return nodata_val
  610.         avail = None(buf) - pos
  611.         if n <= avail:
  612.             self._read_pos += n
  613.             return buf[pos:pos + n]
  614.         chunks = [
  615.             None[pos:]]
  616.         wanted = max(self.buffer_size, n)
  617.         while avail < n:
  618.             chunk = self.raw.read(wanted)
  619.             if chunk in empty_values:
  620.                 nodata_val = chunk
  621.                 break
  622.             avail += len(chunk)
  623.             chunks.append(chunk)
  624.         n = min(n, avail)
  625.         out = b''.join(chunks)
  626.         self._read_buf = out[n:]
  627.         self._read_pos = 0
  628.         if out:
  629.             return out[:n]
  630.  
  631.     
  632.     def peek(self, n = 0):
  633.         with self._read_lock:
  634.             return self._peek_unlocked(n)
  635.  
  636.     
  637.     def _peek_unlocked(self, n = 0):
  638.         want = min(n, self.buffer_size)
  639.         have = len(self._read_buf) - self._read_pos
  640.         if have < want or have <= 0:
  641.             to_read = self.buffer_size - have
  642.             current = self.raw.read(to_read)
  643.             if current:
  644.                 self._read_buf = self._read_buf[self._read_pos:] + current
  645.                 self._read_pos = 0
  646.             
  647.         return self._read_buf[self._read_pos:]
  648.  
  649.     
  650.     def read1(self, n):
  651.         if n < 0:
  652.             raise ValueError('number of bytes to read must be positive')
  653.         if n == 0:
  654.             return b''
  655.         with None._read_lock:
  656.             self._peek_unlocked(1)
  657.             return self._read_unlocked(min(n, len(self._read_buf) - self._read_pos))
  658.  
  659.     
  660.     def tell(self):
  661.         return (_BufferedIOMixin.tell(self) - len(self._read_buf)) + self._read_pos
  662.  
  663.     
  664.     def seek(self, pos, whence = 0):
  665.         if whence <= whence:
  666.             pass
  667.         elif not whence <= 2:
  668.             raise ValueError('invalid whence value')
  669.         with self._read_lock:
  670.             if whence == 1:
  671.                 pos -= len(self._read_buf) - self._read_pos
  672.             pos = _BufferedIOMixin.seek(self, pos, whence)
  673.             self._reset_read_buf()
  674.             return pos
  675.  
  676.  
  677.  
  678. class BufferedWriter(_BufferedIOMixin):
  679.     _warning_stack_offset = 2
  680.     
  681.     def __init__(self, raw, buffer_size = DEFAULT_BUFFER_SIZE, max_buffer_size = None):
  682.         if not raw.writable():
  683.             raise IOError('"raw" argument must be writable.')
  684.         _BufferedIOMixin.__init__(self, raw)
  685.         if buffer_size <= 0:
  686.             raise ValueError('invalid buffer size')
  687.         if max_buffer_size is not None:
  688.             warnings.warn('max_buffer_size is deprecated', DeprecationWarning, self._warning_stack_offset)
  689.         self.buffer_size = buffer_size
  690.         self._write_buf = bytearray()
  691.         self._write_lock = Lock()
  692.  
  693.     
  694.     def write(self, b):
  695.         if self.closed:
  696.             raise ValueError('write to closed file')
  697.         if isinstance(b, unicode):
  698.             raise TypeError("can't write unicode to binary stream")
  699.         with self._write_lock:
  700.             if len(self._write_buf) > self.buffer_size:
  701.                 
  702.                 try:
  703.                     self._flush_unlocked()
  704.                 except BlockingIOError:
  705.                     e = None
  706.                     raise BlockingIOError(e.errno, e.strerror, 0)
  707.                 
  708.  
  709.             before = len(self._write_buf)
  710.             self._write_buf.extend(b)
  711.             written = len(self._write_buf) - before
  712.             if len(self._write_buf) > self.buffer_size:
  713.                 
  714.                 try:
  715.                     self._flush_unlocked()
  716.                 except BlockingIOError:
  717.                     e = None
  718.                     if len(self._write_buf) > self.buffer_size:
  719.                         overage = len(self._write_buf) - self.buffer_size
  720.                         written -= overage
  721.                         self._write_buf = self._write_buf[:self.buffer_size]
  722.                         raise BlockingIOError(e.errno, e.strerror, written)
  723.                 
  724.  
  725.             return written
  726.  
  727.     
  728.     def truncate(self, pos = None):
  729.         with self._write_lock:
  730.             self._flush_unlocked()
  731.             if pos is None:
  732.                 pos = self.raw.tell()
  733.             return self.raw.truncate(pos)
  734.  
  735.     
  736.     def flush(self):
  737.         with self._write_lock:
  738.             self._flush_unlocked()
  739.  
  740.     
  741.     def _flush_unlocked(self):
  742.         if self.closed:
  743.             raise ValueError('flush of closed file')
  744.         written = 0
  745.         
  746.         try:
  747.             while self._write_buf:
  748.                 n = self.raw.write(self._write_buf)
  749.                 if n > len(self._write_buf) or n < 0:
  750.                     raise IOError('write() returned incorrect number of bytes')
  751.                 del self._write_buf[:n]
  752.                 written += n
  753.         except BlockingIOError:
  754.             e = None
  755.             n = e.characters_written
  756.             del self._write_buf[:n]
  757.             written += n
  758.             raise BlockingIOError(e.errno, e.strerror, written)
  759.  
  760.  
  761.     
  762.     def tell(self):
  763.         return _BufferedIOMixin.tell(self) + len(self._write_buf)
  764.  
  765.     
  766.     def seek(self, pos, whence = 0):
  767.         if whence <= whence:
  768.             pass
  769.         elif not whence <= 2:
  770.             raise ValueError('invalid whence')
  771.         with self._write_lock:
  772.             self._flush_unlocked()
  773.             return _BufferedIOMixin.seek(self, pos, whence)
  774.  
  775.  
  776.  
  777. class BufferedRWPair(BufferedIOBase):
  778.     
  779.     def __init__(self, reader, writer, buffer_size = DEFAULT_BUFFER_SIZE, max_buffer_size = None):
  780.         if max_buffer_size is not None:
  781.             warnings.warn('max_buffer_size is deprecated', DeprecationWarning, 2)
  782.         if not reader.readable():
  783.             raise IOError('"reader" argument must be readable.')
  784.         if not writer.writable():
  785.             raise IOError('"writer" argument must be writable.')
  786.         self.reader = BufferedReader(reader, buffer_size)
  787.         self.writer = BufferedWriter(writer, buffer_size)
  788.  
  789.     
  790.     def read(self, n = None):
  791.         if n is None:
  792.             n = -1
  793.         return self.reader.read(n)
  794.  
  795.     
  796.     def readinto(self, b):
  797.         return self.reader.readinto(b)
  798.  
  799.     
  800.     def write(self, b):
  801.         return self.writer.write(b)
  802.  
  803.     
  804.     def peek(self, n = 0):
  805.         return self.reader.peek(n)
  806.  
  807.     
  808.     def read1(self, n):
  809.         return self.reader.read1(n)
  810.  
  811.     
  812.     def readable(self):
  813.         return self.reader.readable()
  814.  
  815.     
  816.     def writable(self):
  817.         return self.writer.writable()
  818.  
  819.     
  820.     def flush(self):
  821.         return self.writer.flush()
  822.  
  823.     
  824.     def close(self):
  825.         self.writer.close()
  826.         self.reader.close()
  827.  
  828.     
  829.     def isatty(self):
  830.         if not self.reader.isatty():
  831.             pass
  832.         return self.writer.isatty()
  833.  
  834.     
  835.     def closed(self):
  836.         return self.writer.closed
  837.  
  838.     closed = property(closed)
  839.  
  840.  
  841. class BufferedRandom(BufferedWriter, BufferedReader):
  842.     _warning_stack_offset = 3
  843.     
  844.     def __init__(self, raw, buffer_size = DEFAULT_BUFFER_SIZE, max_buffer_size = None):
  845.         raw._checkSeekable()
  846.         BufferedReader.__init__(self, raw, buffer_size)
  847.         BufferedWriter.__init__(self, raw, buffer_size, max_buffer_size)
  848.  
  849.     
  850.     def seek(self, pos, whence = 0):
  851.         if whence <= whence:
  852.             pass
  853.         elif not whence <= 2:
  854.             raise ValueError('invalid whence')
  855.         self.flush()
  856.         if self._read_buf:
  857.             with self._read_lock:
  858.                 self.raw.seek(self._read_pos - len(self._read_buf), 1)
  859.         pos = self.raw.seek(pos, whence)
  860.         with self._read_lock:
  861.             self._reset_read_buf()
  862.         if pos < 0:
  863.             raise IOError('seek() returned invalid position')
  864.         return pos
  865.  
  866.     
  867.     def tell(self):
  868.         if self._write_buf:
  869.             return BufferedWriter.tell(self)
  870.         return None.tell(self)
  871.  
  872.     
  873.     def truncate(self, pos = None):
  874.         if pos is None:
  875.             pos = self.tell()
  876.         return BufferedWriter.truncate(self, pos)
  877.  
  878.     
  879.     def read(self, n = None):
  880.         if n is None:
  881.             n = -1
  882.         self.flush()
  883.         return BufferedReader.read(self, n)
  884.  
  885.     
  886.     def readinto(self, b):
  887.         self.flush()
  888.         return BufferedReader.readinto(self, b)
  889.  
  890.     
  891.     def peek(self, n = 0):
  892.         self.flush()
  893.         return BufferedReader.peek(self, n)
  894.  
  895.     
  896.     def read1(self, n):
  897.         self.flush()
  898.         return BufferedReader.read1(self, n)
  899.  
  900.     
  901.     def write(self, b):
  902.         if self._read_buf:
  903.             with self._read_lock:
  904.                 self.raw.seek(self._read_pos - len(self._read_buf), 1)
  905.                 self._reset_read_buf()
  906.         return BufferedWriter.write(self, b)
  907.  
  908.  
  909.  
  910. class TextIOBase(IOBase):
  911.     
  912.     def read(self, n = -1):
  913.         self._unsupported('read')
  914.  
  915.     
  916.     def write(self, s):
  917.         self._unsupported('write')
  918.  
  919.     
  920.     def truncate(self, pos = None):
  921.         self._unsupported('truncate')
  922.  
  923.     
  924.     def readline(self):
  925.         self._unsupported('readline')
  926.  
  927.     
  928.     def detach(self):
  929.         self._unsupported('detach')
  930.  
  931.     
  932.     def encoding(self):
  933.         pass
  934.  
  935.     encoding = property(encoding)
  936.     
  937.     def newlines(self):
  938.         pass
  939.  
  940.     newlines = property(newlines)
  941.     
  942.     def errors(self):
  943.         pass
  944.  
  945.     errors = property(errors)
  946.  
  947. io.TextIOBase.register(TextIOBase)
  948.  
  949. class IncrementalNewlineDecoder(codecs.IncrementalDecoder):
  950.     
  951.     def __init__(self, decoder, translate, errors = 'strict'):
  952.         codecs.IncrementalDecoder.__init__(self, errors = errors)
  953.         self.translate = translate
  954.         self.decoder = decoder
  955.         self.seennl = 0
  956.         self.pendingcr = False
  957.  
  958.     
  959.     def decode(self, input, final = False):
  960.         if self.decoder is None:
  961.             output = input
  962.         else:
  963.             output = self.decoder.decode(input, final = final)
  964.         if self.pendingcr:
  965.             if output or final:
  966.                 output = '\r' + output
  967.                 self.pendingcr = False
  968.         if output.endswith('\r') and not final:
  969.             output = output[:-1]
  970.             self.pendingcr = True
  971.         crlf = output.count('\r\n')
  972.         cr = output.count('\r') - crlf
  973.         lf = output.count('\n') - crlf
  974.         if lf:
  975.             pass
  976.         if cr:
  977.             pass
  978.         if crlf:
  979.             pass
  980.         self.seennl |= self._LF | self._CR | self._CRLF
  981.         if self.translate:
  982.             if crlf:
  983.                 output = output.replace('\r\n', '\n')
  984.             if cr:
  985.                 output = output.replace('\r', '\n')
  986.             
  987.         return output
  988.  
  989.     
  990.     def getstate(self):
  991.         if self.decoder is None:
  992.             buf = b''
  993.             flag = 0
  994.         else:
  995.             (buf, flag) = self.decoder.getstate()
  996.         flag <<= 1
  997.         if self.pendingcr:
  998.             flag |= 1
  999.         return (buf, flag)
  1000.  
  1001.     
  1002.     def setstate(self, state):
  1003.         (buf, flag) = state
  1004.         self.pendingcr = bool(flag & 1)
  1005.         if self.decoder is not None:
  1006.             self.decoder.setstate((buf, flag >> 1))
  1007.  
  1008.     
  1009.     def reset(self):
  1010.         self.seennl = 0
  1011.         self.pendingcr = False
  1012.         if self.decoder is not None:
  1013.             self.decoder.reset()
  1014.  
  1015.     _LF = 1
  1016.     _CR = 2
  1017.     _CRLF = 4
  1018.     
  1019.     def newlines(self):
  1020.         return (None, '\n', '\r', ('\r', '\n'), '\r\n', ('\n', '\r\n'), ('\r', '\r\n'), ('\r', '\n', '\r\n'))[self.seennl]
  1021.  
  1022.     newlines = property(newlines)
  1023.  
  1024.  
  1025. class TextIOWrapper(TextIOBase):
  1026.     _CHUNK_SIZE = 2048
  1027.     
  1028.     def __init__(self, buffer, encoding = None, errors = None, newline = None, line_buffering = False):
  1029.         if newline is not None and not isinstance(newline, basestring):
  1030.             raise TypeError('illegal newline type: %r' % (type(newline),))
  1031.         if newline not in (None, '', '\n', '\r', '\r\n'):
  1032.             raise ValueError('illegal newline value: %r' % (newline,))
  1033.         if encoding is None:
  1034.             
  1035.             try:
  1036.                 import locale
  1037.             except ImportError:
  1038.                 encoding = 'ascii'
  1039.  
  1040.             encoding = locale.getpreferredencoding()
  1041.         if not isinstance(encoding, basestring):
  1042.             raise ValueError('invalid encoding: %r' % encoding)
  1043.         if errors is None:
  1044.             errors = 'strict'
  1045.         elif not isinstance(errors, basestring):
  1046.             raise ValueError('invalid errors: %r' % errors)
  1047.         self.buffer = buffer
  1048.         self._line_buffering = line_buffering
  1049.         self._encoding = encoding
  1050.         self._errors = errors
  1051.         self._readuniversal = not newline
  1052.         self._readtranslate = newline is None
  1053.         self._readnl = newline
  1054.         self._writetranslate = newline != ''
  1055.         if not newline:
  1056.             pass
  1057.         self._writenl = os.linesep
  1058.         self._encoder = None
  1059.         self._decoder = None
  1060.         self._decoded_chars = ''
  1061.         self._decoded_chars_used = 0
  1062.         self._snapshot = None
  1063.         self._seekable = self._telling = self.buffer.seekable()
  1064.         if self._seekable and self.writable():
  1065.             position = self.buffer.tell()
  1066.             if position != 0:
  1067.                 
  1068.                 try:
  1069.                     self._get_encoder().setstate(0)
  1070.                 except LookupError:
  1071.                     pass
  1072.                 
  1073.  
  1074.  
  1075.     
  1076.     def __repr__(self):
  1077.         
  1078.         try:
  1079.             name = self.name
  1080.         except AttributeError:
  1081.             return "<_pyio.TextIOWrapper encoding='{0}'>".format(self.encoding)
  1082.  
  1083.         return "<_pyio.TextIOWrapper name={0!r} encoding='{1}'>".format(name, self.encoding)
  1084.  
  1085.     
  1086.     def encoding(self):
  1087.         return self._encoding
  1088.  
  1089.     encoding = property(encoding)
  1090.     
  1091.     def errors(self):
  1092.         return self._errors
  1093.  
  1094.     errors = property(errors)
  1095.     
  1096.     def line_buffering(self):
  1097.         return self._line_buffering
  1098.  
  1099.     line_buffering = property(line_buffering)
  1100.     
  1101.     def seekable(self):
  1102.         return self._seekable
  1103.  
  1104.     
  1105.     def readable(self):
  1106.         return self.buffer.readable()
  1107.  
  1108.     
  1109.     def writable(self):
  1110.         return self.buffer.writable()
  1111.  
  1112.     
  1113.     def flush(self):
  1114.         self.buffer.flush()
  1115.         self._telling = self._seekable
  1116.  
  1117.     
  1118.     def close(self):
  1119.         if self.buffer is not None and not (self.closed):
  1120.             self.flush()
  1121.             self.buffer.close()
  1122.  
  1123.     
  1124.     def closed(self):
  1125.         return self.buffer.closed
  1126.  
  1127.     closed = property(closed)
  1128.     
  1129.     def name(self):
  1130.         return self.buffer.name
  1131.  
  1132.     name = property(name)
  1133.     
  1134.     def fileno(self):
  1135.         return self.buffer.fileno()
  1136.  
  1137.     
  1138.     def isatty(self):
  1139.         return self.buffer.isatty()
  1140.  
  1141.     
  1142.     def write(self, s):
  1143.         if self.closed:
  1144.             raise ValueError('write to closed file')
  1145.         if not isinstance(s, unicode):
  1146.             raise TypeError("can't write %s to text stream" % s.__class__.__name__)
  1147.         length = len(s)
  1148.         if self._writetranslate or self._line_buffering:
  1149.             pass
  1150.         haslf = '\n' in s
  1151.         if haslf and self._writetranslate and self._writenl != '\n':
  1152.             s = s.replace('\n', self._writenl)
  1153.         if not self._encoder:
  1154.             pass
  1155.         encoder = self._get_encoder()
  1156.         b = encoder.encode(s)
  1157.         self.buffer.write(b)
  1158.         if self._line_buffering:
  1159.             if haslf or '\r' in s:
  1160.                 self.flush()
  1161.         self._snapshot = None
  1162.         if self._decoder:
  1163.             self._decoder.reset()
  1164.         return length
  1165.  
  1166.     
  1167.     def _get_encoder(self):
  1168.         make_encoder = codecs.getincrementalencoder(self._encoding)
  1169.         self._encoder = make_encoder(self._errors)
  1170.         return self._encoder
  1171.  
  1172.     
  1173.     def _get_decoder(self):
  1174.         make_decoder = codecs.getincrementaldecoder(self._encoding)
  1175.         decoder = make_decoder(self._errors)
  1176.         if self._readuniversal:
  1177.             decoder = IncrementalNewlineDecoder(decoder, self._readtranslate)
  1178.         self._decoder = decoder
  1179.         return decoder
  1180.  
  1181.     
  1182.     def _set_decoded_chars(self, chars):
  1183.         self._decoded_chars = chars
  1184.         self._decoded_chars_used = 0
  1185.  
  1186.     
  1187.     def _get_decoded_chars(self, n = None):
  1188.         offset = self._decoded_chars_used
  1189.         if n is None:
  1190.             chars = self._decoded_chars[offset:]
  1191.         else:
  1192.             chars = self._decoded_chars[offset:offset + n]
  1193.         self._decoded_chars_used += len(chars)
  1194.         return chars
  1195.  
  1196.     
  1197.     def _rewind_decoded_chars(self, n):
  1198.         if self._decoded_chars_used < n:
  1199.             raise AssertionError('rewind decoded_chars out of bounds')
  1200.         self._decoded_chars_used -= n
  1201.  
  1202.     
  1203.     def _read_chunk(self):
  1204.         if self._decoder is None:
  1205.             raise ValueError('no decoder')
  1206.         if self._telling:
  1207.             (dec_buffer, dec_flags) = self._decoder.getstate()
  1208.         input_chunk = self.buffer.read1(self._CHUNK_SIZE)
  1209.         eof = not input_chunk
  1210.         self._set_decoded_chars(self._decoder.decode(input_chunk, eof))
  1211.         if self._telling:
  1212.             self._snapshot = (dec_flags, dec_buffer + input_chunk)
  1213.         return not eof
  1214.  
  1215.     
  1216.     def _pack_cookie(self, position, dec_flags = 0, bytes_to_feed = 0, need_eof = 0, chars_to_skip = 0):
  1217.         return position | dec_flags << 64 | bytes_to_feed << 128 | chars_to_skip << 192 | bool(need_eof) << 256
  1218.  
  1219.     
  1220.     def _unpack_cookie(self, bigint):
  1221.         (rest, position) = divmod(bigint, 0x10000000000000000L)
  1222.         (rest, dec_flags) = divmod(rest, 0x10000000000000000L)
  1223.         (rest, bytes_to_feed) = divmod(rest, 0x10000000000000000L)
  1224.         (need_eof, chars_to_skip) = divmod(rest, 0x10000000000000000L)
  1225.         return (position, dec_flags, bytes_to_feed, need_eof, chars_to_skip)
  1226.  
  1227.     
  1228.     def tell(self):
  1229.         if not self._seekable:
  1230.             raise IOError('underlying stream is not seekable')
  1231.         if not self._telling:
  1232.             raise IOError('telling position disabled by next() call')
  1233.         self.flush()
  1234.         position = self.buffer.tell()
  1235.         decoder = self._decoder
  1236.         if decoder is None or self._snapshot is None:
  1237.             if self._decoded_chars:
  1238.                 raise AssertionError('pending decoded text')
  1239.             return position
  1240.         (dec_flags, next_input) = None._snapshot
  1241.         position -= len(next_input)
  1242.         chars_to_skip = self._decoded_chars_used
  1243.         if chars_to_skip == 0:
  1244.             return self._pack_cookie(position, dec_flags)
  1245.         saved_state = None.getstate()
  1246.         
  1247.         try:
  1248.             decoder.setstate((b'', dec_flags))
  1249.             start_pos = position
  1250.             start_flags = dec_flags
  1251.             bytes_fed = 0
  1252.             chars_decoded = 0
  1253.             need_eof = 0
  1254.             for next_byte in next_input:
  1255.                 bytes_fed += 1
  1256.                 chars_decoded += len(decoder.decode(next_byte))
  1257.                 (dec_buffer, dec_flags) = decoder.getstate()
  1258.                 if not dec_buffer and chars_decoded <= chars_to_skip:
  1259.                     start_pos += bytes_fed
  1260.                     chars_to_skip -= chars_decoded
  1261.                     start_flags = dec_flags
  1262.                     bytes_fed = 0
  1263.                     chars_decoded = 0
  1264.                 if chars_decoded >= chars_to_skip:
  1265.                     break
  1266.                     continue
  1267.                 chars_decoded += len(decoder.decode(b'', final = True))
  1268.                 need_eof = 1
  1269.                 if chars_decoded < chars_to_skip:
  1270.                     raise IOError("can't reconstruct logical file position")
  1271.                 return self._pack_cookie(start_pos, start_flags, bytes_fed, need_eof, chars_to_skip)
  1272.             decoder.setstate(saved_state)
  1273.             return None
  1274.  
  1275.  
  1276.     
  1277.     def truncate(self, pos = None):
  1278.         self.flush()
  1279.         if pos is None:
  1280.             pos = self.tell()
  1281.         return self.buffer.truncate(pos)
  1282.  
  1283.     
  1284.     def detach(self):
  1285.         if self.buffer is None:
  1286.             raise ValueError('buffer is already detached')
  1287.         self.flush()
  1288.         buffer = self.buffer
  1289.         self.buffer = None
  1290.         return buffer
  1291.  
  1292.     
  1293.     def seek(self, cookie, whence = 0):
  1294.         if self.closed:
  1295.             raise ValueError('tell on closed file')
  1296.         if not self._seekable:
  1297.             raise IOError('underlying stream is not seekable')
  1298.         if whence == 1:
  1299.             if cookie != 0:
  1300.                 raise IOError("can't do nonzero cur-relative seeks")
  1301.             whence = 0
  1302.             cookie = self.tell()
  1303.         if whence == 2:
  1304.             if cookie != 0:
  1305.                 raise IOError("can't do nonzero end-relative seeks")
  1306.             self.flush()
  1307.             position = self.buffer.seek(0, 2)
  1308.             self._set_decoded_chars('')
  1309.             self._snapshot = None
  1310.             if self._decoder:
  1311.                 self._decoder.reset()
  1312.             return position
  1313.         if None != 0:
  1314.             raise ValueError('invalid whence (%r, should be 0, 1 or 2)' % (whence,))
  1315.         if cookie < 0:
  1316.             raise ValueError('negative seek position %r' % (cookie,))
  1317.         self.flush()
  1318.         (start_pos, dec_flags, bytes_to_feed, need_eof, chars_to_skip) = self._unpack_cookie(cookie)
  1319.         self.buffer.seek(start_pos)
  1320.         self._set_decoded_chars('')
  1321.         self._snapshot = None
  1322.         if cookie == 0 and self._decoder:
  1323.             self._decoder.reset()
  1324.         elif self._decoder and dec_flags or chars_to_skip:
  1325.             if not self._decoder:
  1326.                 pass
  1327.             self._decoder = self._get_decoder()
  1328.             self._decoder.setstate((b'', dec_flags))
  1329.             self._snapshot = (dec_flags, b'')
  1330.         if chars_to_skip:
  1331.             input_chunk = self.buffer.read(bytes_to_feed)
  1332.             self._set_decoded_chars(self._decoder.decode(input_chunk, need_eof))
  1333.             self._snapshot = (dec_flags, input_chunk)
  1334.             if len(self._decoded_chars) < chars_to_skip:
  1335.                 raise IOError("can't restore logical file position")
  1336.             self._decoded_chars_used = chars_to_skip
  1337.         
  1338.         try:
  1339.             if not self._encoder:
  1340.                 pass
  1341.             encoder = self._get_encoder()
  1342.         except LookupError:
  1343.             pass
  1344.  
  1345.         if cookie != 0:
  1346.             encoder.setstate(0)
  1347.         else:
  1348.             encoder.reset()
  1349.         return cookie
  1350.  
  1351.     
  1352.     def read(self, n = None):
  1353.         self._checkReadable()
  1354.         if n is None:
  1355.             n = -1
  1356.         if not self._decoder:
  1357.             pass
  1358.         decoder = self._get_decoder()
  1359.         
  1360.         try:
  1361.             n.__index__
  1362.         except AttributeError:
  1363.             raise TypeError('an integer is required')
  1364.  
  1365.         if n < 0:
  1366.             result = self._get_decoded_chars() + decoder.decode(self.buffer.read(), final = True)
  1367.             self._set_decoded_chars('')
  1368.             self._snapshot = None
  1369.             return result
  1370.         eof = None
  1371.         result = self._get_decoded_chars(n)
  1372.         while len(result) < n and not eof:
  1373.             eof = not self._read_chunk()
  1374.             result += self._get_decoded_chars(n - len(result))
  1375.         return result
  1376.  
  1377.     
  1378.     def next(self):
  1379.         self._telling = False
  1380.         line = self.readline()
  1381.         if not line:
  1382.             self._snapshot = None
  1383.             self._telling = self._seekable
  1384.             raise StopIteration
  1385.         return line
  1386.  
  1387.     
  1388.     def readline(self, limit = None):
  1389.         if self.closed:
  1390.             raise ValueError('read from closed file')
  1391.         if limit is None:
  1392.             limit = -1
  1393.         elif not isinstance(limit, (int, long)):
  1394.             raise TypeError('limit must be an integer')
  1395.         line = self._get_decoded_chars()
  1396.         start = 0
  1397.         if not self._decoder:
  1398.             self._get_decoder()
  1399.         pos = None
  1400.         endpos = None
  1401.         while True:
  1402.             if self._readtranslate:
  1403.                 pos = line.find('\n', start)
  1404.                 if pos >= 0:
  1405.                     endpos = pos + 1
  1406.                     break
  1407.                 else:
  1408.                     start = len(line)
  1409.             elif self._readuniversal:
  1410.                 nlpos = line.find('\n', start)
  1411.                 crpos = line.find('\r', start)
  1412.                 if crpos == -1:
  1413.                     if nlpos == -1:
  1414.                         start = len(line)
  1415.                     else:
  1416.                         endpos = nlpos + 1
  1417.                         break
  1418.                 elif nlpos == -1:
  1419.                     endpos = crpos + 1
  1420.                     break
  1421.                 elif nlpos < crpos:
  1422.                     endpos = nlpos + 1
  1423.                     break
  1424.                 elif nlpos == crpos + 1:
  1425.                     endpos = crpos + 2
  1426.                     break
  1427.                 else:
  1428.                     endpos = crpos + 1
  1429.                     break
  1430.             else:
  1431.                 pos = line.find(self._readnl)
  1432.                 if pos >= 0:
  1433.                     endpos = pos + len(self._readnl)
  1434.                     break
  1435.             if limit >= 0 and len(line) >= limit:
  1436.                 endpos = limit
  1437.                 break
  1438.             while self._read_chunk():
  1439.                 if self._decoded_chars:
  1440.                     break
  1441.                     continue
  1442.                 if self._decoded_chars:
  1443.                     line += self._get_decoded_chars()
  1444.                     continue
  1445.             self._set_decoded_chars('')
  1446.             self._snapshot = None
  1447.             return line
  1448.         if limit >= 0 and endpos > limit:
  1449.             endpos = limit
  1450.         self._rewind_decoded_chars(len(line) - endpos)
  1451.         return line[:endpos]
  1452.  
  1453.     
  1454.     def newlines(self):
  1455.         if self._decoder:
  1456.             return self._decoder.newlines
  1457.  
  1458.     newlines = property(newlines)
  1459.  
  1460.  
  1461. class StringIO(TextIOWrapper):
  1462.     
  1463.     def __init__(self, initial_value = '', newline = '\n'):
  1464.         super(StringIO, self).__init__(BytesIO(), encoding = 'utf-8', errors = 'strict', newline = newline)
  1465.         if newline is None:
  1466.             self._writetranslate = False
  1467.         if initial_value:
  1468.             if not isinstance(initial_value, unicode):
  1469.                 initial_value = unicode(initial_value)
  1470.             self.write(initial_value)
  1471.             self.seek(0)
  1472.  
  1473.     
  1474.     def getvalue(self):
  1475.         self.flush()
  1476.         return self.buffer.getvalue().decode(self._encoding, self._errors)
  1477.  
  1478.     
  1479.     def __repr__(self):
  1480.         return object.__repr__(self)
  1481.  
  1482.     
  1483.     def errors(self):
  1484.         pass
  1485.  
  1486.     errors = property(errors)
  1487.     
  1488.     def encoding(self):
  1489.         pass
  1490.  
  1491.     encoding = property(encoding)
  1492.     
  1493.     def detach(self):
  1494.         self._unsupported('detach')
  1495.  
  1496.  
  1497.