예제 #1
0
 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)
예제 #2
0
파일: views.py 프로젝트: GeoDaSandbox/DynTM
 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()})
예제 #3
0
파일: views.py 프로젝트: GeoDaSandbox/DynTM
 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
예제 #4
0
 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")
예제 #5
0
파일: views.py 프로젝트: GeoDaSandbox/DynTM
 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)})
예제 #6
0
 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