(table, pk)
| 977 | @app.route('/<table>/update/<b64:pk>/', methods=['GET', 'POST']) |
| 978 | @require_table |
| 979 | def 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') |
nothing calls this directly
no test coverage detected