ó V!¶\c@s#dZddlZddlZyddlZWnek rGdZn–Xy$ejƒdphejƒdZWn=e k rŸZ de j kr–dZq¬dZn dZnXyej ep¾dƒWne k rÜdZnXdefd„ƒYZd efd „ƒYZd efd „ƒ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ÿÿÿÿNisunknown locale: UTF-8sUTF-8tt 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 ((sB/tmp/pip-install-usGedi/docutils/docutils/utils/error_reporting.pyt__init__Is   cCsÆyt|jƒSWn®tk rÁt|jtƒrwg|jjD]$}tt||j|jƒƒ^q@}dj |ƒSt|jt ƒr»t j dkrŸ|jS|jj |j|jƒSn‚nXdS(Ns, ii(ii(tstrRtUnicodeEncodeErrort isinstancet ExceptiontargsRRR tjointunicodetsyst version_infotencode(R targR((sB/tmp/pip-install-usGedi/docutils/docutils/utils/error_reporting.pyt__str__Rs 4  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((sB/tmp/pip-install-usGedi/docutils/docutils/utils/error_reporting.pyt __unicode__cs&   7 N(t__name__t __module__t__doc__RR RR"(((sB/tmp/pip-install-usGedi/docutils/docutils/utils/error_reporting.pyRDs   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 ((sB/tmp/pip-install-usGedi/docutils/docutils/utils/error_reporting.pyRˆscCs&d|jjjtt|ƒjƒfS(Nu%s: %s(RR'R#R(R&R"(R ((sB/tmp/pip-install-usGedi/docutils/docutils/utils/error_reporting.pyR"Œs(R#R$R%RR"(((sB/tmp/pip-install-usGedi/docutils/docutils/utils/error_reporting.pyR&„s 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 R/RR R ((sB/tmp/pip-install-usGedi/docutils/docutils/utils/error_reporting.pyR ˜s   !   cCs/|jtkrdSt|tƒrItt||j|j|jƒƒ}ny|jj |ƒWnËt k r’|jj |j |j|jƒƒn™t k r*t|tƒrÔ|jj |j |j|jƒƒdS|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(R/R,RRRRRR R twriteRRt TypeErrorRR+tstdouttbuffer(R R((sB/tmp/pip-install-usGedi/docutils/docutils/utils/error_reporting.pyR0»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(R/RR2R+tclosetAttributeError(R ((sB/tmp/pip-install-usGedi/docutils/docutils/utils/error_reporting.pyR4Õs  N(R#R$R%RR R0R4(((sB/tmp/pip-install-usGedi/docutils/docutils/utils/error_reporting.pyR)‘s  ! (R%Rtcodecstlocalet ImportErrorRR t getlocaletgetdefaultlocalet ValueErrorR!Rtlookupt LookupErrortobjectRR&R)(((sB/tmp/pip-install-usGedi/docutils/docutils/utils/error_reporting.pyt$s(  $     @