150def fetch_traits(engine_traits: EngineTraits):
151 """Fetch languages from yahoo"""
152
153
154 import babel
155 from searx import network
157
158 engine_traits.all_locale = 'any'
159
160 resp = network.get('https://search.yahoo.com/preferences/languages')
161 if not resp.ok:
162 print("ERROR: response from yahoo is not OK.")
163
164 dom = html.fromstring(resp.text)
165 offset = len('lang_')
166
167 eng2sxng = {'zh_chs': 'zh_Hans', 'zh_cht': 'zh_Hant'}
168
169 for val in eval_xpath_list(dom, '//div[contains(@class, "lang-item")]/input/@value'):
170 eng_tag = val[offset:]
171
172 try:
173 sxng_tag = language_tag(babel.Locale.parse(eng2sxng.get(eng_tag, eng_tag)))
174 except babel.UnknownLocaleError:
175 print('ERROR: unknown language --> %s' % eng_tag)
176 continue
177
178 conflict = engine_traits.languages.get(sxng_tag)
179 if conflict:
180 if conflict != eng_tag:
181 print("CONFLICT: babel %s --> %s, %s" % (sxng_tag, conflict, eng_tag))
182 continue
183 engine_traits.languages[sxng_tag] = eng_tag