Пример #1
0
def _get_events(type_events, fetch_function, filter_function, page=1):
    user_id = unicode('all_public')
    if 'indico_user' in flask_session:
        if flask_session['indico_user']:
            user_id = flask_session['indico_user']
    now = datetime.utcnow()
    events = _get_cached_events(user_id, type_events, now, page)
    if not events:
        offset = db_event.get_last_offset_cached(user_id, type_events)
        while len(events) < PAGE_SIZE:
            appended = 0
            results = fetch_function(user_id, offset, PAGE_SIZE * 2)
            if not results:
                break
            for event in results:
                if filter_function(event, now):
                    events.append(event)
                    db_event.store_cached_event(user_id,type_events, now, event)
                    appended += 1
                if len(events) == PAGE_SIZE:
                    break
            if len(events) ==  PAGE_SIZE:
                break
            offset += PAGE_SIZE * 2
        db_event.remove_last_offset_cached(user_id, type_events)
        db_event.store_last_offset_cached(user_id, type_events, offset + appended)

    return events
Пример #2
0
def _get_cached_events(user_id, type_events, now, page):
    cached_events = list(db_event.get_cached_events(user_id, type_events, page, PAGE_SIZE))
    if cached_events:
        if now - cached_events[0]['timestamp'] < timedelta(hours=2):
            return [event["event"] for event in cached_events]
        db_event.remove_cached_events(user_id, type_events)
        db_event.remove_last_offset_cached(user_id, type_events)
    return []