Beispiel #1
0
def new_application():
    user = require_user()
    errors = []
    title = 'New Application'
    if request.form.get('submit'):
        name = request.form.get('name')
        if not name:
            errors.append('Missing application name')
        version = request.form.get('version')
        if not version:
            errors.append('Missing version number')
        email = request.form.get('email')
        if not email:
            errors.append('Missing email address')
        if email and not is_valid_email(email):
            errors.append('Invalid email address')
        website = request.form.get('website')
        if website and not is_valid_url(website):
            errors.append('Invalid website URL')
        if not errors:
            insert_application(db.session.connection(), {
                'name': name,
                'version': version,
                'email': email,
                'website': website,
                'account_id': user.id,
            })
            db.session.commit()
            return redirect(url_for('.applications'))
    return render_template('new-application.html', title=title,
        form=request.form, errors=errors)
Beispiel #2
0
def new_application():
    user = require_user()
    errors = []
    title = 'New Application'
    if request.form.get('submit'):
        name = request.form.get('name')
        if not name:
            errors.append('Missing application name')
        version = request.form.get('version')
        if not version:
            errors.append('Missing version number')
        email = request.form.get('email')
        if email and not is_valid_email(email):
            errors.append('Invalid email address')
        website = request.form.get('website')
        if website and not is_valid_url(website):
            errors.append('Invalid website URL')
        if not errors:
            insert_application(db.session.connection(), {
                'name': name,
                'version': version,
                'email': email,
                'website': website,
                'account_id': user.id,
            })
            db.session.commit()
            return redirect(url_for('.applications'))
    return render_template('new-application.html', title=title,
        form=request.form, errors=errors)
Beispiel #3
0
def application(application_id):
    user = require_user()
    title = 'Your Application'
    conn = db.session.connection()
    application = conn.execute("""
        SELECT * FROM application
        WHERE id = %s
    """, (application_id,)).fetchone()
    if application is None:
        abort(404)
    if user.id != application['account_id'] and not user.is_admin:
        abort(404)
    monthly_stats = conn.execute("""
        SELECT
            date_trunc('month', date) AS month,
            sum(count_hits) + sum(count_nohits) AS lookups
        FROM stats_lookups
        WHERE application_id = %s
        GROUP BY date_trunc('month', date)
        ORDER BY date_trunc('month', date) DESC
    """, (application_id,)).fetchall()
    lookups = find_application_lookup_stats(conn, application_id)
    return render_template('application.html', title=title,
        app=application, monthly_stats=monthly_stats,
        lookups=lookups,
        lookups_json=json.dumps(prepare_chart_data(lookups)))
Beispiel #4
0
def application(application_id):
    user = require_user()
    title = 'Your Application'
    conn = db.session.connection()
    application = conn.execute("""
        SELECT * FROM application
        WHERE id = %s
    """, (application_id,)).fetchone()
    if application is None:
        abort(404)
    if user.id != application['account_id'] and not user.is_admin:
        abort(404)
    monthly_stats = conn.execute("""
        SELECT
            date_trunc('month', date) AS month,
            sum(count_hits) + sum(count_nohits) AS lookups
        FROM stats_lookups
        WHERE application_id = %s
        GROUP BY date_trunc('month', date)
        ORDER BY date_trunc('month', date) DESC
    """, (application_id,)).fetchall()
    lookups = find_application_lookup_stats(conn, application_id)
    return render_template('application.html', title=title,
        app=application, monthly_stats=monthly_stats,
        lookups=lookups,
        lookups_json=json.dumps(prepare_chart_data(lookups)))
Beispiel #5
0
def applications():
    user = require_user()
    title = 'Your Applications'
    applications = find_applications_by_account(db.session.connection(),
                                                user.id)
    return render_template('applications.html',
                           title=title,
                           applications=applications)
Beispiel #6
0
def toggle_track_mbid():
    fingerprint_db = db.get_fingerprint_db()
    ingest_db = db.get_ingest_db()
    app_db = db.get_app_db()
    user = require_user()
    track_id = request.values.get('track_id', type=int)
    if track_id:
        query = sql.select([schema.track.c.gid], schema.track.c.id == track_id)
        track_gid = fingerprint_db.execute(query).scalar()
    else:
        track_gid = request.values.get('track_gid')
        track_id = resolve_track_gid(fingerprint_db, track_gid)
    state = bool(request.values.get('state', type=int))
    mbid = request.values.get('mbid')
    if not track_id or not mbid or not track_gid:
        return redirect(url_for('general.index'))
    if not is_moderator(app_db, user.id):
        title = 'MusicBrainz account required'
        return render_template('toggle_track_mbid_login.html', title=title)
    query = sql.select([schema.track_mbid.c.id, schema.track_mbid.c.disabled],
                       sql.and_(schema.track_mbid.c.track_id == track_id,
                                schema.track_mbid.c.mbid == mbid))
    rows = fingerprint_db.execute(query).fetchall()
    if not rows:
        return redirect(url_for('general.index'))
    id, current_state = rows[0]
    if state == current_state:
        return redirect(url_for('.track', track_id_or_gid=track_id))
    if request.form.get('submit'):
        note = request.values.get('note')
        update_stmt = schema.track_mbid.update().where(
            schema.track_mbid.c.id == id).values(disabled=state)
        fingerprint_db.execute(update_stmt)
        insert_stmt = schema.track_mbid_change.insert().values(
            track_mbid_id=id,
            account_id=session['id'],
            disabled=state,
            note=note)
        ingest_db.execute(insert_stmt)
        db.session.commit()
        return redirect(url_for('.track', track_id_or_gid=track_id))
    if state:
        title = 'Unlink MBID'
    else:
        title = 'Link MBID'
    return render_template('toggle_track_mbid.html',
                           title=title,
                           track_gid=track_gid,
                           mbid=mbid,
                           state=state,
                           track_id=track_id)
Beispiel #7
0
def edit_application(application_id):
    user = require_user()
    conn = db.session.connection()
    application = conn.execute(
        """
        SELECT * FROM application
        WHERE id = %s
    """, (application_id, )).fetchone()
    if application is None:
        abort(404)
    if user.id != application['account_id']:
        abort(404)
    errors = []
    title = 'Edit Application'
    if request.form.get('submit'):
        form = request.form
        name = request.form.get('name')
        if not name:
            errors.append('Missing application name')
        version = request.form.get('version')
        if not version:
            errors.append('Missing version number')
        email = request.form.get('email')
        if email and not is_valid_email(email):
            errors.append('Invalid email address')
        website = request.form.get('website')
        if website and not is_valid_url(website):
            errors.append('Invalid website URL')
        if not errors:
            update_application(
                conn, application.id, {
                    'name': name,
                    'version': version,
                    'email': email,
                    'website': website,
                    'account_id': user.id,
                })
            db.session.commit()
            return redirect(
                url_for('.application', application_id=application.id))
    else:
        form = {}
        form['name'] = application['name']
        form['version'] = application['version'] or ''
        form['email'] = application['email'] or ''
        form['website'] = application['website'] or ''
    return render_template('edit-application.html',
                           title=title,
                           form=form,
                           errors=errors,
                           app=application)
Beispiel #8
0
def edit_application(application_id):
    user = require_user()
    conn = db.session.connection()
    application = conn.execute("""
        SELECT * FROM application
        WHERE id = %s
    """, (application_id,)).fetchone()
    if application is None:
        abort(404)
    if user.id != application['account_id']:
        abort(404)
    errors = []
    title = 'Edit Applications'
    if request.form.get('submit'):
        form = request.form
        name = request.form.get('name')
        if not name:
            errors.append('Missing application name')
        version = request.form.get('version')
        if not version:
            errors.append('Missing version number')
        email = request.form.get('email')
        if email and not is_valid_email(email):
            errors.append('Invalid email address')
        website = request.form.get('website')
        if website and not is_valid_url(website):
            errors.append('Invalid website URL')
        if not errors:
            update_application(conn, application.id, {
                'name': name,
                'version': version,
                'email': email,
                'website': website,
                'account_id': user.id,
            })
            db.session.commit()
            return redirect(url_for('.applications'))
    else:
        form = {}
        form['name'] = application['name']
        form['version'] = application['version'] or ''
        form['email'] = application['email'] or ''
        form['website'] = application['website'] or ''
    return render_template('edit-application.html', title=title,
        form=form, errors=errors, app=application)
Beispiel #9
0
def toggle_track_mbid():
    conn = db.session.connection()
    user = require_user()
    track_id = request.values.get('track_id', type=int)
    if track_id:
        query = sql.select([schema.track.c.gid], schema.track.c.id == track_id)
        track_gid = conn.execute(query).scalar()
    else:
        track_gid = request.values.get('track_gid')
        track_id = resolve_track_gid(conn, track_gid)
    state = bool(request.values.get('state', type=int))
    mbid = request.values.get('mbid')
    if not track_id or not mbid or not track_gid:
        return redirect(url_for('general.index'))
    if not is_moderator(conn, user.id):
        title = 'MusicBrainz account required'
        return render_template('toggle_track_mbid_login.html', title=title)
    query = sql.select([schema.track_mbid.c.id, schema.track_mbid.c.disabled],
        sql.and_(schema.track_mbid.c.track_id == track_id,
                 schema.track_mbid.c.mbid == mbid))
    rows = conn.execute(query).fetchall()
    if not rows:
        return redirect(url_for('general.index'))
    id, current_state = rows[0]
    if state == current_state:
        return redirect(url_for('.track', track_id=track_id))
    if request.form.get('submit'):
        note = request.values.get('note')
        update_stmt = schema.track_mbid.update().where(schema.track_mbid.c.id == id).values(disabled=state)
        conn.execute(update_stmt)
        insert_stmt = schema.track_mbid_change.insert().values(track_mbid_id=id, account_id=session['id'],
                                                               disabled=state, note=note)
        conn.execute(insert_stmt)
        db.session.commit()
        return redirect(url_for('.track', track_id=track_id))
    if state:
        title = 'Unlink MBID'
    else:
        title = 'Link MBID'
    return render_template('toggle_track_mbid.html', title=title, track_gid=track_gid, mbid=mbid, state=state, track_id=track_id)
Beispiel #10
0
def new_api_key():
    user = require_user()
    user.apikey = generate_api_key()
    db.session.commit()
    return redirect(url_for('.api_key'))
Beispiel #11
0
def api_key():
    user = require_user()
    return render_template('apikey.html', title='Your API Key',
        apikey=user.apikey)
Beispiel #12
0
def new_api_key():
    user = require_user()
    user.apikey = generate_api_key()
    db.session.commit()
    return redirect(url_for('.api_key'))
Beispiel #13
0
def api_key():
    user = require_user()
    return render_template('apikey.html',
                           title='Your API Key',
                           apikey=user.apikey)
Beispiel #14
0
def applications():
    user = require_user()
    title = 'Your Applications'
    applications = find_applications_by_account(db.session.connection(), user.id)
    return render_template('applications.html', title=title,
        applications=applications)