def post(self, exploration_id): """Handles POST requests.""" change_list = self.payload.get('change_list') version = self.payload.get('version') current_exploration = exp_services.get_exploration_by_id( exploration_id) if version != current_exploration.version: # TODO(sll): Improve the handling of merge conflicts. self.render_json({ 'is_version_of_draft_valid': False }) else: utils.recursively_remove_key(change_list, '$$hashKey') summary = exp_services.get_summary_of_change_list( current_exploration, change_list) updated_exploration = exp_services.apply_change_list( exploration_id, change_list) warning_message = '' try: updated_exploration.validate(strict=True) except utils.ValidationError as e: warning_message = unicode(e) self.render_json({ 'summary': summary, 'warning_message': warning_message })
def post(self, exploration_id): """Handles POST requests.""" change_list = self.payload.get('change_list') version = self.payload.get('version') current_exploration = exp_services.get_exploration_by_id( exploration_id) if version != current_exploration.version: # TODO(sll): Improve this. self.render_json({ 'error': ( 'Sorry! Someone else has edited and committed changes to ' 'this exploration while you were editing it. We suggest ' 'opening another browser tab -- which will load the new ' 'version of the exploration -- then transferring your ' 'changes there. We will try to make this easier in the ' 'future -- we have not done it yet because figuring out ' 'how to merge different people\'s changes is hard. ' '(Trying to edit version %s, but the current version is ' '%s.).' % (version, current_exploration.version) ) }) else: utils.recursively_remove_key(change_list, '$$hashKey') summary = exp_services.get_summary_of_change_list( current_exploration, change_list) updated_exploration = exp_services.apply_change_list( exploration_id, change_list) warning_message = '' try: updated_exploration.validate(strict=True) except utils.ValidationError as e: warning_message = unicode(e) self.render_json({ 'summary': summary, 'warning_message': warning_message })