def post_csv(self,bg=0,br=1): user = self.request.user POST = self.request.POST if 'dat' in POST: a = array.array(UNSIGNED_ITEM_TYPES[1]) dat = map(int,POST['dat'].split(',')) a.fromlist([bg,br]) a.fromlist(dat) astring = a.tostring() cl = Classification("%s:%s"%(user.username,hashlib.md5(astring).hexdigest())) cl.tileset = self.ts.key_name cl.dat = zlib.compress(astring) cl.N = len(a) assert (cl.N-2) == self.ts.numregions cl.n = max(a)+1 cl.owner = user.username cl.public = True cl.expires = False cl.date = time.mktime(time.gmtime()) return cl.put()
def parse_line(self, line): columns = line.split(self.HAZARDS_DELIMITER) # Check columns count if len(columns) != self.HAZARDS_COL_COUNT: self.error = 'Number of columns must be %d' % self.HAZARDS_COL_COUNT return False # Clean columns temp = [] for col in columns: temp.append(col.strip()) columns = temp # Check signal word if not HStatement.is_signal_word(columns[self.HAZARDS_COL_SIGNALWORD]): self.error = "'%s' is not a signal word!" % columns[ self.HAZARDS_COL_SIGNALWORD] return False pictogram_names = columns[self.HAZARDS_COL_PICTOGRAM].strip() for pic_name in pictogram_names.split(','): pic_name = pic_name.strip() image_name = pic_name + self.HAZARDS_PICTOGRAM_TYPE image = None try: image = self.zip_file.read(image_name) except KeyError: self.error = 'Did not find <b>%s</b> in zip-file.' % image_name return False else: # Parse Pictogram pic = Pictogram.load(pic_name, image) # Parse H-Statement hstatement = HStatement.load(columns[self.HAZARDS_COL_CODE]) hstatement.statement = columns[self.HAZARDS_COL_HSTATEMENT] hstatement.set_signal_word( columns[self.HAZARDS_COL_SIGNALWORD]) # Parse Class cls = Class.laod(columns[self.HAZARDS_COL_CLASS]) cls.pictogram = pic.key # Parse Category (can be a list) cats = self.parse_category(columns[self.HAZARDS_COL_CATEGORY]) if cats: for cat in cats: c = Classification(parent=CLASSIFICATION_KEY, clazz=cls.key, category=cat.key, hstatement=hstatement.key) c.put() cat.put() else: self.error = "Category '%s' could not be understood." % columns[ self.HAZARDS_COL_CATEGORY] return False # Store all the entities now where everything is fine pic.put() hstatement.put() cls.put() return True
def real_post(self): """ Handles /classify POST requests/ The POST data must contain "classifcation" and "ts" 'classification': a string of integers in the range >=2 and <=255. 0 and 1 are reserved for background and borders each integer represents the classID of a region, the order of the class ids MUST match the order of the IDS provided by the GET ?noform=1 handler. """ if self.ts: cl = self.request.REQUEST.get('classification') b64 = self.request.REQUEST.get('b64encode') if not cl: self.write("Bad Request") return self.die(400) try: if b64 == 'True': a = array.array('B') a.fromstring(b64decode(cl)) cl = a.tolist() else: cl = cl.strip().split(',') cl = map(int,cl) assert len(cl) == self.ts.idlen cl = [0,1]+cl a = array.array(UNSIGNED_ITEM_TYPES[1]) a.fromlist(cl) a = zlib.compress(a.tostring()) name = self.request.REQUEST.get('name') exp = False if not name: name = 'user_%s'%str(time()).replace('.','') exp = True if name: clid = 'cl:%s:%s'%(self.ts.name,name) memcache.delete(clid) C = Classification(key_name=clid) C.name = name C.expires = exp #else: # key_name = 'cs:%s:%s'%(self.ts.name,str(time()).replace('.','')) # C = Classification(key_name) C.tileset = self.ts.key() C.a = a C.N = len(cl)-2 C.n = max(cl)+1 title = self.request.REQUEST.get('title') if title: C.title = title notes = self.request.REQUEST.get('notes') if notes: C.notes = notes public = self.request.REQUEST.get('public') if public and public == 'False': C.public = False elif public: C.public = True try: key = C.put() except CapabilityDisabledError: logging.error("Capability has been disabled") self.dir(500) callback = self.request.REQUEST.get("callback") if name: if callback: self.write('%s({"key":"%s"})'%(callback,name)) else: self.write("Put: %s"%name) else: if callback: self.write('%s({"key":"%s"})'%(callback,key)) else: self.write("Put: key_%s"%key) except: raise else: self.die(400)