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'))
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
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)
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