Beispiel #1
0
 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
Beispiel #2
0
 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
Beispiel #3
0
    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
Beispiel #4
0
 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
Beispiel #5
0
 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
Beispiel #6
0
 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
Beispiel #7
0
    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
Beispiel #8
0
    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
Beispiel #9
0
    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
Beispiel #10
0
 def to_representation(self, instance):
     payload = super().to_representation(instance)
     if not payload['lti_configuration']:
         payload['lti_configuration'] = LtiSerializer(
             LtiConfiguration()).data
     return payload