예제 #1
0
 def load(name):
     key = Role.KEY_STRING % name
     if redis.exists(key):
         r = Role(**{'name': name, 'description': redis.get(key)})
         r._is_new = False
         return r
     else:
         return None
예제 #2
0
 def save(self):
     if self._is_new and redis.exists(self.key):
         print "Save failed. Key '%s' exists." % self.key
         return False
     else:
         redis.set(
             self.key, 
             json.dumps({'name':self.name,'description':self.description})
         )
         self._is_new = False
         return True
예제 #3
0
 def save(self):
     if self._is_new and redis.exists(self.key):
         print "Save failed. Key '%s' exists." % self.key
         return False
     else:
         redis.hset(
             self.key, 
             "num_of_channels", self.num_of_channels
         )
         redis.sadd(self.INDEX_KEY, self.card_id)
         self._is_new = False
         return True
예제 #4
0
    def find_by_timestamp(start, end, sort_len = False, page = 0, min_len = 0,
            channel = -1):

        if(page > 0):
            start_limit = app.config['RECORDS_PER_PAGE'] * (page - 1)
        else:
            start_limit = 0

        #Search key : recording:tmp:search:<ch_id>:<min_len>:<start>:<end>
        search_key = "recording:tmp:search:%s:%s:%s:%s" % (int(channel),
                                                       int(min_len), 
                                                       int(start), 
                                                       int(end))
        if not redis.exists(search_key):
            recordings = redis.zrangebyscore(Recording.TIMESTAMPS_KEY, start, end)
            #filter recordings by lenght and channel_id
            if(min_len > 0 or channel >= 0):
                recordings_filtered = []
                for r_id in recordings:
                    recording = Recording.load(r_id)
                    if(min_len > recording.duration):
                        continue;
                    if(channel >= 0 and channel != recording.channel_id):
                        continue;
                    recordings_filtered.append(r_id)
                recordings = recordings_filtered

            pipe = redis.pipeline()
            map(lambda r: pipe.sadd(search_key, r), recordings)
            pipe.execute()

        #Set expiration time
        redis.expire(search_key, 3600);

        if(sort_len):
            #Return all records
            recordings = redis.sort(search_key, 
                                    None, 
                                    None, 
                                    "recording:*->duration",
                                    None,
                                    True) 
        else:
            recordings = redis.smembers(search_key)

        lenght = len(recordings)

        if(page > 0):
            recordings = recordings[start_limit :
                                    start_limit + app.config['RECORDS_PER_PAGE']]

        return (map(lambda r_id: Recording.load(r_id), recordings), lenght)
예제 #5
0
 def save(self):
     if self._is_new and redis.exists(self.key):
         print "Save failed. Key '%s' exists." % self.key
         return False
     else:
         with redis.pipeline() as pipe:
             try:
                 pipe.set(self.key, self.description)
                 pipe.sadd(self.INDEX_KEY, self.name)
                 pipe.execute()
                 return True
             except ValueError, KeyError:
                 return False
예제 #6
0
 def save(self):
     if self._is_new and redis.exists(self.key):
         print "Save failed. Key '%s' exists." % self.key
         return False
     else:
         with redis.pipeline() as pipe:
             try:
                 pipe.hset(
                     self.key, 
                     "password", self.password
                 )
                 pipe.delete(self.roles_key)
                 for role in self.roles:
                     pipe.sadd(self.roles_key, role)
                 pipe.sadd(self.INDEX_KEY, self.email)
                 self._is_new = False
                 pipe.execute()
                 return True
             except ValueError, KeyError:
                 return False