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'))
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))
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)
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)
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'))
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()
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'))
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 )
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'))
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 )
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()
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'))
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'))
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'))