Changeset 519

Show
Ignore:
Timestamp:
03/17/08 09:18:30 (8 months ago)
Author:
asc
Message:

checking in current work for json/javascript output; incomplete and still undocumented

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/py/wscompose/validate.py

    r516 r519  
    354354 
    355355        return valid 
     356 
     357    # ########################################################## 
     358 
     359    def json_callback(self, func) : 
     360 
     361        if not self.re['label'].match(func) : 
     362            raise Exception, "Invalid JSON callback name" 
     363         
     364        return func 
    356365     
    357366    # ########################################################## 
  • trunk/py/wscompose/__init__.py

    r501 r519  
    219219    def send_map (self, img) : 
    220220 
    221         # Oh PIL, why don't you have a 'tostringDWIM' method? 
    222  
     221        if self.ctx['output'] == 'json' : 
     222            return self.send_map_as_json(img) 
     223 
     224        # 
     225         
    223226        fh = StringIO.StringIO() 
    224227        img.save(fh, "PNG") 
     
    233236        self.wfile.write(fh.getvalue()) 
    234237        return 
    235          
     238 
     239    # ########################################################## 
     240 
     241    def send_map_as_json (self, img) : 
     242 
     243        js = self.generate_javascript_output(img) 
     244         
     245        self.send_response(200, "OK") 
     246        self.send_header("Content-Type", "application/json") 
     247        self.send_header("Content-Length", len(js))          
     248 
     249        self.send_x_headers(img) 
     250        self.end_headers() 
     251 
     252        self.wfile.write(js) 
     253        return 
     254 
     255    # ########################################################## 
     256 
     257    def generate_javascript_output(self, img) : 
     258 
     259        import base64 
     260         
     261        fh = StringIO.StringIO() 
     262        img.save(fh, "PNG") 
     263 
     264        js = "{\"data\":\"%s\"})" % base64.b64encode(fh.getvalue()) 
     265 
     266        if self.ctx.has_key('json_callback') : 
     267            js = "%s(%s)" % (self.ctx['json_callback'], js) 
     268 
     269        return js 
     270     
    236271    # ########################################################## 
    237272 
     
    320355        # 
    321356         
    322         valid = {
     357        valid = {'output' : 'png'
    323358 
    324359        # 
     
    465500                self.error(141, e) 
    466501                return False 
    467          
     502 
     503        # 
     504        # json ? 
     505        # 
     506 
     507        if params.has_key('output') : 
     508 
     509            if params['output'][0] == 'javascript' : 
     510                pass 
     511 
     512            elif params['output'][0] == 'json' : 
     513                if not params.has_key('callback') : 
     514                    self.error(142, 'Missing JSON callback') 
     515                    return False 
     516             
     517                try : 
     518                    valid['json_callback'] = validator.json_callback(params['callback'][0]) 
     519                except Exception, e: 
     520                    self.error(143, e) 
     521                    return False 
     522            else : 
     523                self.error(144, "Not a valid output format") 
     524                return False 
     525             
     526            valid['output'] = 'json' 
     527             
     528                 
    468529        # 
    469530        # whoooosh 
     
    635696        err_code = self.sanitize(err_code) 
    636697        err_msg  = self.sanitize(err_msg) 
     698 
     699        print "[%s] %s" % (err_code, err_msg) 
    637700         
    638701        self.send_response(500, "Server Error")