(table)
| 895 | @app.route('/<table>/insert/', methods=['GET', 'POST']) |
| 896 | @require_table |
| 897 | def table_insert(table): |
| 898 | dataset = get_dataset() |
| 899 | dataset.update_cache(table) |
| 900 | model = dataset[table].model_class |
| 901 | |
| 902 | columns = [] |
| 903 | fields = [] |
| 904 | defaults = {} |
| 905 | row = {} |
| 906 | for column in dataset.get_columns(table): |
| 907 | field = model._meta.columns[column.name] |
| 908 | if isinstance(field, AutoField): |
| 909 | continue |
| 910 | if column.default: |
| 911 | defaults[column.name] = column.default |
| 912 | columns.append(column) |
| 913 | fields.append(field) |
| 914 | row[field.name] = '' |
| 915 | |
| 916 | edited = set() |
| 917 | errors = {} |
| 918 | if request.method == 'POST': |
| 919 | insert = {} |
| 920 | for key, value in request.form.items(): |
| 921 | if key not in model._meta.fields: continue |
| 922 | field = model._meta.fields[key] |
| 923 | edited.add(field.name) |
| 924 | row[field.name] = value |
| 925 | |
| 926 | value, err = minimal_validate_field(field, value) |
| 927 | if err: |
| 928 | errors[key] = err |
| 929 | else: |
| 930 | insert[field] = value |
| 931 | |
| 932 | if errors: |
| 933 | flash('One or more errors prevented the row being inserted.', |
| 934 | 'danger') |
| 935 | elif insert: |
| 936 | try: |
| 937 | with dataset.transaction() as txn: |
| 938 | n = model.insert(insert).execute() |
| 939 | except Exception as exc: |
| 940 | flash('Insert failed: %s' % exc, 'danger') |
| 941 | app.logger.exception('Error attempting to insert row into %s.', table) |
| 942 | else: |
| 943 | flash('Successfully inserted record (%s).' % n, 'success') |
| 944 | return redirect(url_for( |
| 945 | 'table_content', |
| 946 | table=table, |
| 947 | page='last')) |
| 948 | else: |
| 949 | flash('No data was specified to be inserted.', 'warning') |
| 950 | else: |
| 951 | edited = set(model._meta.sorted_field_names) - set(defaults) # Make all fields editable on load. |
| 952 | |
| 953 | columns_fields = zip(columns, fields) |
| 954 |
nothing calls this directly
no test coverage detected