ó ¦á­Qc@sßdZddlZddlZyddlZWnek rGdZnRXejƒdpeejƒdZyej epzdƒWne k r˜dZnXde fd„ƒYZ de fd„ƒYZ d e fd „ƒYZdS( sç Error reporting should be safe from encoding/decoding errors. However, implicit conversions of strings and exceptions like >>> u'%s world: %s' % ('Hällo', Exception(u'Hällo') fail in some Python versions: * In Python <= 2.6, ``unicode()`` uses `__str__` and fails with non-ASCII chars in`unicode` arguments. (work around http://bugs.python.org/issue2517): * In Python 2, unicode() fails, with non-ASCII chars in arguments. (Use case: in some locales, the errstr argument of IOError contains non-ASCII chars.) * In Python 2, str() fails, with non-ASCII chars in `unicode` arguments. The `SafeString`, `ErrorString` and `ErrorOutput` classes handle common exceptions. iÿÿÿÿNitt SafeStringcBs2eZdZdddd„Zd„Zd„ZRS(sG A wrapper providing robust conversion to `str` and `unicode`. tbackslashreplacetreplacecCsF||_|p*t|ddƒp*tp*d|_||_||_dS(Ntencodingtascii(tdatatgetattrtNonetlocale_encodingRtencoding_errorstdecoding_errors(tselfRRR R ((sH/usr/local/lib/python2.7/site-packages/docutils/utils/error_reporting.pyt__init__?s   cCsÈyt|jƒSWn°tk rÃ}t|jtƒryg|jjD]$}tt||j|jƒƒ^qB}dj |ƒSt|jt ƒr½t j dkr¡|jS|jj |j|jƒSn‚nXdS(Ns, ii(ii(tstrRtUnicodeEncodeErrort isinstancet ExceptiontargsRRR tjointunicodetsyst version_infotencode(R terrtargR((sH/usr/local/lib/python2.7/site-packages/docutils/utils/error_reporting.pyt__str__Hs4  cCs5y>t|jƒ}t|jtƒr9|jddƒ}n|SWnðtk r0}t|jtƒr©d|jjt|jj|j |j ƒt|jj |j |j ƒfSt|jt ƒrg|jj D]'}tt||j d|j ƒƒ^qÈ}dj|ƒSt|tƒr*t|j|j |j ƒS‚nXdS(sf Return unicode representation of `self.data`. Try ``unicode(self.data)``, catch `UnicodeError` and * if `self.data` is an Exception instance, work around http://bugs.python.org/issue2517 with an emulation of Exception.__unicode__, * else decode with `self.encoding` and `self.decoding_errors`. s: u's: 'u[Errno %s] %s: '%s'R u, N(RRRtEnvironmentErrorRt UnicodeErrorterrnoRtstrerrorRR tfilenameRRRtUnicodeDecodeError(R tuterrorRR((sH/usr/local/lib/python2.7/site-packages/docutils/utils/error_reporting.pyt __unicode__Ys&   7 N(t__name__t __module__t__doc__RR RR#(((sH/usr/local/lib/python2.7/site-packages/docutils/utils/error_reporting.pyR:s   t ErrorStringcBs eZdZd„Zd„ZRS(s3 Safely report exception type and message. cCs&d|jjjtt|ƒjƒfS(Ns%s: %s(Rt __class__R$tsuperR'R(R ((sH/usr/local/lib/python2.7/site-packages/docutils/utils/error_reporting.pyR~scCs&d|jjjtt|ƒjƒfS(Nu%s: %s(RR(R$R)R'R#(R ((sH/usr/local/lib/python2.7/site-packages/docutils/utils/error_reporting.pyR#‚s(R$R%R&RR#(((sH/usr/local/lib/python2.7/site-packages/docutils/utils/error_reporting.pyR'zs t ErrorOutputcBs5eZdZddddd„Zd„Zd„ZRS(s’ Wrapper class for file-like error streams with failsave de- and encoding of `str`, `bytes`, `unicode` and `Exception` instances. RRcCs¾|dkrtj}n`|s't}nQt|tƒrHt|dƒ}n0t|tƒrxt|jtj ƒƒdƒ}n||_ |p¢t |ddƒp¢t p¢d|_ ||_||_dS(s‘ :Parameters: - `stream`: a file-like object, a string (path to a file), `None` (write to `sys.stderr`, default), or evaluating to `False` (write() requests are ignored). - `encoding`: `stream` text encoding. Guessed if None. - `encoding_errors`: how to treat encoding errors. twRRN(RRtstderrtFalseRRtopenRRtgetfilesystemencodingtstreamRR RR R (R R0RR R ((sH/usr/local/lib/python2.7/site-packages/docutils/utils/error_reporting.pyR Žs   !   cCsú|jtkrdSt|tƒrItt||j|j|jƒƒ}ny|jj |ƒWn–t k r’|jj |j |j|jƒƒndt k rõ|jt jt jfkrÐ|jjj |ƒqö|jj t||j|jƒƒnXdS(s– Write `data` to self.stream. Ignore, if self.stream is False. `data` can be a `string`, `unicode`, or `Exception` instance. N(R0R-RRRRRR R twriteRRt TypeErrorRR,tstdouttbuffer(R R((sH/usr/local/lib/python2.7/site-packages/docutils/utils/error_reporting.pyR1±s % cCsH|jtjtjfkrdSy|jjƒWntk rCnXdS(s‘ Close the error-output stream. Ignored if the stream is` sys.stderr` or `sys.stdout` or has no close() method. N(R0RR3R,tclosetAttributeError(R ((sH/usr/local/lib/python2.7/site-packages/docutils/utils/error_reporting.pyR5Çs  N(R$R%R&RR R1R5(((sH/usr/local/lib/python2.7/site-packages/docutils/utils/error_reporting.pyR*‡s  ! (R&Rtcodecstlocalet ImportErrorRR t getlocaletgetdefaultlocaletlookupt LookupErrortobjectRR'R*(((sH/usr/local/lib/python2.7/site-packages/docutils/utils/error_reporting.pyt$s     @