def view(dataset, value): dataset = Dataset.find(dataset) value = Value.find(dataset, value) format = response_format() if format == 'json': return jsonify(value) query = request.args.get('query', '').strip().lower() choices = match_op(value.value, dataset) choices = filter(lambda (c,v,s): v != value.id, choices) if len(query): choices = filter(lambda (c,v,s): query in Value.find(dataset,v).value.lower(), choices) # THIS is very inefficient - rather do this # differently pager = Pager(choices, '.view', dataset=dataset.name, value=value.id, limit=10) # HACK: Fetch only the values on the selected page. value_objs = Value.id_map(dataset, map(lambda (c,v,s): v, pager.query[pager.offset:pager.offset+pager.limit])) for i, (c,v,s) in enumerate(pager.query): if v in value_objs: pager.query[i] = (c, value_objs.get(v), s) return render_template('value/view.html', dataset=dataset, value=value, values=pager, query=query)
def update(dataset, value): dataset = Dataset.find(dataset) authz.require(authz.dataset_edit(dataset)) value = Value.find(dataset, value) data = request_content() try: value.update(data, request.account) db.session.commit() flash("Updated %s" % value.value, 'success') return redirect(url_for('.view', dataset=dataset.name, value=value.id)) except Invalid, inv: return handle_invalid(inv, view, data=data, args=[dataset.name, value.id])
def view(dataset, value): dataset = Dataset.find(dataset) value = Value.find(dataset, value) format = response_format() if format == 'json': return jsonify(value) query = request.args.get('query', '').strip().lower() choices = match_op(value.value, dataset) choices = filter(lambda (c,v,s): v != value, choices) if len(query): choices = filter(lambda (c,v,s): query in v.value.lower(), choices) pager = Pager(choices, '.view', dataset=dataset.name, value=value.id, limit=10) return render_template('value/view.html', dataset=dataset, value=value, values=pager, query=query)
def merge(dataset, value): dataset = Dataset.find(dataset) authz.require(authz.dataset_edit(dataset)) value = Value.find(dataset, value) data = request_content() try: target = value.merge_into(data, request.account) flush_cache(dataset) db.session.commit() flash("Merged %s" % value.value, 'success') return redirect(url_for('.view', dataset=dataset.name, value=target.id)) except Invalid, inv: print inv return handle_invalid(inv, view, data=data, args=[dataset.name, value.id])