home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_605 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  38.6 KB  |  1,548 lines

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