def put(self): """Handles REST PUT verb with JSON payload.""" request = transforms.loads(self.request.get('request')) key = request.get('key') if not self.assert_xsrf_token_or_fail(request, 'announcement-put', {'key': key}): return if not AnnouncementsRights.can_edit(self): transforms.send_json_response(self, 401, 'Access denied.', {'key': key}) return entity = AnnouncementEntity.get(key) if not entity: transforms.send_json_response(self, 404, 'Object not found.', {'key': key}) return schema = AnnouncementsItemRESTHandler.SCHEMA( 'Announcement', self.get_course().get_course_announcement_list_email()) payload = request.get('payload') update_dict = transforms.json_to_dict(transforms.loads(payload), schema.get_json_schema_dict()) entity.labels = utils.list_to_text( LabelGroupsHelper.decode_labels_group( update_dict.get('label_groups'))) transforms.dict_to_entity(entity, update_dict) entity.put() AnnouncementUtil.update_course_with_last_announcement( self.app_context.get_namespace_name()) email_sent = False if entity.send_email: email_manager = notify.EmailManager(self.get_course()) email_sent = email_manager.send_announcement( entity.title, entity.html, intent=ANNOUNCEMENTS_INTENT) if entity.send_email and not email_sent: if not self.get_course().get_course_announcement_list_email(): message = 'Saved. Announcement list not configured.' else: message = 'Saved, but there was an error sending email.' else: message = 'Saved.' transforms.send_json_response(self, 200, message)
def put(self): """Handles REST PUT verb with JSON payload.""" request = transforms.loads(self.request.get('request')) key = request.get('key') if not self.assert_xsrf_token_or_fail( request, 'announcement-put', {'key': key}): return if not AnnouncementsRights.can_edit(self): transforms.send_json_response( self, 401, 'Access denied.', {'key': key}) return entity = AnnouncementEntity.get(key) if not entity: transforms.send_json_response( self, 404, 'Object not found.', {'key': key}) return schema = AnnouncementsItemRESTHandler.SCHEMA( 'Announcement', self.get_course().get_course_announcement_list_email()) payload = request.get('payload') update_dict = transforms.json_to_dict( transforms.loads(payload), schema.get_json_schema_dict()) entity.labels = utils.list_to_text( LabelGroupsHelper.decode_labels_group( update_dict.get('label_groups'))) transforms.dict_to_entity(entity, update_dict) entity.put() email_sent = False if entity.send_email: email_manager = notify.EmailManager(self.get_course()) email_sent = email_manager.send_announcement( entity.title, entity.html) if entity.send_email and not email_sent: if not self.get_course().get_course_announcement_list_email(): message = 'Saved. Announcement list not configured.' else: message = 'Saved, but there was an error sending email.' else: message = 'Saved.' transforms.send_json_response(self, 200, message)
def put(self): """Handles REST PUT verb with JSON payload.""" request = transforms.loads(self.request.get('request')) key = request.get('key') if not self.assert_xsrf_token_or_fail( request, 'announcement-put', {'key': key}): return if not AnnouncementsRights.can_edit(self): transforms.send_json_response( self, 401, 'Access denied.', {'key': key}) return entity = AnnouncementEntity.get(key) if not entity: transforms.send_json_response( self, 404, 'Object not found.', {'key': key}) return schema = AnnouncementsItemRESTHandler.SCHEMA() payload = request.get('payload') update_dict = transforms.json_to_dict( transforms.loads(payload), schema.get_json_schema_dict()) # The datetime widget returns a datetime object and we need a UTC date. update_dict['date'] = datetime.datetime.strptime( update_dict['date'], courses.ISO_8601_DATE_FORMAT).date() entity.labels = utils.list_to_text( LabelGroupsHelper.decode_labels_group( update_dict.get('label_groups'))) transforms.dict_to_entity(entity, update_dict) entity.put() transforms.send_json_response(self, 200, 'Saved.')