-----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

Reply via email to