preferences: refactor to check consistently input values
This commit is contained in:
		
							parent
							
								
									044809e298
								
							
						
					
					
						commit
						12c369e858
					
				| @ -49,28 +49,32 @@ class StringSetting(Setting): | |||||||
| class EnumStringSetting(Setting): | class EnumStringSetting(Setting): | ||||||
|     """Setting of a value which can only come from the given choices""" |     """Setting of a value which can only come from the given choices""" | ||||||
| 
 | 
 | ||||||
|  |     def _validate_selection(self, selection): | ||||||
|  |         if selection not in self.choices: | ||||||
|  |             raise ValidationException('Invalid value: "{0}"'.format(selection)) | ||||||
|  | 
 | ||||||
|     def _post_init(self): |     def _post_init(self): | ||||||
|         if not hasattr(self, 'choices'): |         if not hasattr(self, 'choices'): | ||||||
|             raise MissingArgumentException('Missing argument: choices') |             raise MissingArgumentException('Missing argument: choices') | ||||||
| 
 |         self._validate_selection(self.value) | ||||||
|         if self.value != '' and self.value not in self.choices: |  | ||||||
|             raise ValidationException('Invalid default value: {0}'.format(self.value)) |  | ||||||
| 
 | 
 | ||||||
|     def parse(self, data): |     def parse(self, data): | ||||||
|         if data not in self.choices and data != self.value: |         self._validate_selection(data) | ||||||
|             raise ValidationException('Invalid choice: {0}'.format(data)) |  | ||||||
|         self.value = data |         self.value = data | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class MultipleChoiceSetting(EnumStringSetting): | class MultipleChoiceSetting(EnumStringSetting): | ||||||
|     """Setting of values which can only come from the given choices""" |     """Setting of values which can only come from the given choices""" | ||||||
| 
 | 
 | ||||||
|  |     def _validate_selections(self, selections): | ||||||
|  |         for item in selections: | ||||||
|  |             if item not in self.choices: | ||||||
|  |                 raise ValidationException('Invalid value: "{0}"'.format(selections)) | ||||||
|  | 
 | ||||||
|     def _post_init(self): |     def _post_init(self): | ||||||
|         if not hasattr(self, 'choices'): |         if not hasattr(self, 'choices'): | ||||||
|             raise MissingArgumentException('Missing argument: choices') |             raise MissingArgumentException('Missing argument: choices') | ||||||
|         for item in self.value: |         self._validate_selections(self.value) | ||||||
|             if item not in self.choices: |  | ||||||
|                 raise ValidationException('Invalid default value: {0}'.format(self.value)) |  | ||||||
| 
 | 
 | ||||||
|     def parse(self, data): |     def parse(self, data): | ||||||
|         if data == '': |         if data == '': | ||||||
| @ -78,9 +82,7 @@ class MultipleChoiceSetting(EnumStringSetting): | |||||||
|             return |             return | ||||||
| 
 | 
 | ||||||
|         elements = data.split(',') |         elements = data.split(',') | ||||||
|         for item in elements: |         self._validate_selections(elements) | ||||||
|             if item not in self.choices: |  | ||||||
|                 raise ValidationException('Invalid choice: {0}'.format(item)) |  | ||||||
|         self.value = elements |         self.value = elements | ||||||
| 
 | 
 | ||||||
|     def parse_form(self, data): |     def parse_form(self, data): | ||||||
| @ -216,7 +218,7 @@ class Preferences(object): | |||||||
|         self.key_value_settings = {'categories': MultipleChoiceSetting(['general'], choices=categories), |         self.key_value_settings = {'categories': MultipleChoiceSetting(['general'], choices=categories), | ||||||
|                                    'language': EnumStringSetting('all', choices=LANGUAGE_CODES), |                                    'language': EnumStringSetting('all', choices=LANGUAGE_CODES), | ||||||
|                                    'locale': EnumStringSetting(settings['ui']['default_locale'], |                                    'locale': EnumStringSetting(settings['ui']['default_locale'], | ||||||
|                                                                choices=settings['locales'].keys()), |                                                                choices=settings['locales'].keys() + ['']), | ||||||
|                                    'autocomplete': EnumStringSetting(settings['search']['autocomplete'], |                                    'autocomplete': EnumStringSetting(settings['search']['autocomplete'], | ||||||
|                                                                      choices=autocomplete.backends.keys() + ['']), |                                                                      choices=autocomplete.backends.keys() + ['']), | ||||||
|                                    'image_proxy': MapSetting(settings['server']['image_proxy'], |                                    'image_proxy': MapSetting(settings['server']['image_proxy'], | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Noémi Ványi
						Noémi Ványi