Hi,
Please review and consider applying the attached patch.
Thanks in advance.
On Mon, Aug 18, 2008 at 2:40 PM, Johan Euphrosine <[EMAIL PROTECTED]> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Please review this new patch instead.
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.6 (GNU/Linux)
> Comment: http://getfiregpg.org
>
> iD8DBQFIqW2iZmEdV9SHoe4RAo3iAKCGRZdvV53k9hZW51cMeia9IdQPDACfSGyB
> 8sbUO+jJof9Ajya+N8cRgK0=
> =yeBS
> -----END PGP SIGNATURE-----
>
> On Sat, Aug 16, 2008 at 7:08 PM, Johan Euphrosine <[EMAIL PROTECTED]> wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> On Sat, Aug 16, 2008 at 6:54 PM, Johan Euphrosine wrote:
>>> On Wed, Aug 13, 2008 at 11:33 PM, Loic Dachary wrote:
>>>> The patch lacks proper error handling. Could you please check the
>>>> PokerSource error handlers and provide the equivalent for /AVATAR and
>>>> /UPLOAD ?
>>>
>>> s/PokerSource/PokerService/ ?
>>>
>>> Do you want me to add an error hander similar to
>>> PokerService.pipesFailed as errback ?
>>>
>>
>> Let me know if the attached patch fix the reported issue
>> - --
>> bou ^
>>
>>
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG v1.4.6 (GNU/Linux)
>> Comment: http://getfiregpg.org
>>
>> iD8DBQFIpwmrZmEdV9SHoe4RAu7LAJ0e8WCVV3xRhEj+MljKswJPrvmFkACghXUu
>> QkpLxeAdNQUfANSPXBg5gas=
>> =uFu2
>> -----END PGP SIGNATURE-----
>>
>
>
>
> --
> bou ^
>
--
bou ^
Index: pokernetwork/pokersite.py
===================================================================
--- pokernetwork/pokersite.py (revision 4300)
+++ pokernetwork/pokersite.py (working copy)
@@ -308,14 +308,24 @@
if self.verbose > 3:
self.message("render " + request.content.read())
request.content.seek(0, 0)
- data = request.args['filename'][0]
- self.deferred.addCallback(lambda result: self.deferRender(request, data))
+ self.deferred.addCallback(lambda result: self.deferRender(request))
+ def failed(reason):
+ body = reason.getTraceback()
+ request.setResponseCode(http.INTERNAL_SERVER_ERROR)
+ request.setHeader('content-type',"text/html")
+ request.setHeader('content-length', str(len(body)))
+ request.expireSessionCookie()
+ request.write(body)
+ request.connectionLost(reason)
+ return True
+ self.deferred.addErrback(failed)
return server.NOT_DONE_YET
- def deferRender(self, request, data):
+ def deferRender(self, request):
session = request.getSession()
if session.avatar.isLogged():
serial = request.getSession().avatar.getSerial()
+ data = request.args['filename'][0]
packet = PacketPokerPlayerImage(image = base64.b64encode(data), serial = serial)
self.service.setPlayerImage(packet)
result_string = 'image uploaded'
@@ -355,6 +365,16 @@
request.content.seek(0, 0)
serial = int(request.path.split('/')[-1])
self.deferred.addCallback(lambda result: self.deferRender(request, serial))
+ def failed(reason):
+ body = reason.getTraceback()
+ request.setResponseCode(http.INTERNAL_SERVER_ERROR)
+ request.setHeader('content-type',"text/html")
+ request.setHeader('content-length', str(len(body)))
+ request.expireSessionCookie()
+ request.write(body)
+ request.connectionLost(reason)
+ return True
+ self.deferred.addErrback(failed)
return server.NOT_DONE_YET
def deferRender(self, request, serial):
Index: tests/test-pokersite.py.in
===================================================================
--- tests/test-pokersite.py.in (revision 4300)
+++ tests/test-pokersite.py.in (working copy)
@@ -287,10 +287,6 @@
input = ''
r.gotLength(len(input))
r.handleContentChunk(input)
- import cgi
- def parse_multipart_mockup(content, dict):
- return {'filename':[image_data]}
- cgi.parse_multipart = parse_multipart_mockup
r.requestReceived('POST', '/', '')
self.assertSubstring('image uploaded', r.transport.getvalue())
self.assertEquals(base64.b64encode(self.image_data),
@@ -314,7 +310,33 @@
r.requestReceived('POST', '/', '')
self.assertSubstring('not logged', r.transport.getvalue())
self.assertEquals(None, self.service.player_image)
+
+ def test03_error(self):
+ r = pokersite.Request(self.Channel(self.site), True)
+ r.site = r.channel.site
+
+ r.args = {}
+ session = self.site.makeSession()
+ r.session = session
+ self.assertNotEquals(None, r.getSession().avatar);
+ user_serial = 111
+ r.getSession().avatar.user.serial = user_serial
+ self.assertEquals(True, r.getSession().avatar.isLogged());
+ image_data = "image data"
+ r.received_headers['content-type'] = 'multipart/form-data'
+ input = ''
+ r.gotLength(len(input))
+ r.handleContentChunk(input)
+ error_pattern = 'UNLIKELY'
+ def setPlayerImageFailed(player_image):
+ raise UserWarning, error_pattern
+ self.service.setPlayerImage = setPlayerImageFailed
+ r.requestReceived('POST', '/', '')
+ self.assertSubstring(error_pattern, r.transport.getvalue())
+ self.assertEquals(None, self.service.player_image)
+ session.expire()
+
class PokerAvatarResourceTestCase(unittest.TestCase):
class Transport:
@@ -351,7 +373,7 @@
self.assertSubstring('\r\n\r\n%s' % data, r.transport.getvalue())
self.assertEquals(serial, self.service.player_serial)
- def test02_render_error(self):
+ def test02_not_found(self):
serial = 100
self.service.setPlayerImage(PacketPokerPlayerImage(image = '', serial = serial))
r = pokersite.Request(self.Channel(self.site), True)
@@ -362,6 +384,22 @@
self.assertSubstring('not found', r.transport.getvalue())
self.assertEquals(serial, self.service.player_serial)
+ def test03_error(self):
+ data = 'image data'
+ serial = 64
+ self.service.setPlayerImage(PacketPokerPlayerImage(image = base64.b64encode(data), serial = serial))
+ r = pokersite.Request(self.Channel(self.site), True)
+ r.site = r.channel.site
+ r.gotLength(0)
+ r.handleContentChunk('')
+ error_pattern = 'UNLIKELY'
+ def getPlayerImageFailed(player_serial):
+ raise UserWarning, error_pattern
+ self.service.getPlayerImage = getPlayerImageFailed
+ r.requestReceived('GET', '/%i' % serial, '')
+ self.assertSubstring('error_pattern', r.transport.getvalue())
+ self.assertEquals(None, self.service.player_serial)
+
class FilterTestCase(unittest.TestCase):
def setUp(self):
_______________________________________________
Pokersource-users mailing list
[email protected]
https://mail.gna.org/listinfo/pokersource-users