(table)
| 781 | @app.route('/<table>/content/', methods=['GET', 'POST']) |
| 782 | @require_table |
| 783 | def table_content(table): |
| 784 | dataset = get_dataset() |
| 785 | dataset.update_cache(table) |
| 786 | ds_table = dataset[table] |
| 787 | model = ds_table.model_class |
| 788 | is_composite_pk = isinstance(model._meta.primary_key, CompositeKey) |
| 789 | |
| 790 | allow_edit = not dataset.is_readonly and model._meta.primary_key is not False |
| 791 | allow_bulk = allow_edit and not is_composite_pk |
| 792 | |
| 793 | if request.method == 'POST': |
| 794 | if not allow_bulk: |
| 795 | flash('Cannot perform bulk operation on this table.', 'warning') |
| 796 | else: |
| 797 | action = request.form['action'] |
| 798 | pks = request.form.getlist('pk') |
| 799 | if not pks: |
| 800 | flash('No rows were selected.', 'warning') |
| 801 | elif action == 'bulk-delete': |
| 802 | n = (model.delete() |
| 803 | .where(model._meta.primary_key.in_(pks)) |
| 804 | .execute()) |
| 805 | flash('Successfully deleted %s row(s)' % n, 'success') |
| 806 | else: |
| 807 | flash('Unrecognized action', 'warning') |
| 808 | return redirect(request.full_path) |
| 809 | |
| 810 | page_number = request.args.get('page') or '' |
| 811 | if page_number == 'last': page_number = '1000000' |
| 812 | page_number = int(page_number) if page_number.isdigit() else 1 |
| 813 | |
| 814 | total_rows = ds_table.all().count() |
| 815 | rows_per_page = app.config['ROWS_PER_PAGE'] |
| 816 | total_pages = max(1, int(math.ceil(total_rows / float(rows_per_page)))) |
| 817 | # Restrict bounds. |
| 818 | page_number = max(min(page_number, total_pages), 1) |
| 819 | |
| 820 | previous_page = page_number - 1 if page_number > 1 else None |
| 821 | next_page = page_number + 1 if page_number < total_pages else None |
| 822 | |
| 823 | query = ds_table.all().paginate(page_number, rows_per_page) |
| 824 | |
| 825 | ordering = request.args.get('ordering') |
| 826 | if ordering: |
| 827 | field = model._meta.columns[ordering.lstrip('-')] |
| 828 | if ordering.startswith('-'): |
| 829 | field = field.desc() |
| 830 | query = query.order_by(field) |
| 831 | |
| 832 | session['%s.last_viewed' % table] = (page_number, ordering) |
| 833 | |
| 834 | field_names = ds_table.columns |
| 835 | columns = [f.column_name for f in ds_table.model_class._meta.sorted_fields] |
| 836 | |
| 837 | return render_template( |
| 838 | 'table_content.html', |
| 839 | allow_bulk=allow_bulk, |
| 840 | allow_edit=allow_edit, |
nothing calls this directly
no test coverage detected