def update(self, instance: LtiConfiguration, validated_data: dict) -> LtiConfiguration: """ Create/update a model-backed instance """ instance = instance or LtiConfiguration() instance.config_store = LtiConfiguration.CONFIG_ON_DB if validated_data: for key, value in validated_data.items(): if key in self.Meta.fields: setattr(instance, key, value) instance.save() return instance
def _update_lti(self, instance: DiscussionsConfiguration, validated_data: dict, course_key: CourseKey) -> DiscussionsConfiguration: """ Update LtiConfiguration """ lti_configuration_data = validated_data.get('lti_configuration') supports_lti = instance.supports( Features.LTI_BASIC_CONFIGURATION.value) if not supports_lti: instance.lti_configuration = None elif lti_configuration_data: lti_configuration = instance.lti_configuration or LtiConfiguration( ) lti_serializer = LtiSerializer( lti_configuration, data=lti_configuration_data, partial=True, context={ 'pii_sharing_allowed': get_lti_pii_sharing_state_for_course(course_key), }) if lti_serializer.is_valid(raise_exception=True): lti_serializer.save() instance.lti_configuration = lti_configuration return instance
def _update_lti( self, instance: DiscussionsConfiguration, validated_data: dict, ) -> DiscussionsConfiguration: """ Update LtiConfiguration """ lti_configuration_data = validated_data.get('lti_configuration') if not instance.supports_lti(): instance.lti_configuration = None elif lti_configuration_data: lti_configuration = instance.lti_configuration or LtiConfiguration( ) lti_serializer = LtiSerializer( lti_configuration, data=lti_configuration_data, partial=True, context={ 'pii_sharing_allowed': get_lti_pii_sharing_state_for_course(instance.context_key), }) if lti_serializer.is_valid(raise_exception=True): lti_serializer.save() instance.lti_configuration = lti_configuration return instance
def update(self, instance: LtiConfiguration, validated_data: dict) -> LtiConfiguration: """ Create/update a model-backed instance """ instance = instance or LtiConfiguration() instance.config_store = LtiConfiguration.CONFIG_ON_DB pii_sharing_allowed = self.context.get('pii_sharing_allowed', False) if validated_data: for key, value in validated_data.items(): if key.startswith('pii_') and not pii_sharing_allowed: raise serializers.ValidationError( "Cannot enable sending PII data until PII sharing for LTI is enabled for the course." ) if key in self.Meta.fields: setattr(instance, key, value) instance.save() return instance
def _update_lti(self, instance: DiscussionsConfiguration, validated_data: dict) -> DiscussionsConfiguration: """ Update LtiConfiguration """ lti_configuration_data = validated_data.get('lti_configuration') if lti_configuration_data: instance.lti_configuration = instance.lti_configuration or LtiConfiguration() lti_configuration = LtiSerializer( instance.lti_configuration, data=lti_configuration_data, partial=True, ) if lti_configuration.is_valid(raise_exception=True): lti_configuration.save() return instance
def _update_lti(self, instance: DiscussionsConfiguration, validated_data: dict) -> DiscussionsConfiguration: """ Update LtiConfiguration """ lti_configuration_data = validated_data.get('lti_configuration') supports_lti = instance.supports('lti') if not supports_lti: instance.lti_configuration = None elif lti_configuration_data: lti_configuration = instance.lti_configuration or LtiConfiguration() lti_serializer = LtiSerializer( lti_configuration, data=lti_configuration_data, partial=True, ) if lti_serializer.is_valid(raise_exception=True): lti_serializer.save() instance.lti_configuration = lti_configuration return instance
def create(self, validated_data): lti_config = validated_data.pop('lti_config', None) instance = LtiConfiguration() instance.version = 'lti_1p1' instance.config_store = LtiConfiguration.CONFIG_ON_DB for key, value in validated_data.items(): if key in set(self.Meta.fields).difference(self.Meta.read_only): setattr(instance, key, value) share_email, share_username = self.pii_sharing_allowed() instance.lti_config = { "pii_share_username": share_username, "pii_share_email": share_email, "additional_parameters": lti_config['additional_parameters'] } instance.save() return instance
def create(self, validated_data): lti_config = validated_data.pop('lti_config', None) instance = LtiConfiguration() instance.version = 'lti_1p1' for key, value in validated_data.items(): if key in set(self.Meta.fields).difference(self.Meta.read_only): setattr(instance, key, value) pii_sharing_allowed = self.context.get('pii_sharing_allowed', False) instance.lti_config = { "pii_share_username": pii_sharing_allowed, "pii_share_email": pii_sharing_allowed, "additional_parameters": lti_config['additional_parameters'] } instance.save() return instance
def update(self, instance: LtiConfiguration, validated_data: dict) -> LtiConfiguration: """ Create/update a model-backed instance """ instance.config_store = LtiConfiguration.CONFIG_ON_DB lti_config = validated_data.pop('lti_config', None) if lti_config.get('additional_parameters', None): instance.lti_config['additional_parameters'] = lti_config.get('additional_parameters') if validated_data: for key, value in validated_data.items(): if key in self.Meta.fields: setattr(instance, key, value) share_email, share_username = self.pii_sharing_allowed() instance.pii_share_username = share_username instance.pii_share_email = share_email instance.save() return instance
def to_representation(self, instance): payload = super().to_representation(instance) if not payload['lti_configuration']: payload['lti_configuration'] = LtiSerializer( LtiConfiguration()).data return payload