Beispiel #1
0
def next_shows():
    """Return the next planned show(s)

    Keyword arguments:
        - dj_id -- filter by dj
        - dj_name -- filter by dj
        - limit -- limit the output (default=5)
    """

    dj_id = request.args.get('dj_id', None)
    dj_name = request.args.get('dj_name', None)
    limit = request.args.get('limit', 5)

    clauses = []
    clauses.append(Show.begin > datetime.utcnow())
    try:
        if dj_id:
            clauses.append(UserShow.user == User.get_user(id=dj_id))
        if dj_name:
            clauses.append(UserShow.user == User.get_user(username=dj_name))

        result = Show.query.join(UserShow).filter(*clauses).order_by(
            Show.begin.asc()).limit(limit).all()

        data = {'next_shows': {'shows': []}}
        if result:
            for show in result:

                begin = show.begin.isoformat()
                end = show.end.isoformat()

                dj = []
                for usershow in show.users:
                    dj.append({
                        'dj_name': usershow.user.username,
                        'dj_id': usershow.user.user,
                        'status': usershow.status
                    })

                data['next_shows']['shows'].append({
                    'show_id': show.show,
                    'show_name': show.name,
                    'show_description': show.description,
                    'show_flags': show.flags,
                    'show_begin': begin,
                    'show_end': end,
                    'dj': dj
                })
        else:
            data = {'next_shows': None}
        return jsonify(wrapper(data))
    except UserNotFoundException:
        return jsonify(wrapper({'next_shows': None}))
Beispiel #2
0
def last_shows():
    """Return show history

    Keyword arguments:
        - dj_id -- filter by dj
        - dj_name -- filter by dj
        - limit -- limit the output (default=5)
    """

    dj_id = request.args.get("dj_id", None)
    dj_name = request.args.get("dj_name", None)
    limit = request.args.get("limit", 5)

    clauses = [Show.end < datetime.utcnow()]

    try:
        if dj_id:
            clauses.append(UserShow.user == User.get_user(id=dj_id))
        if dj_name:
            clauses.append(UserShow.user == User.get_user(username=dj_name))

        result = Show.query.join(UserShow).filter(*clauses).order_by(Show.begin.desc()).limit(limit).all()

        data = {"last_shows": {"shows": []}}
        if result:
            for show in result:

                begin = show.begin.isoformat()
                end = show.end.isoformat()

                dj = []
                for usershow in show.users:
                    dj.append(
                        {"dj_name": usershow.user.username, "dj_id": usershow.user.user, "status": usershow.status}
                    )

                data["last_shows"]["shows"].append(
                    {
                        "show_id": show.show,
                        "show_name": show.name,
                        "show_description": show.description,
                        "show_flags": show.flags,
                        "show_begin": begin,
                        "show_end": end,
                        "dj": dj,
                    }
                )
        else:
            data = {"last_shows": None}
        return jsonify(wrapper(data))
    except UserNotFoundException:
        return jsonify(wrapper({"last_shows": None}))
Beispiel #3
0
def next_shows():
    """Return the next planned show(s)

    Keyword arguments:
        - dj_id -- filter by dj
        - dj_name -- filter by dj
        - limit -- limit the output (default=5)
    """

    dj_id = request.args.get('dj_id', None)
    dj_name = request.args.get('dj_name', None)
    limit = request.args.get('limit', 5)

    clauses = []
    clauses.append(Show.begin > datetime.utcnow())
    try:
        if dj_id:
            clauses.append(UserShow.user == User.get_user(id=dj_id))
        if dj_name:
            clauses.append(UserShow.user == User.get_user(username=dj_name))

        result = Show.query.join(UserShow).filter(*clauses).order_by(Show.begin.asc()).limit(limit).all()

        data = {'next_shows': {'shows': []}}
        if result:
            for show in result:

                begin = show.begin.isoformat()
                end = show.end.isoformat()

                dj = []
                for usershow in show.users:
                    dj.append(
                        {'dj_name': usershow.user.username, 'dj_id': usershow.user.user, 'status': usershow.status})

                data['next_shows']['shows'].append({
                    'show_id': show.show,
                    'show_name': show.name,
                    'show_description': show.description,
                    'show_flags': show.flags,
                    'show_begin': begin,
                    'show_end': end,
                    'dj': dj
                })
        else:
            data = {'next_shows': None}
        return jsonify(wrapper(data))
    except UserNotFoundException:
        return jsonify(wrapper({'next_shows': None}))
Beispiel #4
0
def dj():
    """Returns complete dj information

    Keyword arguments:
        - dj_id -- database id of the requested dj
        - dj_name -- nickname of the requested dj

    Returns:
        {'dj': {'dj_id': x, 'dj_name': x }}

    At least one argument is required
    """

    dj_id = request.args.get('dj_id', None)
    dj_name = request.args.get('dj_name', None)

    try:
        user = User.get_user(id=dj_id, username=dj_name)
        return jsonify(
            wrapper({'dj': {
                'dj_id': user.user,
                'dj_name': user.username
            }}))
    except rexc.base.UserNotFoundException:
        return jsonify(wrapper({'dj': None}))
    except AssertionError:
        return jsonify(wrapper(None, 400, 'missing required query parameter'))
Beispiel #5
0
def doMetaData(data):
    logger.debug('meta %s' % (json.dumps(data),))
    if 'userid' not in data or data['userid'] == 'none':
        print 'no userid'
        return
    user = User.get_user(id=data['userid'])
    if user == None:
        print 'user not found'
        return

    if 'artist' in data:
        artist = data['artist'].strip()
    else:
        artist = None

    if 'title' in data:
        title = data['title'].strip()
    else:
        title = None

    if 'song' in data:
        song = data['song'].split(' - ', 1)
        if (artist is None) or (len(artist) == 0):
            artist = song[0]
        if (title is None) or (len(title) == 0):
            title = song[1]
    show = init_show(user)
    if artist is None and title is None:
        track = Track.current_track()
        if track:
            track.end_track()
    else:
        track = Track.new_track(show, artist, title)
    rfk.database.session.commit()
Beispiel #6
0
def login():
    form = login_form(request.form)
    if request.method == 'POST' and form.validate():
        username = form.username.data
        try:
            user = User.get_user(username=username)
            if user and user.check_password(password=form.password.data):
                user.authenticated = True
                remember = form.remember.data
                if login_user(user, remember=remember):
                    user.last_login = now()
                    loc = rfk.helper.get_location(request.remote_addr)
                    if 'country_code' in loc and loc[
                            'country_code'] is not None:
                        user.country = loc['country_code']
                    rfk.database.session.commit()
                    flash('Logged in!', 'success')
                    return redirect(
                        request.args.get('next') or url_for('index'))
                else:
                    form.username.errors.append(
                        'There was an error while logging you in.')
                    flash('There was an error while logging you in.', 'error')
            else:
                form.username.errors.append('Invalid User or Password.')
                flash('Invalid username or password.')
        except UserNotFoundException:
            form.username.errors.append('Invalid User or Password.')
            flash('Invalid username or password.')
    return render_template('login.html', form=form, TITLE='Login')
Beispiel #7
0
def liquidsoap_disconnect():
    """Handles a client disconnect from liquidsoap

    """

    userid = request.get_json()

    logger.info('liquidsoap_disconnect: diconnect for userid %s' % (userid,))
    if userid == 'none' or userid == '':
        logger.warn('liquidsoap_disconnect: no userid supplied!')
        session.commit()
        return 'Whooops no userid?'
    user = User.get_user(id=int(userid))
    if user:
        usershows = UserShow.query.filter(UserShow.user == user,
                                          UserShow.status == UserShow.STATUS.STREAMING).all()
        for usershow in usershows:
            usershow.status = UserShow.STATUS.STREAMED
            if usershow.show.flags & Show.FLAGS.UNPLANNED:
                usershow.show.end_show()
        session.commit()
        track = Track.current_track()
        if track:
            track.end_track()
        session.commit()
        return 'true'
    else:
        return 'no user found'
Beispiel #8
0
def login():
    form = login_form(request.form)
    if request.method == 'POST' and form.validate():
        username = form.username.data
        try:
            user = User.get_user(username=username)
            if user and user.check_password(password=form.password.data):
                user.authenticated = True
                remember = form.remember.data
                if login_user(user, remember=remember):
                    if not user.last_login:
                        flash(gettext('<strong>Tip:</strong> It appears that this is your first login, if you need any help please visit our help section by clicking <a href="/help">here</a>.'), 'info')
                    user.last_login = now()
                    loc = rfk.helper.get_location(request.remote_addr)
                    if 'country_code' in loc and loc['country_code'] is not None:
                        user.country = loc['country_code']
                    rfk.database.session.commit()
                    flash(gettext('Login successful. Welcome %s!' % user.username), 'success')
                    return redirect(request.args.get('next') or url_for('index'))
                else:
                    form.username.errors.append(gettext('There was an error while logging you in.'))
                    #flash('There was an error while logging you in.', 'error')
            else:
                form.username.errors.append(gettext('Invalid User or Password.'))
                #flash('Invalid username or password.')
        except UserNotFoundException:
            form.username.errors.append(gettext('Invalid User or Password.'))
            #flash('Invalid username or password.')
    return render_template('login.html', form=form, TITLE='Login')
Beispiel #9
0
def login():
    form = login_form(request.form)
    if request.method == 'POST' and form.validate():
        username = form.username.data
        try:
            user = User.get_user(username=username)
            if user and user.check_password(password=form.password.data):
                user.authenticated = True
                remember = form.remember.data
                if login_user(user, remember=remember):
                    user.last_login = now()
                    loc = rfk.helper.get_location(request.remote_addr)
                    if 'country_code' in loc and loc['country_code'] is not None:
                        user.country = loc['country_code']
                    rfk.database.session.commit()
                    flash('Logged in!', 'success')
                    return redirect(request.args.get('next') or url_for('index'))
                else:
                    form.username.errors.append('There was an error while logging you in.')
                    flash('There was an error while logging you in.', 'error')
            else:
                form.username.errors.append('Invalid User or Password.')
                flash('Invalid username or password.')
        except UserNotFoundException:
            form.username.errors.append('Invalid User or Password.')
            flash('Invalid username or password.')
    return render_template('login.html', form=form, TITLE='Login')
Beispiel #10
0
def doDisconnect(userid):
    logger.info('doDisconnect: diconnect for userid %s' % (userid, ))
    if userid == "none" or userid == '':
        print "Whooops no userid?"
        logger.warn('doDisconnect: no userid supplied!')
        rfk.database.session.commit()
        return
    user = User.get_user(id=int(userid))
    if user:
        usershows = UserShow.query.filter(
            UserShow.user == user,
            UserShow.status == UserShow.STATUS.STREAMING).all()
        for usershow in usershows:
            usershow.status = UserShow.STATUS.STREAMED
            if usershow.show.flags & Show.FLAGS.UNPLANNED:
                usershow.show.end_show()
        rfk.database.session.commit()
        track = Track.current_track()
        if track:
            track.end_track()
            publish.track_change()
        publish.show_change()
        rfk.database.session.commit()
    else:
        print "no user found"
Beispiel #11
0
def last_tracks():
    """Return the last played tracks

    Keyword arguments:
        - dj_id -- filter by dj
        - dj_name -- filter by dj
        - limit -- limit the output (default=5)
    """

    dj_id = request.args.get('dj_id', None)
    dj_name = request.args.get('dj_name', None)
    limit = int(request.args.get('limit', 5))
    limit = limit if limit <= 50 else 50

    clauses = []
    clauses.append(Track.end < datetime.utcnow())

    if dj_id is not None:
        clauses.append(UserShow.user == User.get_user(id=dj_id))
    if dj_name is not None:
        clauses.append(UserShow.user == User.get_user(username=dj_name))

    result = Track.query.join(Show).join(UserShow).filter(*clauses).order_by(
        Track.end.desc()).limit(limit).all()

    data = {'last_tracks': {'tracks': []}}
    if result:
        for track in result:
            begin = track.begin.isoformat()
            end = track.end.isoformat()

            data['last_tracks']['tracks'].append({
                'track_id':
                track.track,
                'track_begin':
                begin,
                'track_end':
                end,
                'track_title':
                track.title.name,
                'track_artist':
                track.title.artist.name
            })
    else:
        data = {'last_tracks': None}
    return jsonify(wrapper(data))
Beispiel #12
0
def copy_users():
    streamer = oldsession.query(Streamer).yield_per(50)

    for olduser in streamer:
        print olduser.username
        if User.get_user(olduser.username) is None:
            user = User.add_user(olduser.username, olduser.password)
            rfk.database.session.add(user)
            rfk.database.session.flush()
    rfk.database.session.commit()
Beispiel #13
0
def copy_users():
    streamer = oldsession.query(Streamer).yield_per(50)
    
    for olduser in streamer:
        print olduser.username
        if User.get_user(olduser.username) is None:
            user = User.add_user(olduser.username, olduser.password)
            rfk.database.session.add(user)
            rfk.database.session.flush()
    rfk.database.session.commit()
Beispiel #14
0
def last_tracks():
    """Return the last played tracks
    
    Keyword arguments:
        dj_id -- filter by dj
        dj_name -- filter by dj
        limit -- limit the output (default=5)
    """
    
    dj_id = request.args.get('dj_id', None)
    dj_name = request.args.get('dj_name', None)
    limit = request.args.get('limit', 5)
    limit = limit if limit <= 50 else 50
    
    clauses = []
    clauses.append(Track.end < datetime.utcnow())
    
    if dj_id is not None:
        clauses.append(UserShow.user == User.get_user(id=dj_id))
    if dj_name is not None:
        clauses.append(UserShow.user == User.get_user(username=dj_name))
        
    result = Track.query.filter(*clauses).order_by(Track.end.desc()).limit(limit).all()
    
    data = {'last_tracks': {'tracks': []}}
    if result:
        for track in result:
            
            begin = track.begin.isoformat()
            end = track.end.isoformat()
            
            data['last_tracks']['tracks'].append({
                'track_id': track.track,
                'track_begin': begin,
                'track_end': end,
                'track_title': track.title.name,
                'track_artist': track.title.artist.name
            })
    else:
        data = {'last_tracks': None}
    return jsonify(wrapper(data))
Beispiel #15
0
def last_tracks():
    """Return the last played tracks

    Keyword arguments:
        - dj_id -- filter by dj
        - dj_name -- filter by dj
        - limit -- limit the output (default=5)
    """

    dj_id = request.args.get("dj_id", None)
    dj_name = request.args.get("dj_name", None)
    limit = int(request.args.get("limit", 5))
    limit = limit if limit <= 50 else 50

    clauses = [Track.end < datetime.utcnow()]

    if dj_id is not None:
        clauses.append(UserShow.user == User.get_user(id=dj_id))
    if dj_name is not None:
        clauses.append(UserShow.user == User.get_user(username=dj_name))

    result = Track.query.join(Show).join(UserShow).filter(*clauses).order_by(Track.end.desc()).limit(limit).all()

    data = {"last_tracks": {"tracks": []}}
    if result:
        for track in result:
            begin = track.begin.isoformat()
            end = track.end.isoformat()

            data["last_tracks"]["tracks"].append(
                {
                    "track_id": track.track,
                    "track_begin": begin,
                    "track_end": end,
                    "track_title": track.title.name,
                    "track_artist": track.title.artist.name,
                }
            )
    else:
        data = {"last_tracks": None}
    return jsonify(wrapper(data))
Beispiel #16
0
def check():
    ret = {}
    try:
        if User.get_user(username=request.form['username']) == None:
            ret['username'] = '******'
        else:
            ret['username'] = '******'
    except KeyError:
        pass
    response = jsonify(ret)
    response.status_code = 200
    return response
Beispiel #17
0
def info(user):
    user = User.get_user(username=user)

    upcoming_shows = Show.query.join(UserShow).filter(UserShow.user == user, Show.begin >= now()).order_by(
        Show.begin.asc()).limit(5).all()
    last_shows = Show.query.join(UserShow).filter(UserShow.user == user, Show.end <= now()).order_by(
        Show.end.desc()).limit(5).all()
    if user:
        ball = iso_country_to_countryball(user.country)
        return render_template('user/info.html',
                               username=user.username,
                               ball=ball,
                               st=user.get_total_streamtime(),
                               shows={'upcoming': upcoming_shows, 'last': last_shows})
    else:
        abort(404)
Beispiel #18
0
def info(user):
    try:
        user = User.get_user(username=user)
    except rfk.exc.base.UserNotFoundException:
        abort(404)

    # checking user rank
    if user.has_permission('admin'):
        rank = gettext('Admin')
    else:
        rank = gettext('User')

    # count planned and unplanned shows
    planned_shows = Show.query.join(UserShow).filter(
        UserShow.user == user, Show.flags == Show.FLAGS.PLANNED).count()
    unplanned_shows = Show.query.join(UserShow).filter(
        UserShow.user == user, Show.flags == Show.FLAGS.UNPLANNED).count()
    total_shows = planned_shows + unplanned_shows

    # list upcoming and recent shows
    upcoming_shows = Show.query.join(UserShow).filter(
        UserShow.user == user,
        Show.begin >= now()).order_by(Show.begin.asc()).limit(5).all()
    last_shows = Show.query.join(UserShow).filter(
        UserShow.user == user,
        Show.end <= now()).order_by(Show.end.desc()).limit(5).all()

    stats = {}
    for us in UserStatistic.query.filter(UserStatistic.user == user).all():
        stats[us.code] = us.statistic.current_value().value

    return render_template('user/info.html',
                           TITLE=user.username,
                           user=user,
                           rank=rank,
                           planned_shows=planned_shows,
                           unplanned_shows=unplanned_shows,
                           total_shows=total_shows,
                           st=user.get_total_streamtime(),
                           shows={
                               'upcoming': upcoming_shows,
                               'last': last_shows
                           },
                           stats=stats)
Beispiel #19
0
def liquidsoap_meta_data():
    """Handles track changes

    Returns error message if something suspicious happens
    Returns 'true' when everything worked like expected
    """

    data = request.get_json()
    logger.debug('liquidsoap_meta_data: %s' % (json.dumps(data),))
    if 'userid' not in data or data['userid'] == 'none':
        session.commit()
        return 'no userid'
    user = User.get_user(id=data['userid'])
    if user is None:
        session.commit()
        return 'user not found'

    if 'artist' in data:
        artist = data['artist'].strip()
    else:
        artist = None

    if 'title' in data:
        title = data['title'].strip()
    else:
        title = None

    if 'song' in data:
        song = data['song'].split(' - ', 1)
        if (artist is None) or (len(artist) == 0):
            artist = song[0]
        if (title is None) or (len(title) == 0):
            title = song[1]

    show = init_show(user)
    if artist is None and title is None:
        track = Track.current_track()
        if track:
            track.end_track()
    else:
        track = Track.new_track(show, artist, title)

    session.commit()
    return 'true'
Beispiel #20
0
def doMetaData(data):
    logger.debug('meta %s' % (json.dumps(data),))
    if 'userid' not in data or data['userid'] == 'none':
        print 'no userid'
        return
    user = User.get_user(id=data['userid'])
    if user == None:
        print 'user not found'
        return
    artist = data['artist'] or ''
    title = data['title'] or ''
    if 'song' in data:
        song = data['song'].split(' - ', 1)
        if ('artist' not in data) or (len(data['artist'].strip()) == 0):
            artist = song[0]
        if ('title' not in data) or (len(data['title'].strip()) == 0):
            title = song[1]
    show = init_show(user)
    track = Track.new_track(show, artist, title)
    rfk.database.session.commit()
Beispiel #21
0
def copy_shows():
    local = pytz.timezone('Europe/Berlin')
    shows = oldsession.query(Show).yield_per(50)
    for oldshow in shows:
        if oldshow.streamer != None:
            user = User.get_user(username=oldshow.streamer.username)
            if oldshow.type == 'UNPLANNED':
                flag = NShow.FLAGS.UNPLANNED
            elif oldshow.type == 'PLANNED':
                flag = NShow.FLAGS.PLANNED
            show = NShow(name=oldshow.name[:50],
                        description=oldshow.description,
                        flags=flag,
                        begin=local.normalize(local.localize(oldshow.begin).astimezone(pytz.utc)),
                        end=local.normalize(local.localize(oldshow.end).astimezone(pytz.utc)))
            rfk.database.session.add(show)
            rfk.database.session.flush()
            show.add_user(user)
            rfk.database.session.flush()
            rfk.database.session.commit()
Beispiel #22
0
def dj():
    """Return complete dj information
    
    Keyword arguments:
        dj_id -- database id of the requested dj
        dj_name -- nickname of the requested dj
    
    At least one argument is required
    """
    
    dj_id = request.args.get('dj_id', None)
    dj_name = request.args.get('dj_name', None)
    try:
        user = User.get_user(id=dj_id, username=dj_name)
        return jsonify(wrapper({'dj': {'dj_id': user.user,
                                       'dj_name': user.username }}))
    except rexc.base.UserNotFoundException:
        return jsonify(wrapper({'dj': None}))
    except AssertionError:
        return jsonify(wrapper(None, 400, 'missing required query parameter'))
Beispiel #23
0
def doDisconnect(userid):
    logger.info('doDisconnect: diconnect for userid %s' % (userid,))
    if userid == "none" or userid == '':
        print "Whooops no userid?"
        logger.warn('doDisconnect: no userid supplied!')
        rfk.database.session.commit()
        return
    user = User.get_user(id=int(userid))
    if user:
        usershows = UserShow.query.filter(UserShow.user == user,
                                          UserShow.status == UserShow.STATUS.STREAMING).all()
        for usershow in usershows:
            usershow.status = UserShow.STATUS.STREAMED
            if usershow.show.flags & Show.FLAGS.UNPLANNED:
                usershow.show.end_show()
        rfk.database.session.commit()
        track = Track.current_track()
        if track:
            track.end_track()
        rfk.database.session.commit()
    else:
        print "no user found"
Beispiel #24
0
def login():
    form = login_form(request.form)
    if request.method == 'POST' and form.validate():
        username = form.username.data
        try:
            user = User.get_user(username=username)
            if user and user.check_password(password=form.password.data):
                user.authenticated = True
                remember = form.remember.data
                if login_user(user, remember=remember):
                    if not user.last_login:
                        flash(
                            gettext(
                                '<strong>Tip:</strong> It appears that this is your first login, if you need any help please visit our help section by clicking <a href="/help">here</a>.'
                            ), 'info')
                    user.last_login = now()
                    loc = rfk.helper.get_location(request.remote_addr)
                    if 'country_code' in loc and loc[
                            'country_code'] is not None:
                        user.country = loc['country_code']
                    rfk.database.session.commit()
                    flash(
                        gettext('Login successful. Welcome %s!' %
                                user.username), 'success')
                    return redirect(
                        request.args.get('next') or url_for('index'))
                else:
                    form.username.errors.append(
                        gettext('There was an error while logging you in.'))
                    #flash('There was an error while logging you in.', 'error')
            else:
                form.username.errors.append(
                    gettext('Invalid User or Password.'))
                #flash('Invalid username or password.')
        except UserNotFoundException:
            form.username.errors.append(gettext('Invalid User or Password.'))
            #flash('Invalid username or password.')
    return render_template('login.html', form=form, TITLE=gettext('Login'))
Beispiel #25
0
def copy_shows():
    local = pytz.timezone('Europe/Berlin')
    shows = oldsession.query(Show).yield_per(50)
    for oldshow in shows:
        if oldshow.streamer != None:
            user = User.get_user(username=oldshow.streamer.username)
            if oldshow.type == 'UNPLANNED':
                flag = NShow.FLAGS.UNPLANNED
            elif oldshow.type == 'PLANNED':
                flag = NShow.FLAGS.PLANNED
            show = NShow(name=oldshow.name[:50],
                         description=oldshow.description,
                         flags=flag,
                         begin=local.normalize(
                             local.localize(oldshow.begin).astimezone(
                                 pytz.utc)),
                         end=local.normalize(
                             local.localize(oldshow.end).astimezone(pytz.utc)))
            rfk.database.session.add(show)
            rfk.database.session.flush()
            show.add_user(user)
            rfk.database.session.flush()
            rfk.database.session.commit()
Beispiel #26
0
def finish():
    ret = {'success': False}
    try:
        if not User.check_username(request.form['username']):
            ret['username'] = '******'
        elif len(request.form['password']) == 0:
            ret['password'] = '******'
        elif len(request.form['stream_password']) == 0:
            ret['stream_password'] = '******'
        elif User.get_user(username=request.form['username']) == None:
            ret['success'] = True
            user = User(request.form['username'],
                        User.make_password(request.form['password']),
                        User.make_password(request.form['stream_password']))
            session.add(user)
            session.commit()
        else:
            ret['username'] = '******'
    except KeyError:
        pass
    response = jsonify(ret)
    response.status_code = 200
    return response
Beispiel #27
0
def info(user):
    try:
        user = User.get_user(username=user)
    except rfk.exc.base.UserNotFoundException:
        abort(404)

    # checking user rank
    if user.has_permission('admin'):
        rank = 'Admin'
    else:
        rank = 'User'

    # count planned and unplanned shows
    planned_shows = Show.query.join(UserShow).filter(UserShow.user == user, Show.flags == Show.FLAGS.PLANNED).count()
    unplanned_shows = Show.query.join(UserShow).filter(UserShow.user == user, Show.flags == Show.FLAGS.UNPLANNED).count()
    total_shows = planned_shows + unplanned_shows

    # list upcoming and recent shows
    upcoming_shows = Show.query.join(UserShow).filter(UserShow.user == user, Show.begin >= now()).order_by(
        Show.begin.asc()).limit(5).all()
    last_shows = Show.query.join(UserShow).filter(UserShow.user == user, Show.end <= now()).order_by(
        Show.end.desc()).limit(5).all()

    stats = {}
    for us in UserStatistic.query.filter(UserStatistic.user == user).all():
        stats[us.code] = us.statistic.current_value().value

    return render_template('user/info.html', TITLE=user.username,
                           user=user,
                           rank=rank,
                           planned_shows=planned_shows,
                           unplanned_shows=unplanned_shows,
                           total_shows=total_shows,
                           st=user.get_total_streamtime(),
                           shows={'upcoming': upcoming_shows, 'last': last_shows},
                           stats=stats)
Beispiel #28
0
def login():
    form = login_form(request.form)
    if request.method == "POST" and form.validate():
        username = form.username.data
        try:
            user = User.get_user(username=username)
            if user and user.check_password(password=form.password.data):
                user.authenticated = True
                remember = form.remember.data
                if login_user(user, remember=remember):
                    user.last_login = now()
                    session.commit()
                    flash("Logged in!")
                    return redirect(request.args.get("next") or url_for("index"))
                else:
                    form.username.errors.append('There was an error while logging you in.')
                    flash("Sorry, but you could not log in.")
            else:
                form.username.errors.append('Invalid User or Password.')
                flash(u"Invalid username or password.")
        except UserNotFoundException:
            form.username.errors.append('Invalid User or Password.')
            flash(u"Invalid username or password.")
    return render_template("login.html", form=form)
Beispiel #29
0
def load_user(userid):
    return User.get_user(id=int(userid))
Beispiel #30
0
def load_user(userid):
    return User.get_user(id=int(userid))