26def response(resp) -> EngineResults:
27 results = EngineResults()
28
29 result = resp.json()
30 info = result["info"]
31 from_to_prefix = "%s-%s " % (resp.search_params['from_lang'][1], resp.search_params['to_lang'][1])
32
33 if "typo" in info:
34 results.append({"suggestion": from_to_prefix + info["typo"]})
35
36 if 'definitions' in info:
37 for definition in info['definitions']:
38 for item in definition.get('list', []):
39 for synonym in item.get('synonyms', []):
40 results.append({"suggestion": from_to_prefix + synonym})
41
42 data = []
43
44 for definition in info['definitions']:
45 for translation in definition['list']:
46 data.append(
47 results.types.Translations.Item(
48 text=result['translation'],
49 definitions=[translation['definition']] if translation['definition'] else [],
50 examples=[translation['example']] if translation['example'] else [],
51 synonyms=translation['synonyms'],
52 )
53 )
54
55 for translation in info["extraTranslations"]:
56 for word in translation["list"]:
57 data.append(
58 results.types.Translations.Item(
59 text=word['word'],
60 definitions=word['meanings'],
61 )
62 )
63
64 if not data and result['translation']:
65 data.append(results.types.Translations.Item(text=result['translation']))
66
67 params = resp.search_params
68 results.add(
69 results.types.Translations(
70 translations=data,
71 url=f"{url}/{params['from_lang'][1]}/{params['to_lang'][1]}/{params['query']}",
72 )
73 )
74 return results