コード例 #1
0
ファイル: models.py プロジェクト: rwnbt/recorder-web
 def load(email):
     u_db = redis.hgetall(User.KEY_STRING % email)
     if len(u_db): 
         u_db['roles'] = redis.smembers(User.ROLES_KEY % email)
         u = User(**u_db)
         u._is_new = False 
         u._email = email 
         u._password = u_db.get('password') 
         return u 
     else:
         return None
コード例 #2
0
ファイル: models.py プロジェクト: rwnbt/recorder-web
    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)
コード例 #3
0
ファイル: models.py プロジェクト: rwnbt/recorder-web
 def all(load = True):
     if load:
         return map(lambda name: Role.load(name), Role.all(False))
     else:
         return redis.smembers(Role.INDEX_KEY)
コード例 #4
0
ファイル: models.py プロジェクト: rwnbt/recorder-web
 def all(load = True):
     if load:
         return map(lambda cid: Card.load(cid), Card.all(False))
     else:
         return redis.smembers(Card.INDEX_KEY)
コード例 #5
0
ファイル: models.py プロジェクト: rwnbt/recorder-web
 def all(load = True):
     if load:
         return map(lambda email: User.load(email), User.all(False))
     else:
         return redis.smembers(User.INDEX_KEY)