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

Function table_update

sqlite_web/sqlite_web.py:979–1062  ·  view source on GitHub ↗
(table, pk)

Source from the content-addressed store, hash-verified

977@app.route('/<table>/update/<b64:pk>/', methods=['GET', 'POST'])
978@require_table
979def table_update(table, pk):
980 dataset = get_dataset()
981 dataset.update_cache(table)
982 model = dataset[table].model_class
983 table_pk = model._meta.primary_key
984 if not table_pk:
985 flash('Table must have a primary key to perform update.', 'danger')
986 return redirect(url_for('table_content', table=table))
987 elif pk == '__uneditable__':
988 flash('Could not encode primary key to perform update.', 'danger')
989 return redirect(url_for('table_content', table=table))
990
991 expr = decode_pk(model, pk)
992 try:
993 obj = model.get(expr)
994 except model.DoesNotExist:
995 pk_repr = pk_display(table_pk, pk)
996 flash('Could not fetch row with primary-key %s.' % str(pk_repr), 'danger')
997 return redirect(url_for('table_content', table=table))
998
999 columns = []
1000 fields = []
1001 for column in dataset.get_columns(table):
1002 columns.append(column)
1003 fields.append(model._meta.columns[column.name])
1004
1005 row = {}
1006 for field in fields:
1007 value = getattr(obj, field.name)
1008 if value is None:
1009 row[field.name] = None
1010 elif isinstance(field, BlobField):
1011 if app.config['BLOB_AS_BASE64']:
1012 row[field.name] = base64.b64encode(value).decode('utf8')
1013 else:
1014 row[field.name] = value.hex()
1015 else:
1016 row[field.name] = value
1017
1018 edited = set()
1019 errors = {}
1020 if request.method == 'POST':
1021 update = {}
1022 for key, value in request.form.items():
1023 if key not in model._meta.fields: continue
1024 field = model._meta.fields[key]
1025 edited.add(field.name)
1026 row[field.name] = value
1027
1028 value, err = minimal_validate_field(field, value)
1029 if err:
1030 errors[key] = err
1031 else:
1032 update[field] = value
1033
1034 if errors:
1035 flash('One or more errors prevented the row being updated.',
1036 'danger')

Callers

nothing calls this directly

Calls 6

get_datasetFunction · 0.85
decode_pkFunction · 0.85
pk_displayFunction · 0.85
minimal_validate_fieldFunction · 0.85
redirect_to_previousFunction · 0.85
get_columnsMethod · 0.80

Tested by

no test coverage detected