4949from docutils import nodes
5050from sphinx .builders import Builder
5151
52- detect_all = re .compile (ur '''
52+ detect_all = re .compile (r '''
5353 ::(?=[^=])| # two :: (but NOT ::=)
5454 :[a-zA-Z][a-zA-Z0-9]+| # :foo
5555 `| # ` (seldom used by itself)
5656 (?<!\.)\.\.[ \t]*\w+: # .. foo: (but NOT ... else:)
5757 ''' , re .UNICODE | re .VERBOSE ).finditer
5858
59+ py3 = sys .version_info >= (3 , 0 )
60+
5961
6062class Rule :
6163 def __init__ (self , docname , lineno , issue , line ):
@@ -136,21 +138,31 @@ def report_issue(self, text, lineno, issue):
136138 if not self .any_issue : self .info ()
137139 self .any_issue = True
138140 self .write_log_entry (lineno , issue , text )
139- self .warn ('[%s:%d] "%s" found in "%-.120s"' % (
141+ if py3 :
142+ self .warn ('[%s:%d] "%s" found in "%-.120s"' %
143+ (self .docname , lineno , issue , text ))
144+ else :
145+ self .warn ('[%s:%d] "%s" found in "%-.120s"' % (
140146 self .docname .encode (sys .getdefaultencoding (),'replace' ),
141147 lineno ,
142148 issue .encode (sys .getdefaultencoding (),'replace' ),
143149 text .strip ().encode (sys .getdefaultencoding (),'replace' )))
144150 self .app .statuscode = 1
145151
146152 def write_log_entry (self , lineno , issue , text ):
147- f = open (self .log_file_name , 'ab' )
148- writer = csv .writer (f , dialect )
149- writer .writerow ([self .docname .encode ('utf-8' ),
150- lineno ,
151- issue .encode ('utf-8' ),
152- text .strip ().encode ('utf-8' )])
153- f .close ()
153+ if py3 :
154+ f = open (self .log_file_name , 'a' )
155+ writer = csv .writer (f , dialect )
156+ writer .writerow ([self .docname , lineno , issue , text .strip ()])
157+ f .close ()
158+ else :
159+ f = open (self .log_file_name , 'ab' )
160+ writer = csv .writer (f , dialect )
161+ writer .writerow ([self .docname .encode ('utf-8' ),
162+ lineno ,
163+ issue .encode ('utf-8' ),
164+ text .strip ().encode ('utf-8' )])
165+ f .close ()
154166
155167 def load_rules (self , filename ):
156168 """Load database of previously ignored issues.
@@ -160,18 +172,26 @@ def load_rules(self, filename):
160172 """
161173 self .info ("loading ignore rules... " , nonl = 1 )
162174 self .rules = rules = []
163- try : f = open (filename , 'rb' )
164- except IOError : return
175+ try :
176+ if py3 :
177+ f = open (filename , 'r' )
178+ else :
179+ f = open (filename , 'rb' )
180+ except IOError :
181+ return
165182 for i , row in enumerate (csv .reader (f )):
166183 if len (row ) != 4 :
167184 raise ValueError (
168185 "wrong format in %s, line %d: %s" % (filename , i + 1 , row ))
169186 docname , lineno , issue , text = row
170- docname = docname .decode ('utf-8' )
171- if lineno : lineno = int (lineno )
172- else : lineno = None
173- issue = issue .decode ('utf-8' )
174- text = text .decode ('utf-8' )
187+ if lineno :
188+ lineno = int (lineno )
189+ else :
190+ lineno = None
191+ if not py3 :
192+ docname = docname .decode ('utf-8' )
193+ issue = issue .decode ('utf-8' )
194+ text = text .decode ('utf-8' )
175195 rule = Rule (docname , lineno , issue , text )
176196 rules .append (rule )
177197 f .close ()
0 commit comments