181 if not (from_query
and to_query):
184 measured = re.match(RE_MEASURE, from_query, re.VERBOSE)
185 if not (measured
and measured.group(
'number'), measured.group(
'unit')):
194 source_list, target_list = [], []
196 for symbol, si_name, from_si, to_si, orig_symbol
in symbol_to_si():
198 if symbol == measured.group(
'unit'):
199 source_list.append((si_name, to_si))
200 if symbol == to_query:
201 target_list.append((si_name, from_si, orig_symbol))
203 if not (source_list
and target_list):
206 source_to_si = target_from_si = target_symbol =
None
210 for source
in source_list:
211 for target
in target_list:
212 if source[0] == target[0]:
213 source_to_si = source[1]
214 target_from_si = target[1]
215 target_symbol = target[2]
217 if not (source_to_si
and target_from_si):
220 _locale = get_locale()
or 'en_US'
222 value = measured.group(
'sign') + measured.group(
'number') + (measured.group(
'E')
or '')
223 value = babel.numbers.parse_decimal(value, locale=_locale)
227 if isinstance(source_to_si, (float, int)):
228 value = float(value) * source_to_si
230 value = source_to_si(float(value))
234 if isinstance(target_from_si, (float, int)):
235 value = float(value) * target_from_si
237 value = target_from_si(float(value))
239 if measured.group(
'E'):
241 result = babel.numbers.format_scientific(value, locale=_locale)
243 result = babel.numbers.format_decimal(value, locale=_locale, format=
'#,##0.##########;-#')
245 return f
'{result} {target_symbol}'
252 if search.search_query.pageno > 1:
255 query = search.search_query.query
256 query_parts = query.split(
" ")
258 if len(query_parts) < 3:
261 for query_part
in query_parts:
262 for keyword
in CONVERT_KEYWORDS:
263 if query_part == keyword:
264 from_query, to_query = query.split(keyword, 1)
267 Answer(results=results, answer=target_val)