on master help sign in
Refactor search language preference.
93233c7marc
searx/preferences.py+22−14
@@ -59,18 +59,7 @@ class EnumStringSetting(Setting):
59 self._validate_selection(self.value)
59 self._validate_selection(self.value)
60
60
61 def parse(self, data):
61 def parse(self, data):
62− if data not in self.choices and data != self.value:
62+ self._validate_selection(data)
63− # hack to give some backwards compatibility with old language cookies
64− data = str(data).replace('_', '-')
65− lang = data[:2]
66− if data in self.choices:
67− pass
68− elif lang in self.choices:
69− data = lang
70− elif data == 'ar-XA':
71− data = 'ar-SA'
72− else:
73− data = 'all'
74 self.value = data
63 self.value = data
75
64
76
65
@@ -106,6 +95,25 @@ class MultipleChoiceSetting(EnumStringSetting):
106 resp.set_cookie(name, ','.join(self.value), max_age=COOKIE_MAX_AGE)
95 resp.set_cookie(name, ','.join(self.value), max_age=COOKIE_MAX_AGE)
107
96
108
97
98+class SearchLanguageSetting(EnumStringSetting):
99+ """Available choices may change, so user's value may not be in choices anymore"""
100+
101+ def parse(self, data):
102+ if data not in self.choices and data != self.value:
103+ # hack to give some backwards compatibility with old language cookies
104+ data = str(data).replace('_', '-')
105+ lang = data.split('-')[0]
106+ if data in self.choices:
107+ pass
108+ elif lang in self.choices:
109+ data = lang
110+ elif data == 'ar-XA':
111+ data = 'ar-SA'
112+ else:
113+ data = 'all'
114+ self.value = data
115+
116+
109class MapSetting(Setting):
117class MapSetting(Setting):
110 """Setting of a value that has to be translated in order to be storable"""
118 """Setting of a value that has to be translated in order to be storable"""
111
119
@@ -227,8 +235,8 @@ class Preferences(object):
227 super(Preferences, self).__init__()
235 super(Preferences, self).__init__()
228
236
229 self.key_value_settings = {'categories': MultipleChoiceSetting(['general'], choices=categories),
237 self.key_value_settings = {'categories': MultipleChoiceSetting(['general'], choices=categories),
230− 'language': EnumStringSetting(settings['search']['language'],
238+ 'language': SearchLanguageSetting(settings['search']['language'],
231− choices=LANGUAGE_CODES),
239+ choices=LANGUAGE_CODES),
232 'locale': EnumStringSetting(settings['ui']['default_locale'],
240 'locale': EnumStringSetting(settings['ui']['default_locale'],
233 choices=settings['locales'].keys() + ['']),
241 choices=settings['locales'].keys() + ['']),
234 'autocomplete': EnumStringSetting(settings['search']['autocomplete'],
242 'autocomplete': EnumStringSetting(settings['search']['autocomplete'],