def convert(query): """Perform conversion and send results to Alfred.""" error = None results = None defs = Defaults(wf) c = Converter(defs, DECIMAL_SEPARATOR, THOUSANDS_SEPARATOR) try: i = c.parse(query) except ValueError as err: log.critical(u'invalid query (%s): %s', query, err) error = err.message else: try: results = c.convert(i) # log.debug('results=%r', results) except NoToUnits: log.critical(u'No to_units (or defaults) for %s', i.dimensionality) error = u'No destination units (or defaults) for {}'.format( i.dimensionality) except DimensionalityError as err: log.critical(u'invalid conversion (%s): %s', query, err) error = u"Can't convert from {} {} to {} {}".format( err.units1, err.dim1, err.units2, err.dim2) except KeyError as err: log.critical(u'invalid context (%s): %s', i.context, err) error = u'Unknown context: {}'.format(i.context) if not error and not results: error = 'Conversion input not understood' if error: # Show error wf.add_item(error, 'For example: 2.5cm in | 178lb kg | 200m/s mph', valid=False, icon=ICON_WARNING) else: # Show results p = CURRENCY_DECIMAL_PLACES if i.is_currency else DECIMAL_PLACES f = Formatter(p, DECIMAL_SEPARATOR, THOUSANDS_SEPARATOR, DYNAMIC_DECIMALS) wf.setvar('query', query) for conv in results: value = copytext = f.formatted(conv.to_number, conv.to_unit) if not COPY_UNIT: copytext = f.formatted(conv.to_number) it = wf.add_item(value, valid=True, arg=copytext, copytext=copytext, largetext=value, icon='icon.png') action = 'save' name = 'Save' if defs.is_default(conv.dimensionality, conv.to_unit): action = 'delete' name = 'Remove' mod = it.add_modifier( 'cmd', u'{} {} as default unit for {}'.format(name, conv.to_unit, conv.dimensionality)) mod.setvar('action', action) mod.setvar('unit', conv.to_unit) mod.setvar('dimensionality', conv.dimensionality) wf.send_feedback() log.debug('finished') return 0
def convert(query): """Perform conversion and send results to Alfred.""" error = None results = None defs = Defaults(wf) c = Converter(defs) try: i = c.parse(query) except ValueError as err: log.critical(u'invalid query (%s): %s', query, err) error = err.message else: try: results = c.convert(i) log.debug('results=%r', results) except NoToUnits: log.critical(u'No to_units (or defaults) for %s', i.dimensionality) error = u'No destination units (or defaults) for {}'.format( i.dimensionality) except DimensionalityError as err: log.critical(u'invalid conversion (%s): %s', query, err) error = u"Can't convert from {} {} to {} {}".format( err.units1, err.dim1, err.units2, err.dim2) if not error and not results: error = 'Conversion input not understood' if error: # Show error wf.add_item(error, 'For example: 2.5cm in | 178lb kg | 200m/s mph', valid=False, icon=ICON_WARNING) else: # Show results f = Formatter(DECIMAL_PLACES, DECIMAL_SEPARATOR, THOUSANDS_SEPARATOR) wf.setvar('query', query) for conv in results: value = copytext = f.formatted(conv.to_number, conv.to_unit) if not COPY_UNIT: copytext = f.formatted(conv.to_number) it = wf.add_item(value, valid=True, arg=copytext, copytext=copytext, largetext=value, icon='icon.png') action = 'save' name = 'Save' if defs.is_default(conv.dimensionality, conv.to_unit): action = 'delete' name = 'Remove' mod = it.add_modifier('cmd', u'{} {} as default unit for {}'.format( name, conv.to_unit, conv.dimensionality)) mod.setvar('action', action) mod.setvar('unit', conv.to_unit) mod.setvar('dimensionality', conv.dimensionality) wf.send_feedback() log.debug('finished') return 0