|
else: |
|
# update existing assignment |
|
changes = {} |
|
assignment = get_assignment(course_id, assignment_id) |
|
response['external_tool_tag_attributes'] = getattr(assignment,'external_tool_tag_attributes',{}) | response.get('external_tool_tag_attributes', {}) |
|
if len(response['external_tool_tag_attributes']) == 0: |
|
_ = response.pop('external_tool_tag_attributes', None) |
|
# get differences between original and new data |
|
for key, val in response.items(): |
|
if str(getattr(assignment,key,None)) != str(val): |
|
changes[key] = {'old': getattr(assignment,key,None), 'new': val} # TODO: handle changes in sub-attributes, like external_tool_tag_attributes |
|
if changes == {}: |
|
diff_message += 'No changes to assignment' |
|
else: |
|
diff_message = '<h3>Assignment Differences</h3>' |
|
diff_message += '<table class="diff-table" id="assignment-diff">' |
|
# diff_message += '<tr><th colspan="3">Assignment Differences</th></tr>' |
|
diff_message += '<tr><th>Field</th><th>Old Value</th><th>New Value</th></tr>' |
|
changes_dict = {key: val['new'] for key, val in changes.items()} |
|
old_values = {key: val['old'] for key, val in changes.items()} |
|
log_action(f'assignment old values {old_values})') |
|
log_action(f'assignment.edit(assignment={changes_dict})') |
|
assignment.edit(assignment=changes_dict) |
|
for field, change in changes.items(): |
|
# diff_message += '<em>' + field + '</em>: ' + str(change) |
|
diff_message += '<tr>' |
|
diff_message += '<td>' + field + '</td>' |
|
diff_message += '<td>' + str(change['old']) + '</td>' |
|
diff_message += '<td>' + str(change['new']) + '</td>' |
|
diff_message += '</tr>' |
|
diff_message += '</table>' |
|
diff_message += '\n' |
|
flash('<h2><a href="' + assignment.html_url + '" target="_blank" rel="noopener noreferrer">🔗 ' + assignment.name + '</a></h2>') |
|
flash(diff_message) |
The backend-frontend logic for what has changed when modifying an assignment is currently decoupled. Merge these to use the same checks.
Backend
filbert/script.py
Lines 908 to 941 in 3fa411c
Frontend
filbert/static/js/functions.js
Lines 56 to 74 in 3fa411c