Пример #1
0
def item():
    action = request.form['action']
    if action == 'Submit':
        data = parse_upload_form()
        if data:
            # validate data
            for index, row in enumerate(data):
                if len(row) != 3:
                    return utils.user_error('Bad data: row %d has %d elements (expecting 3)' % (index + 1, len(row)))
            for row in data:
                _item = Item(*row)
                db.session.add(_item)
            db.session.commit()
    elif action == 'Prioritize' or action == 'Cancel':
        item_id = request.form['item_id']
        target_state = action == 'Prioritize'
        Item.by_id(item_id).prioritized = target_state
        db.session.commit()
    elif action == 'Disable' or action == 'Enable':
        item_id = request.form['item_id']
        target_state = action == 'Enable'
        Item.by_id(item_id).active = target_state
        db.session.commit()
    elif action == 'Delete':
        item_id = request.form['item_id']
        try:
            db.session.execute(ignore_table.delete(ignore_table.c.item_id == item_id))
            Item.query.filter_by(id=item_id).delete()
            db.session.commit()
        except IntegrityError as e:
            return utils.server_error(str(e))
    return redirect(url_for('admin'))
Пример #2
0
def item_patch():
    item = Item.by_id(request.form['item_id'])
    if not item:
        return utils.user_error('Item %s not found ' % request.form['item_id'])
    if 'location' in request.form:
        item.location = request.form['location']
    if 'name' in request.form:
        item.name = request.form['name']
    if 'description' in request.form:
        item.description = request.form['description']
    db.session.commit()
    return redirect(url_for('item_detail', item_id=item.id))
Пример #3
0
def annotator_detail(annotator_id):
    annotator = Annotator.by_id(annotator_id)
    if not annotator:
        return utils.user_error('Annotator %s not found ' % annotator_id)
    else:
        seen = Item.query.filter(Item.viewed.contains(annotator)).all()
        ignored_ids = {i.id for i in annotator.ignore}
        if ignored_ids:
            skipped = Item.query.filter(
                Item.id.in_(ignored_ids) & ~Item.viewed.contains(annotator))
        else:
            skipped = []
        return render_template('admin_annotator.html',
                               annotator=annotator,
                               login_link=annotator_link(annotator),
                               seen=seen,
                               skipped=skipped)
Пример #4
0
def item_detail(item_id):
    item = Item.by_id(item_id)
    if not item:
        return utils.user_error('Item %s not found ' % item_id)
    else:
        assigned = Annotator.query.filter(Annotator.next == item).all()
        viewed_ids = {i.id for i in item.viewed}
        if viewed_ids:
            skipped = Annotator.query.filter(
                Annotator.ignore.contains(item)
                & ~Annotator.id.in_(viewed_ids))
        else:
            skipped = Annotator.query.filter(Annotator.ignore.contains(item))
        return render_template('admin_item.html',
                               item=item,
                               assigned=assigned,
                               skipped=skipped)
Пример #5
0
def item():
    action = request.form['action']
    if action == 'Submit':
        data = parse_upload_form()
        if data:
            # validate data
            for index, row in enumerate(data):
                if len(row) != Item.NUM_EDITABLE_FIELDS:
                    return utils.user_error(
                        f'Bad data: row {index + 1} has {len(row)} elements '
                        f'(expecting {Item.NUM_EDITABLE_FIELDS})'
                    )
            def tx():
                for row in data:
                    _item = Item(*row)
                    db.session.add(_item)
                db.session.commit()
            with_retries(tx)
    elif action == 'Prioritize' or action == 'Cancel':
        item_id = request.form['item_id']
        target_state = action == 'Prioritize'
        def tx():
            Item.by_id(item_id).prioritized = target_state
            db.session.commit()
        with_retries(tx)
    elif action == 'Disable' or action == 'Enable':
        item_id = request.form['item_id']
        target_state = action == 'Enable'
        def tx():
            Item.by_id(item_id).active = target_state
            db.session.commit()
        with_retries(tx)
    elif action == 'Delete':
        item_id = request.form['item_id']
        try:
            def tx():
                db.session.execute(ignore_table.delete(ignore_table.c.item_id == item_id))
                Item.query.filter_by(id=item_id).delete()
                db.session.commit()
            with_retries(tx)
        except IntegrityError as e:
            if isinstance(e.orig, psycopg2.errors.ForeignKeyViolation):
                return utils.server_error("Projects can't be deleted once they have been voted on by a judge. You can use the 'disable' functionality instead, which has a similar effect, preventing the project from being shown to judges.")
            else:
                return utils.server_error(str(e))
    return redirect(url_for('admin'))
Пример #6
0
 def tx():
     item = Item.by_id(request.form['item_id'])
     if not item:
         return utils.user_error('Item %s not found ' %
                                 request.form['item_id'])
     if 'location' in request.form:
         item.location = request.form['location']
     if 'floor' in request.form:
         item.floor = request.form['floor']
     if 'name' in request.form:
         item.name = request.form['name']
     if 'description' in request.form:
         item.description = request.form['description']
     if 'url' in request.form:
         item.url = request.form['url']
     if 'categories' in request.form:
         item.categories = request.form['categories']
     db.session.commit()
Пример #7
0
def annotator():
    action = request.form['action']
    if action == 'Submit':
        data = parse_upload_form()
        added = []
        if data:
            # validate data
            for index, row in enumerate(data):
                if len(row) != 3:
                    return utils.user_error(
                        'Bad data: row %d has %d elements (expecting 3)' %
                        (index + 1, len(row)))
            for row in data:
                annotator = Annotator(*row)
                added.append(annotator)
                db.session.add(annotator)
            db.session.commit()
            try:
                email_invite_links(added)
            except Exception as e:
                return utils.server_error(str(e))
    elif action == 'Email':
        annotator_id = request.form['annotator_id']
        try:
            email_invite_links(Annotator.by_id(annotator_id))
        except Exception as e:
            return utils.server_error(str(e))
    elif action == 'Disable' or action == 'Enable':
        annotator_id = request.form['annotator_id']
        target_state = action == 'Enable'
        Annotator.by_id(annotator_id).active = target_state
        db.session.commit()
    elif action == 'Delete':
        annotator_id = request.form['annotator_id']
        try:
            db.session.execute(
                ignore_table.delete(
                    ignore_table.c.annotator_id == annotator_id))
            Annotator.query.filter_by(id=annotator_id).delete()
            db.session.commit()
        except IntegrityError as e:
            return utils.server_error(str(e))
    return redirect(url_for('admin'))
Пример #8
0
def item_detail(item_id):
    item = Item.by_id(item_id)
    if not item:
        return utils.user_error('Item %s not found ' % item_id)
    else:
        assigned = Annotator.query.filter(Annotator.next == item).all()
        viewed_ids = {i.id for i in item.viewed}
        if viewed_ids:
            skipped = Annotator.query.filter(
                Annotator.ignore.contains(item) & ~Annotator.id.in_(viewed_ids)
            )
        else:
            skipped = Annotator.query.filter(Annotator.ignore.contains(item))
        return render_template(
            'admin_item.html',
            item=item,
            assigned=assigned,
            skipped=skipped
        )
Пример #9
0
def item():
    action = request.form['action']
    if action == 'Submit':
        data = devpost_dump_to_gavel_input.transform(parse_upload_form())
        if data:
            # validate data
            for index, row in enumerate(data):
                if len(row) != 4:
                    return utils.user_error(
                        'Bad data: row %d has %d elements (expecting 4)' %
                        (index + 1, len(row)))
            for row in data:
                print(row)
                _item = Item(*row)
                db.session.add(_item)
                db.session.flush()
                db.session.refresh(_item)
                # print('row id', _item.id)

                _item.location = _item.id

            db.session.commit()
    elif action == 'Prioritize' or action == 'Cancel':
        item_id = request.form['item_id']
        target_state = action == 'Prioritize'
        Item.by_id(item_id).prioritized = target_state
        db.session.commit()
    elif action == 'Disable' or action == 'Enable':
        item_id = request.form['item_id']
        target_state = action == 'Enable'
        Item.by_id(item_id).active = target_state
        db.session.commit()
    elif action == 'Delete':
        item_id = request.form['item_id']
        try:
            db.session.execute(
                ignore_table.delete(ignore_table.c.item_id == item_id))
            Item.query.filter_by(id=item_id).delete()
            db.session.commit()
        except IntegrityError as e:
            return utils.server_error(str(e))
    return redirect(url_for('admin'))
Пример #10
0
def annotator_detail(annotator_id):
    annotator = Annotator.by_id(annotator_id)
    if not annotator:
        return utils.user_error('Annotator %s not found ' % annotator_id)
    else:
        seen = Item.query.filter(Item.viewed.contains(annotator)).all()
        ignored_ids = {i.id for i in annotator.ignore}
        if ignored_ids:
            skipped = Item.query.filter(
                Item.id.in_(ignored_ids) & ~Item.viewed.contains(annotator)
            )
        else:
            skipped = []
        return render_template(
            'admin_annotator.html',
            annotator=annotator,
            login_link=annotator_link(annotator),
            seen=seen,
            skipped=skipped
        )
Пример #11
0
 def tx():
     item = Item.by_id(request.form['item_id'])
     if not item:
         return utils.user_error('Item %s not found ' %
                                 request.form['item_id'])
     if 'location' in request.form:
         item.location = request.form['location']
     if 'name' in request.form:
         item.name = request.form['name']
     if 'description' in request.form:
         item.description = request.form['description']
     if 'tagline' in request.form:
         item.tagline = request.form['tagline']
     if 'video_reference' in request.form:
         item.video_reference = request.form['video_reference']
     if 'submission_reference' in request.form:
         item.submission_reference = request.form['submission_reference']
     if 'submission_website' in request.form:
         item.submission_website = request.form['submission_website']
     db.session.commit()
Пример #12
0
def annotator():
    action = request.form['action']
    if action == 'Submit':
        data = parse_upload_form()
        added = []
        if data:
            # validate data
            for index, row in enumerate(data):
                if len(row) != 3:
                    return utils.user_error('Bad data: row %d has %d elements (expecting 3)' % (index + 1, len(row)))
            for row in data:
                annotator = Annotator(*row)
                added.append(annotator)
                db.session.add(annotator)
            db.session.commit()
            try:
                email_invite_links(added)
            except Exception as e:
                return utils.server_error(str(e))
    elif action == 'Email':
        annotator_id = request.form['annotator_id']
        try:
            email_invite_links(Annotator.by_id(annotator_id))
        except Exception as e:
            return utils.server_error(str(e))
    elif action == 'Disable' or action == 'Enable':
        annotator_id = request.form['annotator_id']
        target_state = action == 'Enable'
        Annotator.by_id(annotator_id).active = target_state
        db.session.commit()
    elif action == 'Delete':
        annotator_id = request.form['annotator_id']
        try:
            db.session.execute(ignore_table.delete(ignore_table.c.annotator_id == annotator_id))
            Annotator.query.filter_by(id=annotator_id).delete()
            db.session.commit()
        except IntegrityError as e:
            return utils.server_error(str(e))
    return redirect(url_for('admin'))
Пример #13
0
def item():
    action = request.form['action']
    if action == 'Submit':
        data = parse_upload_form()
        if data:
            # validate data
            for index, row in enumerate(data):
                if len(row) < len(DEVPOST_COLUMNS):
                    return utils.user_error(
                        'Bad data: row %d has %d elements (expecting %d+)' %
                        (index + 1, len(row), len(DEVPOST_COLUMNS)))

            def tx():
                for (i, row) in enumerate(data):
                    if i == 0 and row[0] == DEVPOST_COLUMNS[0]:
                        continue  # skip header row
                    _item = Item(name=row[0],
                                 location=row[1],
                                 url=row[2],
                                 description="",
                                 categories=row[10])
                    db.session.add(_item)
                db.session.commit()

            with_retries(tx)
    elif action == 'Prioritize' or action == 'Cancel':
        item_id = request.form['item_id']
        target_state = action == 'Prioritize'

        def tx():
            Item.by_id(item_id).prioritized = target_state
            db.session.commit()

        with_retries(tx)
    elif action == 'Disable' or action == 'Enable':
        item_id = request.form['item_id']
        target_state = action == 'Enable'

        def tx():
            Item.by_id(item_id).active = target_state
            db.session.commit()

        with_retries(tx)
    elif action == 'Delete':
        item_id = request.form['item_id']
        try:

            def tx():
                db.session.execute(
                    ignore_table.delete(ignore_table.c.item_id == item_id))
                Item.query.filter_by(id=item_id).delete()
                db.session.commit()

            with_retries(tx)
        except IntegrityError as e:
            if isinstance(e.orig, psycopg2.errors.ForeignKeyViolation):
                return utils.server_error(
                    "Projects can't be deleted once they have been voted on by a judge. You can use the 'disable' functionality instead, which has a similar effect, preventing the project from being shown to judges."
                )
            else:
                return utils.server_error(str(e))
    return redirect(url_for('admin'))
Пример #14
0
def item():
    action = request.form['action']
    if action == 'Submit':
        data = parse_upload_form()
        if data:
            # validate data
            for index, row in enumerate(data):
                if settings.VIRTUAL_EVENT:
                    if len(row) != 6:
                        return utils.user_error(
                            'Bad data: row %d has %d elements (expecting 6)' %
                            (index + 1, len(row)))
                else:
                    if len(row) != 3:
                        return utils.user_error(
                            'Bad data: row %d has %d elements (expecting 3)' %
                            (index + 1, len(row)))

            def tx():
                for row in data:
                    # This is REALLY REALLY bad I know...
                    # TODO: Tech Debt
                    if settings.VIRTUAL_EVENT:
                        row.insert(1, "N/A")
                    _item = Item(*row)
                    db.session.add(_item)
                db.session.commit()

            with_retries(tx)
    elif action == 'Prioritize' or action == 'Cancel':
        item_id = request.form['item_id']
        target_state = action == 'Prioritize'

        def tx():
            Item.by_id(item_id).prioritized = target_state
            db.session.commit()

        with_retries(tx)
    elif action == 'Disable' or action == 'Enable':
        item_id = request.form['item_id']
        target_state = action == 'Enable'

        def tx():
            Item.by_id(item_id).active = target_state
            db.session.commit()

        with_retries(tx)
    elif action == 'Delete':
        item_id = request.form['item_id']
        try:

            def tx():
                db.session.execute(
                    ignore_table.delete(ignore_table.c.item_id == item_id))
                Item.query.filter_by(id=item_id).delete()
                db.session.commit()

            with_retries(tx)
        except IntegrityError as e:
            return utils.server_error(str(e))
    elif action == 'BatchDisable':
        item_ids = request.form.getlist('ids')
        error = []
        for item_id in item_ids:
            try:

                def tx():
                    Item.by_id(item_id).active = False
                    db.session.commit()

                with_retries(tx)
            except:
                error.append(item_id)

                def tx():
                    db.session.rollback()

                with_retries(tx)
    elif action == 'BatchDelete':
        db.Session.autocommit = True
        item_ids = request.form.getlist('ids')
        error = []
        for item_id in item_ids:
            try:

                def tx():
                    db.session.execute(
                        ignore_table.delete(ignore_table.c.item_id == item_id))
                    Item.query.filter_by(id=item_id).delete()
                    db.session.commit()

                with_retries(tx)
            except Exception as e:
                error.append(str(e))

                def tx():
                    db.session.rollback()

                with_retries(tx)
                continue
    return redirect(url_for('admin'))