MCPcopy
hub / github.com/coleifer/sqlite-web / table_content

Function table_content

sqlite_web/sqlite_web.py:783–854  ·  view source on GitHub ↗
(table)

Source from the content-addressed store, hash-verified

781@app.route('/<table>/content/', methods=['GET', 'POST'])
782@require_table
783def 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,

Callers

nothing calls this directly

Calls 2

get_datasetFunction · 0.85
get_table_sqlMethod · 0.80

Tested by

no test coverage detected