Esempio n. 1
0
def set_flag_state(flag_id, state):

    if not is_admin():
        flask.abort(401)

    if state not in ('open', 'closed'):
        flask.abort(422)

    flag = anitya.lib.model.ProjectFlag.get(SESSION, flag_id)

    if not flag:
        flask.abort(404)

    form = anitya.forms.ConfirmationForm()

    if form.validate_on_submit():
        try:
            anitya.lib.set_flag_state(
                SESSION,
                flag=flag,
                state=state,
                user_id=flask.g.auth.openid,
            )
            flask.flash('Flag {0} set to {1}'.format(flag.id, state))
        except anitya.lib.exceptions.AnityaException as err:
            flask.flash(str(err), 'errors')

    return flask.redirect(flask.url_for('browse_flags'))
Esempio n. 2
0
def browse_logs():

    if is_admin():
        user = flask.request.args.get('user', None)
    else:
        user = flask.g.auth.email

    from_date = flask.request.args.get('from_date', None)
    project = flask.request.args.get('project', None)
    refresh = flask.request.args.get('refresh', False)
    limit = flask.request.args.get('limit', 50)
    page = flask.request.args.get('page', 1)

    try:
        page = int(page)
    except ValueError:
        page = 1

    try:
        int(limit)
    except ValueError:
        limit = 50
        flask.flash('Incorrect limit provided, using default', 'errors')

    if from_date:
        try:
            from_date = parser.parse(from_date)
        except (ValueError, TypeError):
            flask.flash(
                'Incorrect from_date provided, using default', 'errors')
            from_date = None

    if from_date:
        from_date = from_date.date()

    offset = 0
    if page is not None and limit is not None and limit != 0:
        offset = (page - 1) * limit

    logs = []
    try:
        logs = anitya.lib.model.Log.search(
            SESSION,
            project_name=project or None,
            from_date=from_date,
            user=user or None,
            offset=offset,
            limit=limit,
        )

        cnt_logs = anitya.lib.model.Log.search(
            SESSION,
            project_name=project or None,
            from_date=from_date,
            user=user or None,
            count=True
        )
    except Exception, err:
        LOG.exception(err)
        flask.flash(err, 'errors')
Esempio n. 3
0
def delete_distro(distro_name):
    """ Delete a distro """

    distro = anitya.lib.model.Distro.by_name(SESSION, distro_name)
    if not distro:
        flask.abort(404)

    if not is_admin():
        flask.abort(401)

    form = anitya.forms.ConfirmationForm()

    if form.validate_on_submit():
        anitya.log(
            SESSION,
            distro=distro,
            topic='distro.remove',
            message=dict(
                agent=flask.g.auth.openid,
                distro=distro.name,
            )
        )

        SESSION.delete(distro)
        SESSION.commit()
        flask.flash('Distro %s has been removed' % distro_name)
        return flask.redirect(flask.url_for('distros'))

    return flask.render_template(
        'distro_delete.html',
        current='distros',
        distro=distro,
        form=form)
Esempio n. 4
0
def set_flag_state(flag_id, state):

    if not is_admin():
        flask.abort(401)

    if state not in ('open', 'closed'):
        flask.abort(422)

    flag = anitya.lib.model.ProjectFlag.get(SESSION, flag_id)

    if not flag:
        flask.abort(404)

    form = anitya.forms.ConfirmationForm()

    if form.validate_on_submit():
        try:
            anitya.lib.set_flag_state(
                SESSION,
                flag=flag,
                state=state,
                user_id=flask.g.auth.openid,
            )
            flask.flash('Flag {0} set to {1}'.format(flag.id, state))
        except anitya.lib.exceptions.AnityaException as err:
            flask.flash(str(err), 'errors')

    return flask.redirect(
        flask.url_for('browse_flags')
    )
Esempio n. 5
0
def add_distro():

    if not is_admin():
        flask.abort(401)

    form = anitya.forms.DistroForm()

    if form.validate_on_submit():
        name = form.name.data

        distro = anitya.lib.model.Distro(name)

        anitya.log(SESSION,
                   distro=distro,
                   topic='distro.add',
                   message=dict(
                       agent=flask.g.auth.openid,
                       distro=distro.name,
                   ))

        try:
            SESSION.add(distro)
            SESSION.commit()
            flask.flash('Distribution added')
        except SQLAlchemyError as err:
            flask.flash('Could not add this distro, already exists?', 'error')
        return flask.redirect(flask.url_for('distros'))

    return flask.render_template('distro_add.html',
                                 current='distros',
                                 form=form)
Esempio n. 6
0
def delete_distro(distro_name):
    """ Delete a distro """

    distro = anitya.lib.model.Distro.by_name(SESSION, distro_name)
    if not distro:
        flask.abort(404)

    if not is_admin():
        flask.abort(401)

    form = anitya.forms.ConfirmationForm()

    if form.validate_on_submit():
        anitya.log(SESSION,
                   distro=distro,
                   topic='distro.remove',
                   message=dict(
                       agent=flask.g.auth.openid,
                       distro=distro.name,
                   ))

        SESSION.delete(distro)
        SESSION.commit()
        flask.flash('Distro %s has been removed' % distro_name)
        return flask.redirect(flask.url_for('distros'))

    return flask.render_template('distro_delete.html',
                                 current='distros',
                                 distro=distro,
                                 form=form)
Esempio n. 7
0
def browse_logs():

    if is_admin():
        user = flask.request.args.get('user', None)
    else:
        user = flask.g.auth.email

    from_date = flask.request.args.get('from_date', None)
    project = flask.request.args.get('project', None)
    refresh = flask.request.args.get('refresh', False)
    limit = flask.request.args.get('limit', 50)
    page = flask.request.args.get('page', 1)

    try:
        page = int(page)
    except ValueError:
        page = 1

    try:
        int(limit)
    except ValueError:
        limit = 50
        flask.flash('Incorrect limit provided, using default', 'errors')

    if from_date:
        try:
            from_date = parser.parse(from_date)
        except (ValueError, TypeError):
            flask.flash('Incorrect from_date provided, using default',
                        'errors')
            from_date = None

    if from_date:
        from_date = from_date.date()

    offset = 0
    if page is not None and limit is not None and limit != 0:
        offset = (page - 1) * limit

    logs = []
    try:
        logs = anitya.lib.model.Log.search(
            SESSION,
            project_name=project or None,
            from_date=from_date,
            user=user or None,
            offset=offset,
            limit=limit,
        )

        cnt_logs = anitya.lib.model.Log.search(SESSION,
                                               project_name=project or None,
                                               from_date=from_date,
                                               user=user or None,
                                               count=True)
    except Exception, err:
        LOG.exception(err)
        flask.flash(err, 'errors')
Esempio n. 8
0
def delete_project_version(project_id, version):

    project = anitya.lib.model.Project.get(SESSION, project_id)
    if not project:
        flask.abort(404)

    version_obj = None
    for vers in project.versions_obj:
        if version == vers.version:
            version_obj = vers
            break

    if version_obj is None:
        flask.abort(
            404,
            'Version %s not found for project %s' % (version, project.name)
        )

    if not is_admin():
        flask.abort(401)

    form = anitya.forms.ConfirmationForm()
    confirm = flask.request.form.get('confirm', False)

    if form.validate_on_submit():
        if confirm:
            anitya.log(
                SESSION,
                project=project,
                topic='project.version.remove',
                message=dict(
                    agent=flask.g.auth.openid,
                    project=project.name,
                    version=version,
                )
            )

            # Delete the record of the version for this project
            SESSION.delete(version_obj)
            # Adjust the latest_version if needed
            if project.latest_version == version:
                project.latest_version = None
                SESSION.add(project)
            SESSION.commit()

            flask.flash('Version for %s has been removed' % version)
        return flask.redirect(
            flask.url_for('project', project_id=project.id))

    return flask.render_template(
        'version_delete.html',
        current='projects',
        project=project,
        version=version,
        form=form)
Esempio n. 9
0
def delete_project_version(project_id, version):

    project = anitya.lib.model.Project.get(SESSION, project_id)
    if not project:
        flask.abort(404)

    version_obj = None
    for vers in project.versions_obj:
        if version == vers.version:
            version_obj = vers
            break

    if version_obj is None:
        flask.abort(
            404,
            'Version %s not found for project %s' % (version, project.name)
        )

    if not is_admin():
        flask.abort(401)

    form = anitya.forms.ConfirmationForm()
    confirm = flask.request.form.get('confirm', False)

    if form.validate_on_submit():
        if confirm:
            anitya.log(
                SESSION,
                project=project,
                topic='project.version.remove',
                message=dict(
                    agent=flask.g.auth.openid,
                    project=project.name,
                    version=version,
                )
            )

            # Delete the record of the version for this project
            SESSION.delete(version_obj)
            # Adjust the latest_version if needed
            if project.latest_version == version:
                project.latest_version = None
                SESSION.add(project)
            SESSION.commit()

            flask.flash('Version for %s has been removed' % version)
        return flask.redirect(
            flask.url_for('project', project_id=project.id))

    return flask.render_template(
        'version_delete.html',
        current='projects',
        project=project,
        version=version,
        form=form)
Esempio n. 10
0
def delete_project_mapping(project_id, distro_name, pkg_name):

    project = anitya.lib.model.Project.get(SESSION, project_id)
    if not project:
        flask.abort(404)

    distro = anitya.lib.model.Distro.get(SESSION, distro_name)
    if not distro:
        flask.abort(404)

    package = anitya.lib.model.Packages.get(
        SESSION, project.id, distro.name, pkg_name)
    if not package:
        flask.abort(404)

    if not is_admin():
        flask.abort(401)

    form = anitya.forms.ConfirmationForm()
    confirm = flask.request.form.get('confirm', False)

    if form.validate_on_submit():
        if confirm:
            anitya.log(
                SESSION,
                project=project,
                topic='project.map.remove',
                message=dict(
                    agent=flask.g.auth.openid,
                    project=project.name,
                    distro=distro.name,
                )
            )

            SESSION.delete(package)
            SESSION.commit()

            flask.flash('Mapping for %s has been removed' % project.name)
        return flask.redirect(
            flask.url_for('project', project_id=project.id))

    return flask.render_template(
        'regex_delete.html',
        current='projects',
        project=project,
        package=package,
        form=form)
Esempio n. 11
0
def delete_project_mapping(project_id, distro_name, pkg_name):

    project = anitya.lib.model.Project.get(SESSION, project_id)
    if not project:
        flask.abort(404)

    distro = anitya.lib.model.Distro.get(SESSION, distro_name)
    if not distro:
        flask.abort(404)

    package = anitya.lib.model.Packages.get(
        SESSION, project.id, distro.name, pkg_name)
    if not package:
        flask.abort(404)

    if not is_admin():
        flask.abort(401)

    form = anitya.forms.ConfirmationForm()
    confirm = flask.request.form.get('confirm', False)

    if form.validate_on_submit():
        if confirm:
            anitya.log(
                SESSION,
                project=project,
                topic='project.map.remove',
                message=dict(
                    agent=flask.g.auth.openid,
                    project=project.name,
                    distro=distro.name,
                )
            )

            SESSION.delete(package)
            SESSION.commit()

            flask.flash('Mapping for %s has been removed' % project.name)
        return flask.redirect(
            flask.url_for('project', project_id=project.id))

    return flask.render_template(
        'regex_delete.html',
        current='projects',
        project=project,
        package=package,
        form=form)
Esempio n. 12
0
def delete_project(project_id):

    project = anitya.lib.model.Project.get(SESSION, project_id)
    if not project:
        flask.abort(404)

    if not is_admin():
        flask.abort(401)

    project_name = project.name

    form = anitya.forms.ConfirmationForm()
    confirm = flask.request.form.get('confirm', False)

    if form.validate_on_submit():
        if confirm:
            anitya.log(
                SESSION,
                project=project,
                topic='project.remove',
                message=dict(
                    agent=flask.g.auth.openid,
                    project=project.name,
                )
            )

            for version in project.versions_obj:
                SESSION.delete(version)

            SESSION.delete(project)
            SESSION.commit()
            flask.flash('Project %s has been removed' % project_name)
            return flask.redirect(flask.url_for('projects'))
        else:
            return flask.redirect(
                flask.url_for('project', project_id=project.id))

    return flask.render_template(
        'project_delete.html',
        current='projects',
        project=project,
        form=form)
Esempio n. 13
0
def delete_project(project_id):

    project = anitya.lib.model.Project.get(SESSION, project_id)
    if not project:
        flask.abort(404)

    if not is_admin():
        flask.abort(401)

    project_name = project.name

    form = anitya.forms.ConfirmationForm()
    confirm = flask.request.form.get('confirm', False)

    if form.validate_on_submit():
        if confirm:
            anitya.log(
                SESSION,
                project=project,
                topic='project.remove',
                message=dict(
                    agent=flask.g.auth.openid,
                    project=project.name,
                )
            )

            for version in project.versions_obj:
                SESSION.delete(version)

            SESSION.delete(project)
            SESSION.commit()
            flask.flash('Project %s has been removed' % project_name)
            return flask.redirect(flask.url_for('projects'))
        else:
            return flask.redirect(
                flask.url_for('project', project_id=project.id))

    return flask.render_template(
        'project_delete.html',
        current='projects',
        project=project,
        form=form)
Esempio n. 14
0
def edit_distro(distro_name):

    distro = anitya.lib.model.Distro.by_name(SESSION, distro_name)
    if not distro:
        flask.abort(404)

    if not is_admin():
        flask.abort(401)

    form = anitya.forms.DistroForm(obj=distro)

    if form.validate_on_submit():
        name = form.name.data

        if name != distro.name:
            anitya.log(
                SESSION,
                distro=distro,
                topic='distro.edit',
                message=dict(
                    agent=flask.g.auth.openid,
                    old=distro.name,
                    new=name,
                )
            )

            distro.name = name

            SESSION.add(distro)
            SESSION.commit()
            message = 'Distribution edited'
            flask.flash(message)
        return flask.redirect(
            flask.url_for('distros')
        )

    return flask.render_template(
        'distro_edit.html',
        current='distros',
        distro=distro,
        form=form)
Esempio n. 15
0
def edit_distro(distro_name):

    distro = anitya.lib.model.Distro.by_name(SESSION, distro_name)
    if not distro:
        flask.abort(404)

    if not is_admin():
        flask.abort(401)

    form = anitya.forms.DistroForm(obj=distro)

    if form.validate_on_submit():
        name = form.name.data

        if name != distro.name:
            anitya.log(
                SESSION,
                distro=distro,
                topic='distro.edit',
                message=dict(
                    agent=flask.g.auth.openid,
                    old=distro.name,
                    new=name,
                )
            )

            distro.name = name

            SESSION.add(distro)
            SESSION.commit()
            message = 'Distribution edited'
            flask.flash(message)
        return flask.redirect(
            flask.url_for('distros')
        )

    return flask.render_template(
        'distro_edit.html',
        current='distros',
        distro=distro,
        form=form)
Esempio n. 16
0
def add_distro():

    if not is_admin():
        flask.abort(401)

    form = anitya.forms.DistroForm()

    if form.validate_on_submit():
        name = form.name.data

        distro = anitya.lib.model.Distro(name)

        anitya.log(
            SESSION,
            distro=distro,
            topic='distro.add',
            message=dict(
                agent=flask.g.auth.openid,
                distro=distro.name,
            )
        )

        try:
            SESSION.add(distro)
            SESSION.commit()
            flask.flash('Distribution added')
        except SQLAlchemyError as err:
            flask.flash(
                'Could not add this distro, already exists?', 'error')
        return flask.redirect(
            flask.url_for('distros')
        )

    return flask.render_template(
        'distro_add.html',
        current='distros',
        form=form)
Esempio n. 17
0
def browse_flags():

    if not is_admin():
        flask.abort(401)

    from_date = flask.request.args.get('from_date', None)
    state = flask.request.args.get('state', 'open')
    project = flask.request.args.get('project', None)
    user = flask.request.args.get('user', None)
    refresh = flask.request.args.get('refresh', False)
    limit = flask.request.args.get('limit', 50)
    page = flask.request.args.get('page', 1)

    try:
        page = int(page)
    except ValueError:
        page = 1

    try:
        int(limit)
    except ValueError:
        limit = 50
        flask.flash('Incorrect limit provided, using default', 'errors')

    if from_date:
        try:
            from_date = parser.parse(from_date)
        except (ValueError, TypeError):
            flask.flash(
                'Incorrect from_date provided, using default', 'errors')
            from_date = None

    if from_date:
        from_date = from_date.date()

    offset = 0
    if page is not None and limit is not None and limit != 0:
        offset = (page - 1) * limit

    flags = []

    try:
        flags = anitya.lib.model.ProjectFlag.search(
            SESSION,
            project_name=project or None,
            state=state or None,
            from_date=from_date,
            user=user or None,
            offset=offset,
            limit=limit,
        )

        cnt_flags = anitya.lib.model.ProjectFlag.search(
            SESSION,
            project_name=project or None,
            state=state or None,
            from_date=from_date,
            user=user or None,
            count=True
        )
    except Exception as err:
        LOG.exception(err)
        flask.flash(err, 'errors')

    total_page = int(ceil(cnt_flags / float(limit)))

    form = anitya.forms.ConfirmationForm()

    return flask.render_template(
        'flags.html',
        current='flags',
        refresh=refresh,
        flags=flags,
        cnt_flags=cnt_flags,
        total_page=total_page,
        form=form,
        page=page,
        project=project or '',
        from_date=from_date or '',
        user=user or '',
        state=state or ''
    )
Esempio n. 18
0
def browse_logs():

    if is_admin():
        user = flask.request.args.get('user', None)
    else:
        user = flask.g.auth.openid

    from_date = flask.request.args.get('from_date', None)
    project = flask.request.args.get('project', None)
    refresh = flask.request.args.get('refresh', False)
    limit = flask.request.args.get('limit', 50)
    page = flask.request.args.get('page', 1)

    try:
        page = int(page)
    except ValueError:
        page = 1

    try:
        int(limit)
    except ValueError:
        limit = 50
        flask.flash('Incorrect limit provided, using default', 'errors')

    if from_date:
        try:
            from_date = parser.parse(from_date)
        except (ValueError, TypeError):
            flask.flash(
                'Incorrect from_date provided, using default', 'errors')
            from_date = None

    if from_date:
        from_date = from_date.date()

    offset = 0
    if page is not None and limit is not None and limit != 0:
        offset = (page - 1) * limit

    logs = []
    try:
        logs = anitya.lib.model.Log.search(
            SESSION,
            project_name=project or None,
            from_date=from_date,
            user=user or None,
            offset=offset,
            limit=limit,
        )

        cnt_logs = anitya.lib.model.Log.search(
            SESSION,
            project_name=project or None,
            from_date=from_date,
            user=user or None,
            count=True
        )
    except Exception as err:
        LOG.exception(err)
        flask.flash(err, 'errors')

    total_page = int(ceil(cnt_logs / float(limit)))

    return flask.render_template(
        'logs.html',
        current='logs',
        refresh=refresh,
        logs=logs,
        cnt_logs=cnt_logs,
        total_page=total_page,
        page=page,
        project=project or '',
        from_date=from_date or '',
        user=user or ''
    )
Esempio n. 19
0
def browse_flags():

    if not is_admin():
        flask.abort(401)

    from_date = flask.request.args.get('from_date', None)
    state = flask.request.args.get('state', 'open')
    project = flask.request.args.get('project', None)
    user = flask.request.args.get('user', None)
    refresh = flask.request.args.get('refresh', False)
    limit = flask.request.args.get('limit', 50)
    page = flask.request.args.get('page', 1)

    try:
        page = int(page)
    except ValueError:
        page = 1

    try:
        int(limit)
    except ValueError:
        limit = 50
        flask.flash('Incorrect limit provided, using default', 'errors')

    if from_date:
        try:
            from_date = parser.parse(from_date)
        except (ValueError, TypeError):
            flask.flash('Incorrect from_date provided, using default',
                        'errors')
            from_date = None

    if from_date:
        from_date = from_date.date()

    offset = 0
    if page is not None and limit is not None and limit != 0:
        offset = (page - 1) * limit

    flags = []

    try:
        flags = anitya.lib.model.ProjectFlag.search(
            SESSION,
            project_name=project or None,
            state=state or None,
            from_date=from_date,
            user=user or None,
            offset=offset,
            limit=limit,
        )

        cnt_flags = anitya.lib.model.ProjectFlag.search(SESSION,
                                                        project_name=project
                                                        or None,
                                                        state=state or None,
                                                        from_date=from_date,
                                                        user=user or None,
                                                        count=True)
    except Exception as err:
        LOG.exception(err)
        flask.flash(err, 'errors')

    total_page = int(ceil(cnt_flags / float(limit)))

    form = anitya.forms.ConfirmationForm()

    return flask.render_template('flags.html',
                                 current='flags',
                                 refresh=refresh,
                                 flags=flags,
                                 cnt_flags=cnt_flags,
                                 total_page=total_page,
                                 form=form,
                                 page=page,
                                 project=project or '',
                                 from_date=from_date or '',
                                 user=user or '',
                                 state=state or '')
Esempio n. 20
0
def browse_logs():

    if is_admin():
        user = flask.request.args.get('user', None)
    else:
        user = [flask.g.auth.openid, flask.g.auth.email]

    from_date = flask.request.args.get('from_date', None)
    project = flask.request.args.get('project', None)
    refresh = flask.request.args.get('refresh', False)
    limit = flask.request.args.get('limit', 50)
    page = flask.request.args.get('page', 1)

    try:
        page = int(page)
    except ValueError:
        page = 1

    try:
        int(limit)
    except ValueError:
        limit = 50
        flask.flash('Incorrect limit provided, using default', 'errors')

    if from_date:
        try:
            from_date = parser.parse(from_date)
        except (ValueError, TypeError):
            flask.flash('Incorrect from_date provided, using default',
                        'errors')
            from_date = None

    if from_date:
        from_date = from_date.date()

    offset = 0
    if page is not None and limit is not None and limit != 0:
        offset = (page - 1) * limit

    logs = []
    try:
        logs = anitya.lib.model.Log.search(
            SESSION,
            project_name=project or None,
            from_date=from_date,
            user=user or None,
            offset=offset,
            limit=limit,
        )

        cnt_logs = anitya.lib.model.Log.search(SESSION,
                                               project_name=project or None,
                                               from_date=from_date,
                                               user=user or None,
                                               count=True)
    except Exception as err:
        LOG.exception(err)
        flask.flash(err, 'errors')

    total_page = int(ceil(cnt_logs / float(limit)))

    return flask.render_template('logs.html',
                                 current='logs',
                                 refresh=refresh,
                                 logs=logs,
                                 cnt_logs=cnt_logs,
                                 total_page=total_page,
                                 page=page,
                                 project=project or '',
                                 from_date=from_date or '',
                                 user=user or '')