2020
2121from collections import namedtuple
2222import logging
23+ import os
2324
2425try :
25- basestring # Python 2
26- except NameError :
27- basestring = str # Python 3 #NOQA
26+ # Python 2
27+ unicode # NOQA
28+ except NameError : # pragma: nocover
29+ # Python 3
30+ unicode = str # NOQA
2831
32+ import saneyaml
2933
30- __version__ = '3.3.0'
31-
34+ __version__ = '3.4.0.pre1'
3235
3336__about_spec_version__ = '3.1'
3437
@@ -52,39 +55,58 @@ class Error(namedtuple('Error', ['severity', 'message'])):
5255 """
5356 def __new__ (self , severity , message ):
5457 if message :
55- if isinstance (message , basestring ):
56- message = clean_string (message )
58+ if isinstance (message , unicode ):
59+ message = self . _clean_string (message )
5760 else :
58- message = clean_string (repr (message ))
61+ message = self ._clean_string (unicode (repr (message ), encoding = 'utf-8' ))
62+ message = message .strip ('"' )
5963
6064 return super (Error , self ).__new__ (
6165 Error , severity , message )
6266
6367 def __repr__ (self , * args , ** kwargs ):
64- sev = severities [self .severity ]
65- msg = clean_string (repr (self .message ))
66- return 'Error(%(sev)s, %(msg)s)' % locals ()
68+ sev , msg = self ._get_values ()
69+ return 'Error(%(sev)s, %(msg)s)' % locals ()
6770
71+ def __eq__ (self , other ):
72+ return repr (self ) == repr (other )
6873
69- def clean_string (s ):
70- """
71- Return a cleaned string for `s`, stripping eventual "u" prefixes
72- from unicode representations.
73- """
74- if not s :
74+ def _get_values (self ):
75+ sev = severities [self .severity ]
76+ msg = self ._clean_string (repr (self .message ))
77+ return sev , msg
78+
79+ def render (self ):
80+ sev , msg = self ._get_values ()
81+ return '%(sev)s: %(msg)s' % locals ()
82+
83+ def to_dict (self , * args , ** kwargs ):
84+ """
85+ Return an ordered dict of self.
86+ """
87+ return self ._asdict ()
88+
89+ @staticmethod
90+ def _clean_string (s ):
91+ """
92+ Return a cleaned string for `s`, stripping eventual "u" prefixes
93+ from unicode representations.
94+ """
95+ if not s :
96+ return s
97+ if s .startswith (('u"' , "u'" )):
98+ s = s .lstrip ('u' )
99+ s = s .replace ('[u"' , '["' )
100+ s = s .replace ("[u'" , "['" )
101+ s = s .replace ("(u'" , "('" )
102+ s = s .replace ("(u'" , "('" )
103+ s = s .replace ("{u'" , "{'" )
104+ s = s .replace ("{u'" , "{'" )
105+ s = s .replace (" u'" , " '" )
106+ s = s .replace (" u'" , " '" )
107+ s = s .replace ("\\ \\ " , "\\ " )
75108 return s
76- if s .startswith (('u"' , "u'" )):
77- s = s .lstrip ('u' )
78- s = s .replace ('[u"' , '["' )
79- s = s .replace ("[u'" , "['" )
80- s = s .replace ("(u'" , "('" )
81- s = s .replace ("(u'" , "('" )
82- s = s .replace ("{u'" , "{'" )
83- s = s .replace ("{u'" , "{'" )
84- s = s .replace (" u'" , " '" )
85- s = s .replace (" u'" , " '" )
86- s = s .replace ("\\ \\ " , "\\ " )
87- return s
109+
88110
89111# modeled after the logging levels
90112CRITICAL = 50
@@ -96,10 +118,10 @@ def clean_string(s):
96118
97119
98120severities = {
99- CRITICAL : u 'CRITICAL' ,
100- ERROR : u 'ERROR' ,
101- WARNING : u 'WARNING' ,
102- INFO : u 'INFO' ,
103- DEBUG : u 'DEBUG' ,
104- NOTSET : u 'NOTSET'
105- }
121+ CRITICAL : 'CRITICAL' ,
122+ ERROR : 'ERROR' ,
123+ WARNING : 'WARNING' ,
124+ INFO : 'INFO' ,
125+ DEBUG : 'DEBUG' ,
126+ NOTSET : 'NOTSET'
127+ }
0 commit comments