Example #1
0
    def clean(self):
        cleaned_data = super(ServiceSettingsAdminForm, self).clean()
        service_type = cleaned_data.get('type')
        if not service_type:
            return

        field_info = utils.get_all_services_field_info()
        fields_required = field_info.fields_required
        extra_fields_required = field_info.extra_fields_required

        # Check required fields of service type
        for field in fields_required[service_type]:
            value = cleaned_data.get(field)
            if not value:
                try:
                    self.add_error(field, _('This field is required.'))
                except ValueError:
                    logger.warning('Incorrect field %s in %s required_fields' %
                                   (field, service_type))

        # Check required extra fields of service type
        try:
            if 'options' in cleaned_data:
                options = json.loads(cleaned_data.get('options'))
                unfilled = set(extra_fields_required[service_type]) - set(
                    options.keys())
                if unfilled:
                    self.add_error(
                        'options',
                        _('This field must include keys: %s') %
                        ', '.join(unfilled))
        except ValueError:
            self.add_error('options', _('JSON is not valid'))
Example #2
0
    def clean(self):
        cleaned_data = super(ServiceSettingsAdminForm, self).clean()
        service_type = cleaned_data.get('type')
        if not service_type:
            return

        field_info = utils.get_all_services_field_info()
        fields_required = field_info.fields_required
        extra_fields_required = field_info.extra_fields_required
        fields_default = field_info.extra_fields_default[service_type]

        # Check required fields of service type
        for field in fields_required[service_type]:
            value = cleaned_data.get(field)
            if not value:
                try:
                    self.add_error(field, _('This field is required.'))
                except ValueError:
                    logger.warning(
                        'Incorrect field %s in %s required_fields'
                        % (field, service_type)
                    )

        # Check required extra fields of service type
        try:
            if 'options' in cleaned_data:
                options = json.loads(cleaned_data.get('options'))
                unfilled = (
                    set(extra_fields_required[service_type])
                    - set(options.keys())
                    - set(fields_default.keys())
                )

                if unfilled:
                    self.add_error(
                        'options',
                        _('This field must include keys: %s') % ', '.join(unfilled),
                    )
                service_serializer = SupportedServices.get_service_serializer_for_key(
                    service_type
                )
                options_serializer_class = getattr(
                    service_serializer.Meta, 'options_serializer', None
                )
                if options_serializer_class:
                    options_serializer = options_serializer_class(data=options)
                    if not options_serializer.is_valid():
                        self.add_error('options', json.dumps(options_serializer.errors))
                    else:
                        cleaned_data['options'] = options_serializer.validated_data
        except ValueError:
            self.add_error('options', _('JSON is not valid'))

        return cleaned_data
Example #3
0
    def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
        extra_context = extra_context or {}
        field_info = utils.get_all_services_field_info()
        service_field_names = field_info.fields
        service_fields_required = field_info.fields_required

        for service_name in service_field_names:
            service_field_names[service_name].extend(self.common_fields)

        extra_context['service_fields'] = json.dumps(service_field_names)
        extra_context['service_fields_required'] = json.dumps(service_fields_required)
        return super(PrivateServiceSettingsAdmin, self).changeform_view(request, object_id, form_url, extra_context)
Example #4
0
    def save_form(self, request, form, change):
        obj = super(SharedServiceSettingsAdmin,
                    self).save_form(request, form, change)
        """If required field is not filled, but it has got a default value, we set a default value."""
        field_info = utils.get_all_services_field_info()
        extra_fields_default = field_info.extra_fields_default[obj.type]
        extra_fields_required = field_info.extra_fields_required[obj.type]
        default = (set(extra_fields_required) - set(obj.options.keys())) & set(
            extra_fields_default.keys())

        if default:
            for d in default:
                obj.options[d] = extra_fields_default[d]

        if not change:
            obj.shared = True
        return obj