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

Function table_insert

sqlite_web/sqlite_web.py:897–963  ·  view source on GitHub ↗
(table)

Source from the content-addressed store, hash-verified

895@app.route('/<table>/insert/', methods=['GET', 'POST'])
896@require_table
897def 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

Callers

nothing calls this directly

Calls 3

get_datasetFunction · 0.85
minimal_validate_fieldFunction · 0.85
get_columnsMethod · 0.80

Tested by

no test coverage detected