def real_get(self): """ Handles /classify GET requests. A basic request with return a form setup for posting a new ColorScheme """ callback = self.request.REQUEST.get("callback") if callback: json = callback+'({"colors":[' else: self.write('<html><body>') self.write('<table><tr><th>ColorName</th><th>n</th><th>Colors</th></tr>') q = ColorScheme.all(keys_only=True) n = self.request.REQUEST.get('n') if n: q.filter("n",int(n)+2) #class fake_cl: # a = range(20) #fake_cl = fake_cl() for key in q: c = ColorScheme.get(key) s = '<div>' for i in range(2,c.n): r,g,b = map(ord,c.colors[i]) s += '<div style="float:left; border: 1px black solid; width:20px; height:20px; background-color:#%.2X%.2X%.2X;"> </div>'%(r,g,b) s += '</div>' if callback: json += '{"name":"%s","sample":\'%s\'},'%(c.name,s) else: row = '<tr><td>%s</td><td>%d</td><td>%s</td></tr>'%(c.name,c.n-2,s) self.write(row) if callback: json = json[:-1]+"]})" self.write(json)
def post(self,csid=''): bgcolor = '#000001' brcolor = '#000000' if self.request.user.is_authenticated(): user = self.request.user logger.info("%s, is creating a new ColorScheme."%(user.username)) POST = self.request.POST if 'colors' in POST: if 'background' in POST: bgcolor = POST['background'] if 'borders' in POST: brcolor = POST['borders'] colors = [bgcolor,brcolor]+POST['colors'].encode('utf8').split(',') color_list = [] for color in colors: if color[0] == '#': color = color[1:] r,g,b = [color[x:x+2] for x in range(0,6,2)] col = ''.join(map(chr,[int(r,16),int(g,16),int(b,16)])) color_list.append(col) cs = ColorScheme("%s:%s"%(user.username,hashlib.md5(''.join(color_list)).hexdigest())) cs.n = len(color_list) cs.colors = color_list if 'alphas' in POST: logger.warn("User: %s, tried to post a color scheme with Alphas, not supported yet"%user.username) cs.owner = user.username cs.public = True cs.expires = False cs.date = time.mktime(time.gmtime()) return self.write({"ColorSchemeID":cs.put()})
def cs(self): if self._cs: return self._cs if self.csid: csid = self.csid else: csName = self.request.REQUEST.get('cs') if csName: self.csid = csid = csName else: return False cs = memcache.get(csid.encode('utf8')) if cs is None: cs = ColorScheme.get_by_key_name(csid) if cs: cs.alphas = '\x00' if not memcache.add(csid.encode('utf8'), cs): logger.error("Memcache set failed [ %s ]"%csid) self._cs = cs #logger.info(self._cs) if cs is not None: if cs.public or cs.owner == self.request.user.username: self._cs = cs return self._cs return False
def real_post(self): colors = self.request.REQUEST.get('colors') name = self.request.REQUEST.get('name') if colors and name: colors = colors.encode('utf8') color_list = [] for color in colors.split(','): if color[0] == '#': color = color [1:] r,g,b = [color[x:x+2] for x in range(0,6,2)] col = ''.join(map(chr,[int(r,16),int(g,16),int(b,16)])) color_list.append(db.ByteString(col)) c = ColorScheme(key_name='cs:%s'%name) c.name = name c.n = len(color_list) c.colors = color_list alphas = self.request.REQUEST.get('alphas') if alphas: if alphas == "0,255,": pass else: values = map(int,alphas.split(',')) c.alphas = ''.join(map(chr,values)) try: key = c.put() except CapabilityDisabledError: logging.error("Capability has been disabled") self.dir(500) self.write(key) else: self.write("bad request")
def get(self,csid=''): if csid: self.csid = csid cs = self.cs if cs: dat = cs.as_dict() out = {} for key,val in dat.iteritems(): try: if issubclass(type(val),basestring): out[key] = val.encode('utf8') except UnicodeDecodeError: pass out['colors'] = ['#'+''.join(['%0.2X'%ord(y) for y in x]) for x in dat['colors']] if 'alphas' in dat: out['alphas'] = map(ord,dat['alphas']) return self.write(out) else: return self.write({"error":"ColorScheme Not Found"}) else: POST = self.request.POST if 'numclasses' in POST and POST['numclasses'].isdigit(): return self.write({'colorschemes':ColorScheme.select('n',POST['numclasses'],keys_only=True)}) return self.write({'colorschemes':ColorScheme.select('owner',self.request.user.username,keys_only=True)})
def cs(self): """ Search for the Color Scheme Name in the Request and try and load it from Memcache or DataStore, return True or False """ if self._cs: return self._cs colorSchemeName = self.request.REQUEST.get('cs','DEFAULT') self.csid = csid = "cs:"+colorSchemeName cs = memcache.get(csid) if cs is not None: self._cs = cs else: if csid: cs = ColorScheme.get_by_key_name(csid) if cs: #logging.info('found colorScheme(%s)'%csid) #CHECK URL FOR BANGGROUND OPTIONS... background = self.request.REQUEST.get('transparentBackground') if background == 'OFF': cs.alphas = '' self._cs = cs if self.cl: if cs and cs.n==self.cl.n: pass else: N = min(self.cl.n-2,MAX_N) if csid[:9] == 'cs:random': rid = 'ts:%s&cl:%s&cs:%s'%(self.request.REQUEST.get('ts'),self.request.REQUEST.get('cl'),self.request.REQUEST.get('cs')) cs = memcache.get(rid) if not cs: cs = colors.random(N,borders=(60,60,60)) memcache.add(rid, cs) self._cs = cs return cs else: if self.cl.n == 3: cs = colors.ColorScheme([(0,0,1),(0,0,0)]+[(255,90,0)]*N) else: cs = colors.fade(self.cl.n-2) self._cs = cs if cs is not None: return cs else: return False