-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi,
Looking forward adding avatar upload facilities for jpoker,
I've begun implementing a PokerImageUpdate resource to pokersite,
I attached the server side modification I've done so far.
Feel free to review, or comment the implementation.
- --
bou ^
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: http://getfiregpg.org
iD8DBQFIm0W6ZmEdV9SHoe4RAh2oAJ0X/iMYu0vG48g+axEOxl8adTn+swCggklM
C65/XQQ05dN5XCo4MBU1gdY=
=vvjT
-----END PGP SIGNATURE-----
Index: pokernetwork/pokerservice.py
===================================================================
--- pokernetwork/pokerservice.py (revision 4228)
+++ pokernetwork/pokerservice.py (working copy)
@@ -1777,6 +1777,7 @@
resource.Resource.__init__(self)
self.service = service
self.putChild("POKER_REST", PokerResource(self.service))
+ self.putChild("UPLOAD", PokerImageUpload(self.service))
self.putChild("", self)
def render_GET(self, request):
Index: pokernetwork/pokersite.py
===================================================================
--- pokernetwork/pokersite.py (revision 4228)
+++ pokernetwork/pokersite.py (working copy)
@@ -20,6 +20,7 @@
import simplejson
import re
import imp
+import base64
from types import DictType
from traceback import format_exc
@@ -210,6 +211,50 @@
request.write(body)
d.addErrback(processingFailed)
return d
+
+class PokerImageUpload(resource.Resource):
+
+ def __init__(self, service):
+ resource.Resource.__init__(self)
+ self.service = service
+ self.verbose = service.verbose
+ self.deferred = defer.succeed(None)
+ self.isLeaf = True
+
+ def message(self, string):
+ print "PokerImageUpload: " + string
+
+# def error(self, string):
+# self.message("*ERROR* " + string)
+
+ def render(self, request):
+ 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))
+ return server.NOT_DONE_YET
+
+ def deferRender(self, request, data):
+ session = request.getSession()
+ if session.avatar.isLogged():
+ serial = request.getSession().avatar.getSerial()
+ packet = PacketPokerPlayerImage(image = base64.b64encode(data), serial = serial)
+ self.service.setPlayerImage(packet)
+ result_string = 'image uploaded'
+ request.setHeader("Content-length", str(len(result_string)))
+ request.setHeader("Content-type", 'text/plain; charset="UTF-8"')
+ request.write(result_string)
+ request.finish()
+ return
+ else:
+ session.expire()
+ body = 'not logged'
+ request.setResponseCode(http.UNAUTHORIZED)
+ request.setHeader('content-type',"text/html")
+ request.setHeader('content-length', str(len(body)))
+ request.write(body)
+ return
class PokerSite(server.Site):
Index: tests/test-pokersite.py.in
===================================================================
--- tests/test-pokersite.py.in (revision 4228)
+++ tests/test-pokersite.py.in (working copy)
@@ -40,6 +40,8 @@
from pokernetwork import pokeravatar
from pokernetwork.pokerpackets import *
+import base64
+
class PokerServiceMockup:
def __init__(self):
@@ -54,6 +56,10 @@
def destroyAvatar(self, avatar):
pass
+ player_image = None
+ def setPlayerImage(self, player_image):
+ self.player_image = player_image
+
class HelpersTestCase(unittest.TestCase):
def test_args2packets(self):
@@ -182,6 +188,57 @@
self.assertSubstring('\r\n\r\nFUN([])', r.transport.getvalue())
+class PokerImageUploadTestCase(unittest.TestCase):
+
+ class Transport:
+ def getPeer(self):
+ return None
+ def getHost(self):
+ return None
+
+ class Channel:
+ def __init__(self, site):
+ self.transport = PokerImageUploadTestCase.Transport()
+ self.site = site
+
+ def setUp(self):
+ testclock._seconds_reset()
+ settings_xml = """<?xml version="1.0" encoding="ISO-8859-1"?>
+<server verbose="6" />
+"""
+ self.settings = pokernetworkconfig.Config([])
+ self.settings.loadFromString(settings_xml)
+ pokersite.memcache = pokersite.MemcacheMockup
+ self.service = PokerServiceMockup()
+ self.site = pokersite.PokerSite(self.settings, pokersite.PokerImageUpload(self.service))
+
+ def test01_render(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)
+ 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(image_data),
+ self.service.player_image.image)
+ session.expire()
+
class FilterTestCase(unittest.TestCase):
def setUp(self):
@@ -410,6 +467,7 @@
suite = loader.suiteFactory()
suite.addTest(loader.loadClass(FilterTestCase))
suite.addTest(loader.loadClass(PokerResourceTestCase))
+ suite.addTest(loader.loadClass(PokerImageUploadTestCase))
suite.addTest(loader.loadClass(SessionTestCase))
suite.addTest(loader.loadClass(RequestTestCase))
suite.addTest(loader.loadClass(PokerSiteTestCase))
_______________________________________________
Pokersource-users mailing list
[email protected]
https://mail.gna.org/listinfo/pokersource-users