Skip to content

Commit 17f31e1

Browse files
committed
Handle str/bytes issues for Python 3 for roundup.cgi.
1 parent cb1f8b5 commit 17f31e1

File tree

1 file changed

+17
-13
lines changed

1 file changed

+17
-13
lines changed

frontends/roundup.cgi

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from __future__ import print_function
2121
from roundup import version_check
2222
from roundup.i18n import _
23+
from roundup.anypy.strings import s2b, StringIO
2324
import sys, time
2425

2526
#
@@ -72,7 +73,6 @@ LOG = DevNull()
7273
#
7374
try:
7475
import traceback, cgi
75-
from roundup.anypy.strings import StringIO
7676
from roundup.cgi import cgitb
7777
except:
7878
print("Content-Type: text/plain\n")
@@ -125,11 +125,11 @@ class RequestWrapper:
125125
def write(self, data):
126126
self.wfile.write(data)
127127
def send_response(self, code):
128-
self.write('Status: %s\r\n'%code)
128+
self.write(s2b('Status: %s\r\n'%code))
129129
def send_header(self, keyword, value):
130-
self.write("%s: %s\r\n" % (keyword, value))
130+
self.write(s2b("%s: %s\r\n" % (keyword, value)))
131131
def end_headers(self):
132-
self.write("\r\n")
132+
self.write(b"\r\n")
133133
def start_response(self, headers, response):
134134
self.send_response(response)
135135
for key, value in headers:
@@ -161,7 +161,7 @@ def main(out, err):
161161
os.environ.get('REQUEST_URI', ''))
162162
request.send_header('Location', absolute_url)
163163
request.end_headers()
164-
out.write('Moved Permanently')
164+
out.write(b'Moved Permanently')
165165
else:
166166
tracker_home = TRACKER_HOMES[tracker]
167167
tracker = roundup.instance.open(tracker_home)
@@ -176,28 +176,28 @@ def main(out, err):
176176
request.send_response(403)
177177
request.send_header('Content-Type', 'text/html')
178178
request.end_headers()
179-
out.write('Unauthorised')
179+
out.write(b'Unauthorised')
180180
except roundup.cgi.client.NotFound:
181181
request.send_response(404)
182182
request.send_header('Content-Type', 'text/html')
183183
request.end_headers()
184-
out.write('Not found: %s'%client.path)
184+
out.write(s2b('Not found: %s'%client.path))
185185

186186
else:
187187
from roundup.anypy import urllib_
188188
request.send_response(200)
189189
request.send_header('Content-Type', 'text/html')
190190
request.end_headers()
191191
w = request.write
192-
w(_('<html><head><title>Roundup trackers index</title></head>\n'))
193-
w(_('<body><h1>Roundup trackers index</h1><ol>\n'))
192+
w(s2b(_('<html><head><title>Roundup trackers index</title></head>\n')))
193+
w(s2b(_('<body><h1>Roundup trackers index</h1><ol>\n')))
194194
homes = sorted(TRACKER_HOMES.keys())
195195
for tracker in homes:
196-
w(_('<li><a href="%(tracker_url)s/index">%(tracker_name)s</a>\n')%{
196+
w(s2b(_('<li><a href="%(tracker_url)s/index">%(tracker_name)s</a>\n')%{
197197
'tracker_url': os.environ['SCRIPT_NAME']+'/'+
198198
urllib_.quote(tracker),
199-
'tracker_name': cgi.escape(tracker)})
200-
w(_('</ol></body></html>'))
199+
'tracker_name': cgi.escape(tracker)}))
200+
w(s2b(_('</ol></body></html>')))
201201

202202
#
203203
# Now do the actual CGI handling
@@ -211,7 +211,11 @@ try:
211211
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
212212
checkconfig()
213213
sys.stdout = sys.stderr = LOG
214-
main(out, err)
214+
if sys.version_info[0] > 2:
215+
out_buf = out.buffer
216+
else:
217+
out_buf = out
218+
main(out_buf, err)
215219
except SystemExit:
216220
pass
217221
except:

0 commit comments

Comments
 (0)