def before_update_object(self, speaker, data, view_kwargs): """ method to save image urls before updating speaker object :param speaker: :param data: :param view_kwargs: :return: """ if not can_edit_after_cfs_ends(speaker.event_id): raise ForbiddenError( {'source': ''}, "Cannot edit speaker after the call for speaker is ended") if data.get('photo_url') and data['photo_url'] != speaker.photo_url: start_image_resizing_tasks(speaker, data['photo_url']) if data.get('is_email_overridden') and not has_access( 'is_organizer', event_id=speaker.event_id): raise ForbiddenError( {'pointer': 'data/attributes/is_email_overridden'}, 'Organizer access required to override email', ) if (data.get('is_email_overridden') and has_access('is_organizer', event_id=speaker.event_id) and not data.get('email')): data['email'] = current_user.email data[ 'complex_field_values'] = validate_custom_form_constraints_request( 'speaker', self.resource.schema, speaker, data)
def before_update_object(self, speaker, data, view_kwargs): """ method to save image urls before updating speaker object :param speaker: :param data: :param view_kwargs: :return: """ if not can_edit_after_cfs_ends(speaker.event_id): raise ForbiddenError( {'source': ''}, "Cannot edit speaker after the call for speaker is ended") if data.get('photo_url') and data['photo_url'] != speaker.photo_url: start_image_resizing_tasks(speaker, data['photo_url']) check_email_override(data, speaker.event_id) excluded = [] if not data.get('email'): # Don't check requirement of email if overriden excluded = ['email'] data[ 'complex_field_values'] = validate_custom_form_constraints_request( 'speaker', self.resource.schema, speaker, data, excluded)
def before_update_object(self, session, data, view_kwargs): """ before update method to verify if session is locked before updating session object :param event: :param data: :param view_kwargs: :return: """ if data.get('is_locked') != session.is_locked: if not (has_access('is_admin') or has_access('is_organizer', event_id=session.event_id)): raise ForbiddenError( {'source': '/data/attributes/is-locked'}, "You don't have enough permissions to change this property", ) if session.is_locked and data.get('is_locked') == session.is_locked: raise ForbiddenError( {'source': '/data/attributes/is-locked'}, "Locked sessions cannot be edited", ) if not can_edit_after_cfs_ends(session.event_id): raise ForbiddenError( {'source': ''}, "Cannot edit session after the call for speaker is ended")
def before_update_object(self, session, data, view_kwargs): """ before update method to verify if session is locked before updating session object :param event: :param data: :param view_kwargs: :return: """ is_organizer = has_access('is_admin') or has_access( 'is_organizer', event_id=session.event_id) if session.is_locked and not is_organizer: raise ForbiddenError( {'pointer': '/data/attributes/is-locked'}, "Locked sessions cannot be edited", ) new_state = data.get('state') if new_state and new_state != session.state: # State change detected. Verify that state change is allowed g.send_email = new_state in [ 'accepted', 'rejected', 'confirmed', 'rejected', 'canceled', 'withdrawn', ] key = 'speaker' if is_organizer: key = 'organizer' state_dict = SESSION_STATE_DICT[key] try: state_dict[session.state][new_state] except KeyError: raise ForbiddenError( {'pointer': '/data/attributes/state'}, f'You cannot change a session state from "{session.state}" to "{new_state}"', ) if not can_edit_after_cfs_ends(session.event_id): raise ForbiddenError( {'source': ''}, "Cannot edit session after the call for speaker is ended") # We allow organizers and admins to edit session without validations complex_field_values = data.get('complex_field_values', 'absent') # Set default to 'absent' to differentiate between None and not sent is_absent = complex_field_values == 'absent' # True if values are not sent in data JSON is_same = data.get( 'complex_field_values') == session.complex_field_values # Using original value to ensure None instead of absent # We stop checking validations for organizers only if they may result in data change or absent. See test_session_forms_api.py for more info if not (is_organizer and (is_absent or is_same)): data[ 'complex_field_values'] = validate_custom_form_constraints_request( 'session', self.resource.schema, session, data)
def before_update_object(self, speaker, data, view_kwargs): """ method to save image urls before updating speaker object :param speaker: :param data: :param view_kwargs: :return: """ if not can_edit_after_cfs_ends(speaker.event_id): raise ForbiddenException({'source': ''}, "Cannot edit speaker after the call for speaker is ended") if data.get('photo_url') and data['photo_url'] != speaker.photo_url: start_image_resizing_tasks(speaker, data['photo_url']) if data.get('is_email_overridden') and not has_access('is_organizer', event_id=speaker.event_id): raise ForbiddenException({'pointer': 'data/attributes/is_email_overridden'}, 'Organizer access required to override email') elif data.get('is_email_overridden') and has_access('is_organizer', event_id=speaker.event_id) and \ not data.get('email'): data['email'] = current_user.email