Пример #1
0
 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()
Пример #2
0
    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
Пример #3
0
 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)